diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FunctionBodySkippingTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index 035b775..52befb9 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FunctionBodySkippingTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -2500,7 +2500,7 @@
         """,
         """
             import androidx.ui.core.Modifier
-            import androidx.ui.unit.Dp
+            import androidx.compose.ui.unit.Dp
             import androidx.compose.emptyContent
 
             @Composable
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
index e97daab..0e67361 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
@@ -35,7 +35,7 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.reflect.KCallable
 import kotlin.reflect.full.memberProperties
 
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt
index 18eeea6..21a23a8 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphBenchmark.kt
@@ -22,8 +22,8 @@
 import androidx.benchmark.junit4.measureRepeated
 import androidx.test.filters.LargeTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.unit.Density
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.sp
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.ImageAsset
 import androidx.ui.integration.test.Alphabet
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
index 7b98812..d8bdc05 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/ParagraphMethodBenchmark.kt
@@ -25,8 +25,8 @@
 import androidx.ui.integration.test.TextType
 import androidx.ui.integration.test.cartesian
 import androidx.compose.ui.text.font.Font
-import androidx.ui.unit.Density
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.sp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt
index fa3321c..d530d5a 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/compose/ui/text/TextDelegateBenchmark.kt
@@ -23,8 +23,8 @@
 import androidx.test.filters.LargeTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.benchmark.measureRepeatedRecordingCanvas
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.ImageAsset
@@ -33,8 +33,8 @@
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.cartesian
 import androidx.compose.ui.text.font.Font
-import androidx.ui.unit.Density
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.sp
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
index 83009f6..3734905 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/LayoutNodeModifierBenchmark.kt
@@ -38,7 +38,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.padding
 import androidx.ui.test.DisableTransitions
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Before
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
index e664397..f1a5a4d 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/SpacingBenchmark.kt
@@ -33,13 +33,13 @@
 import androidx.ui.benchmark.toggleStateBenchmarkRecompose
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
-import androidx.ui.core.offset
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.compose.foundation.layout.InnerPadding
 import androidx.compose.foundation.layout.padding
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.offset
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/TrailingLambdaBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/TrailingLambdaBenchmark.kt
index 1af89d1..b544865 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/TrailingLambdaBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/TrailingLambdaBenchmark.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt
index 3563b00..c5c7d15 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/OnPositionedBenchmark.kt
@@ -28,8 +28,8 @@
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextBasicBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextBasicBenchmark.kt
index dffcb63..dfa8c82 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextBasicBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextBasicBenchmark.kt
@@ -30,8 +30,8 @@
 import androidx.ui.benchmark.toggleStateBenchmarkRecompose
 import androidx.ui.integration.test.core.text.TextBasicTestCase
 import androidx.ui.integration.test.TextBenchmarkTestRule
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextMultiStyleBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextMultiStyleBenchmark.kt
index 850a50b..d36a464 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextMultiStyleBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextMultiStyleBenchmark.kt
@@ -27,8 +27,8 @@
 import androidx.ui.integration.test.core.text.TextMultiStyleTestCase
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.cartesian
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt
index 63141f0..69b8530 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/TextToggleTextBenchmark.kt
@@ -24,8 +24,8 @@
 import androidx.ui.benchmark.toggleStateBenchmarkRecompose
 import androidx.ui.integration.test.TextBenchmarkTestRule
 import androidx.ui.integration.test.core.text.TextToggleTextTestCase
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
index bb4c5a6..fbb3673 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/core/WithConstraintsBenchmark.kt
@@ -30,9 +30,11 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt
index cc5425e..0b95a19 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoApp.kt
@@ -21,7 +21,7 @@
 import androidx.compose.setValue
 import androidx.compose.animation.Crossfade
 import androidx.ui.core.Alignment
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.testTag
@@ -50,7 +50,7 @@
 import androidx.ui.material.icons.filled.Search
 import androidx.ui.material.icons.filled.Settings
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun DemoApp(
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
index 7ef432f..e630eab 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoFilter.kt
@@ -42,7 +42,7 @@
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * A scrollable list of [launchableDemos], filtered by [filterText].
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt
index 49ccc08..ffaa651 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/TextBenchmarkHelper.kt
@@ -33,8 +33,8 @@
 import androidx.compose.ui.text.style.BaselineShift
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import kotlin.math.ceil
 import kotlin.random.Random
 
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/BaseSimpleRadioButtonTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/BaseSimpleRadioButtonTestCase.kt
index a6e45b2..e3d51a9 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/BaseSimpleRadioButtonTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/BaseSimpleRadioButtonTestCase.kt
@@ -19,8 +19,8 @@
 import androidx.compose.Composable
 import androidx.compose.MutableState
 import androidx.compose.state
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.integration.test.ToggleableTestCase
 
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt
index 54bd8de..966bc6e 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton1TestCase.kt
@@ -26,7 +26,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.drawOutline
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 class SimpleRadioButton1TestCase : BaseSimpleRadioButtonTestCase() {
     @Composable
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt
index 9687ef2..a811778 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton2TestCase.kt
@@ -31,9 +31,9 @@
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 class SimpleRadioButton2TestCase : BaseSimpleRadioButtonTestCase() {
     @Composable
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt
index f60e30c..bfdf4ab 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton3TestCase.kt
@@ -22,7 +22,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 class SimpleRadioButton3TestCase : BaseSimpleRadioButtonTestCase() {
 
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton4TestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton4TestCase.kt
index 37f13bd..1152cb1 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton4TestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/SimpleRadioButton4TestCase.kt
@@ -26,7 +26,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 class SimpleRadioButton4TestCase : BaseSimpleRadioButtonTestCase() {
 
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextBasicTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextBasicTestCase.kt
index 7f86c3e..6e318ef 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextBasicTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextBasicTestCase.kt
@@ -27,8 +27,8 @@
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.Dp
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
 
 /**
  * The benchmark test case for [Text], where the input is a plain string.
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt
index e8e6e61..6029246 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextMultiStyleTestCase.kt
@@ -27,8 +27,8 @@
 import androidx.ui.test.ComposeTestCase
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.Dp
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
 
 /**
  * The benchmark test case for [Text], where the input is an [AnnotatedString] with [TextStyle]s
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt
index 7b078d4..2855717 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/text/TextToggleTextTestCase.kt
@@ -28,8 +28,8 @@
 import androidx.ui.integration.test.RandomTextGenerator
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.Dp
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
 
 class TextToggleTextTestCase(
     private val textGenerator: RandomTextGenerator,
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnSharedModelTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnSharedModelTestCase.kt
index 7b25451..0c7e173 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnSharedModelTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnSharedModelTestCase.kt
@@ -21,7 +21,7 @@
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.ui.material.MaterialTheme
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnTestCase.kt
index 47e85d0..78054f0 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/RectsInColumnTestCase.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.ui.material.MaterialTheme
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt
index dcffc80..8d302c2 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/ScrollerTestCase.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Test case that puts a large number of boxes in a column in a vertical scroller to force scrolling.
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt
index 83efb00..d35ea81 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/TextInColumnTestCase.kt
@@ -25,7 +25,7 @@
 import androidx.ui.material.Surface
 import androidx.ui.test.ComposeTestCase
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 /**
  * Test case that puts the given amount of rectangles into a column layout and makes changes by
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/framework/VectorAssetTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/framework/VectorAssetTestCase.kt
index e28878f..e767fd8 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/framework/VectorAssetTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/framework/VectorAssetTestCase.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.res.vectorResource
 import androidx.ui.test.ComposeTestCase
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Generic test case for drawing a [VectorAsset].
diff --git a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/ComplexInteractions.kt b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/ComplexInteractions.kt
index fca9e8a..71461bcc 100644
--- a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/ComplexInteractions.kt
+++ b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/ComplexInteractions.kt
@@ -38,7 +38,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.material.Button
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 
 // TODO(b/158099918): Add this demo to AndroidViewDemos.kt once b/158099918 has been resolved.
diff --git a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt
index ab54b8b..620e3fb 100644
--- a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt
+++ b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropAndroidInCompose.kt
@@ -39,7 +39,7 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 
 val AndroidInComposeDemos = DemoCategory("Android In Compose Interop", listOf(
diff --git a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropComposeInAndroid.kt b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropComposeInAndroid.kt
index c2a3c48..a3f8265 100644
--- a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropComposeInAndroid.kt
+++ b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/PointerInputInteropComposeInAndroid.kt
@@ -48,7 +48,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 val ComposeInAndroidDemos = DemoCategory(
     "Compose in Android Interop", listOf(
diff --git a/ui/ui-animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt b/ui/ui-animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt
index 3522ab1..bcb4aea 100644
--- a/ui/ui-animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt
+++ b/ui/ui-animation-core/samples/src/main/java/androidx/compose/animation/core/samples/KeyframesBuilderSample.kt
@@ -22,8 +22,8 @@
 import androidx.compose.animation.core.LinearOutSlowInEasing
 import androidx.compose.animation.core.keyframes
 import androidx.annotation.Sampled
-import androidx.ui.unit.Position
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.dp
 
 @Sampled
 fun FloatKeyframesBuilder() {
diff --git a/ui/ui-animation-core/src/commonMain/kotlin/androidx/compose/animation/core/AnimationSpec.kt b/ui/ui-animation-core/src/commonMain/kotlin/androidx/compose/animation/core/AnimationSpec.kt
index 3ee1406..0cb61c9 100644
--- a/ui/ui-animation-core/src/commonMain/kotlin/androidx/compose/animation/core/AnimationSpec.kt
+++ b/ui/ui-animation-core/src/commonMain/kotlin/androidx/compose/animation/core/AnimationSpec.kt
@@ -37,12 +37,12 @@
  *
  * Any type [T] can be animated by the system as long as a [TwoWayConverter] is supplied to convert
  * the data type [T] from and to an [AnimationVector]. There are a number of converters
- * available out of the box. For example, to animate [androidx.ui.unit.Position] the system uses
- * [androidx.compose.animation.PositionToVectorConverter] to convert the object to [AnimationVector2D],
- * so that both x and y dimensions are animated independently with separate velocity tracking.
- * This enables multidimensional objects to be animated in a true multi-dimensional way. It is
- * particularly useful for smoothly handling animation interruptions (such as when the target
- * changes during the animation).
+ * available out of the box. For example, to animate [androidx.compose.ui.unit.Position] the system
+ * uses [androidx.compose.animation.PositionToVectorConverter] to convert the object to
+ * [AnimationVector2D], so that both x and y dimensions are animated independently with separate
+ * velocity tracking. This enables multidimensional objects to be animated in a true
+ * multi-dimensional way. It is particularly useful for smoothly handling animation interruptions
+ * (such as when the target changes during the animation).
  */
 interface AnimationSpec<T> {
     /**
diff --git a/ui/ui-animation/api/0.1.0-dev16.txt b/ui/ui-animation/api/0.1.0-dev16.txt
index abe0ac9..fe89610 100644
--- a/ui/ui-animation/api/0.1.0-dev16.txt
+++ b/ui/ui-animation/api/0.1.0-dev16.txt
@@ -22,7 +22,7 @@
   }
 
   public final class AnimationModifierKt {
-    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
+    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
   }
 
   public final class ColorPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> {
@@ -50,12 +50,12 @@
     method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
-  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
+  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
     ctor public DpPropKey(String label);
     ctor public DpPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
   public final class LegacyTransitionKt {
@@ -71,14 +71,14 @@
   }
 
   public final class PropertyKeysKt {
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
     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>> getColorToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
@@ -101,36 +101,36 @@
 
   public final class SingleValueAnimationKt {
     method @androidx.compose.Composable public static float animate(float target, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animSpec = androidx.compose.animation.SingleValueAnimationKt.defaultAnimation, float visibilityThreshold = 0.01f, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Bounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static int animate(int target, androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animSpec = remember({ 
     return <init>(1)
 }), kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntOffset animate(androidx.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
     return <init>(IntOffset(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntSize animate(androidx.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = remember({ 
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntSize animate(androidx.compose.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = remember({ 
     return <init>(IntSize(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntSize,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
-    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.Composable public static float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-TEItX5s(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec = remember({ 
+    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-m3E411Q(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener = null);
diff --git a/ui/ui-animation/api/current.txt b/ui/ui-animation/api/current.txt
index abe0ac9..fe89610 100644
--- a/ui/ui-animation/api/current.txt
+++ b/ui/ui-animation/api/current.txt
@@ -22,7 +22,7 @@
   }
 
   public final class AnimationModifierKt {
-    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
+    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
   }
 
   public final class ColorPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> {
@@ -50,12 +50,12 @@
     method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
-  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
+  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
     ctor public DpPropKey(String label);
     ctor public DpPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
   public final class LegacyTransitionKt {
@@ -71,14 +71,14 @@
   }
 
   public final class PropertyKeysKt {
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
     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>> getColorToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
@@ -101,36 +101,36 @@
 
   public final class SingleValueAnimationKt {
     method @androidx.compose.Composable public static float animate(float target, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animSpec = androidx.compose.animation.SingleValueAnimationKt.defaultAnimation, float visibilityThreshold = 0.01f, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Bounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static int animate(int target, androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animSpec = remember({ 
     return <init>(1)
 }), kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntOffset animate(androidx.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
     return <init>(IntOffset(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntSize animate(androidx.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = remember({ 
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntSize animate(androidx.compose.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = remember({ 
     return <init>(IntSize(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntSize,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
-    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.Composable public static float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-TEItX5s(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec = remember({ 
+    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-m3E411Q(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener = null);
diff --git a/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
index abe0ac9..fe89610 100644
--- a/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/public_plus_experimental_0.1.0-dev16.txt
@@ -22,7 +22,7 @@
   }
 
   public final class AnimationModifierKt {
-    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
+    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
   }
 
   public final class ColorPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> {
@@ -50,12 +50,12 @@
     method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
-  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
+  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
     ctor public DpPropKey(String label);
     ctor public DpPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
   public final class LegacyTransitionKt {
@@ -71,14 +71,14 @@
   }
 
   public final class PropertyKeysKt {
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
     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>> getColorToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
@@ -101,36 +101,36 @@
 
   public final class SingleValueAnimationKt {
     method @androidx.compose.Composable public static float animate(float target, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animSpec = androidx.compose.animation.SingleValueAnimationKt.defaultAnimation, float visibilityThreshold = 0.01f, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Bounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static int animate(int target, androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animSpec = remember({ 
     return <init>(1)
 }), kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntOffset animate(androidx.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
     return <init>(IntOffset(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntSize animate(androidx.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = remember({ 
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntSize animate(androidx.compose.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = remember({ 
     return <init>(IntSize(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntSize,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
-    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.Composable public static float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-TEItX5s(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec = remember({ 
+    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-m3E411Q(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener = null);
diff --git a/ui/ui-animation/api/public_plus_experimental_current.txt b/ui/ui-animation/api/public_plus_experimental_current.txt
index abe0ac9..fe89610 100644
--- a/ui/ui-animation/api/public_plus_experimental_current.txt
+++ b/ui/ui-animation/api/public_plus_experimental_current.txt
@@ -22,7 +22,7 @@
   }
 
   public final class AnimationModifierKt {
-    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
+    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
   }
 
   public final class ColorPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> {
@@ -50,12 +50,12 @@
     method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
-  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
+  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
     ctor public DpPropKey(String label);
     ctor public DpPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
   public final class LegacyTransitionKt {
@@ -71,14 +71,14 @@
   }
 
   public final class PropertyKeysKt {
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
     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>> getColorToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
@@ -101,36 +101,36 @@
 
   public final class SingleValueAnimationKt {
     method @androidx.compose.Composable public static float animate(float target, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animSpec = androidx.compose.animation.SingleValueAnimationKt.defaultAnimation, float visibilityThreshold = 0.01f, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Bounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static int animate(int target, androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animSpec = remember({ 
     return <init>(1)
 }), kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntOffset animate(androidx.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
     return <init>(IntOffset(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntSize animate(androidx.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = remember({ 
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntSize animate(androidx.compose.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = remember({ 
     return <init>(IntSize(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntSize,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
-    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.Composable public static float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-TEItX5s(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec = remember({ 
+    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-m3E411Q(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener = null);
diff --git a/ui/ui-animation/api/restricted_0.1.0-dev16.txt b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
index abe0ac9..fe89610 100644
--- a/ui/ui-animation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
@@ -22,7 +22,7 @@
   }
 
   public final class AnimationModifierKt {
-    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
+    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
   }
 
   public final class ColorPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> {
@@ -50,12 +50,12 @@
     method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
-  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
+  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
     ctor public DpPropKey(String label);
     ctor public DpPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
   public final class LegacyTransitionKt {
@@ -71,14 +71,14 @@
   }
 
   public final class PropertyKeysKt {
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
     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>> getColorToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
@@ -101,36 +101,36 @@
 
   public final class SingleValueAnimationKt {
     method @androidx.compose.Composable public static float animate(float target, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animSpec = androidx.compose.animation.SingleValueAnimationKt.defaultAnimation, float visibilityThreshold = 0.01f, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Bounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static int animate(int target, androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animSpec = remember({ 
     return <init>(1)
 }), kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntOffset animate(androidx.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
     return <init>(IntOffset(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntSize animate(androidx.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = remember({ 
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntSize animate(androidx.compose.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = remember({ 
     return <init>(IntSize(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntSize,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
-    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.Composable public static float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-TEItX5s(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec = remember({ 
+    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-m3E411Q(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener = null);
diff --git a/ui/ui-animation/api/restricted_current.txt b/ui/ui-animation/api/restricted_current.txt
index abe0ac9..fe89610 100644
--- a/ui/ui-animation/api/restricted_current.txt
+++ b/ui/ui-animation/api/restricted_current.txt
@@ -22,7 +22,7 @@
   }
 
   public final class AnimationModifierKt {
-    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
+    method public static androidx.ui.core.Modifier animateContentSize(androidx.ui.core.Modifier, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = spring(), boolean clip = true);
   }
 
   public final class ColorPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> {
@@ -50,12 +50,12 @@
     method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
-  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
+  public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
     ctor public DpPropKey(String label);
     ctor public DpPropKey();
     method public String getLabel();
-    method public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
-    property public androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
+    method public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getTypeConverter();
+    property public androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> typeConverter;
   }
 
   public final class LegacyTransitionKt {
@@ -71,14 +71,14 @@
   }
 
   public final class PropertyKeysKt {
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Bounds,androidx.compose.animation.core.AnimationVector4D> getBoundsToVectorConverter();
     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>> getColorToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> getDpToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntOffset,androidx.compose.animation.core.AnimationVector2D> getIntPxPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.IntSize,androidx.compose.animation.core.AnimationVector2D> getIntSizeToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> getOffsetToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
-    method public static androidx.compose.animation.core.TwoWayConverter<androidx.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.Position,androidx.compose.animation.core.AnimationVector2D> getPositionToVectorConverter();
+    method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.unit.PxBounds,androidx.compose.animation.core.AnimationVector4D> getPxBoundsToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Rect,androidx.compose.animation.core.AnimationVector4D> getRectToVectorConverter();
     method public static androidx.compose.animation.core.TwoWayConverter<androidx.compose.ui.geometry.Size,androidx.compose.animation.core.AnimationVector2D> getSizeToVectorConverter();
   }
@@ -101,36 +101,36 @@
 
   public final class SingleValueAnimationKt {
     method @androidx.compose.Composable public static float animate(float target, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animSpec = androidx.compose.animation.SingleValueAnimationKt.defaultAnimation, float visibilityThreshold = 0.01f, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.Bounds animate(androidx.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
     return <init>(BoundsToVectorConverter.invoke(DpVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Bounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Bounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static androidx.compose.ui.geometry.Offset animate(androidx.compose.ui.geometry.Offset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Offset> animSpec = remember({ 
     return <init>(Offset(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.PxBounds animate(androidx.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
     return <init>(PxBoundsToVectorConverter.invoke(PxVisibilityThreshold4D))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.PxBounds,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static int animate(int target, androidx.compose.animation.core.AnimationSpec<java.lang.Integer> animSpec = remember({ 
     return <init>(1)
 }), kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntOffset animate(androidx.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
     return <init>(IntOffset(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static androidx.ui.unit.IntSize animate(androidx.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.IntSize> animSpec = remember({ 
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static androidx.compose.ui.unit.IntSize animate(androidx.compose.ui.unit.IntSize target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntSize> animSpec = remember({ 
     return <init>(IntSize(1, 1))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntSize,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntSize,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T extends androidx.compose.animation.core.AnimationVector> T animate(T target, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, androidx.compose.animation.core.AnimationSpec<T> animSpec = remember({ 
     return <init>(visibilityThreshold)
 }), T? visibilityThreshold = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static long animate-0sIwwMA(long target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Position> animSpec = remember({ 
-    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Position,kotlin.Unit>? endListener = null);
-    method @androidx.compose.Composable public static float animate-U78yQB0(float target, androidx.compose.animation.core.AnimationSpec<androidx.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.Composable public static float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
     return <init>(DpVisibilityThreshold.dp)
-}), kotlin.jvm.functions.Function1<? super androidx.ui.unit.Dp,kotlin.Unit>? endListener = null);
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Dp,kotlin.Unit>? endListener = null);
+    method @androidx.compose.Composable public static long animate-TEItX5s(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Position> animSpec = remember({ 
+    return <init>(Position(DpVisibilityThreshold.dp, DpVisibilityThreshold.dp))
+}), kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.Position,kotlin.Unit>? endListener = null);
     method @androidx.compose.Composable public static long animate-m3E411Q(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.graphics.Color> animSpec = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,kotlin.Unit>? endListener = null);
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt
index 7c3b62d..1a7561e 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimatableSeekBarDemo.kt
@@ -43,8 +43,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 
 @Composable
 fun AnimatableSeekBarDemo() {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimateContentSizeDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimateContentSizeDemo.kt
index 33f7b28..06d9b93 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimateContentSizeDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/AnimateContentSizeDemo.kt
@@ -41,7 +41,7 @@
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.ui.material.Button
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun AnimateContentSizeDemo() {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/CrossfadeDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/CrossfadeDemo.kt
index cb3704f..d6fb17f 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/CrossfadeDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/CrossfadeDemo.kt
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.random.Random
 
 @Composable
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt
index 2f65b7a..ea7c195 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/FancyScrollingDemo.kt
@@ -36,8 +36,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import kotlin.math.roundToInt
 
 const val DEBUG = false
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt
index a426520..3b78635 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/RepeatedRotationDemo.kt
@@ -37,8 +37,8 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 
 @Composable
 fun RepeatedRotationDemo() {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt
index 0676ae0..e8337c4 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SpringBackScrollingDemo.kt
@@ -36,8 +36,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import kotlin.math.roundToInt
 
 @Composable
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt
index 74beb45..935386d 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateBasedRippleDemo.kt
@@ -36,7 +36,7 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun StateBasedRippleDemo() {
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt
index 05bf75d0..dc937d3 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SwipeToDismissDemo.kt
@@ -40,8 +40,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import kotlin.math.sign
 
 @Composable
diff --git a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedValueSamples.kt b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedValueSamples.kt
index 38a9803..cddd06f 100644
--- a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedValueSamples.kt
+++ b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimatedValueSamples.kt
@@ -31,8 +31,8 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 enum class VisibilityState {
     Visible,
diff --git a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimationModifierSample.kt b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimationModifierSample.kt
index c429dc7..ee53466e 100644
--- a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimationModifierSample.kt
+++ b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/AnimationModifierSample.kt
@@ -33,7 +33,7 @@
 import androidx.compose.animation.animateContentSize
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/TransitionSamples.kt b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/TransitionSamples.kt
index 7f0f2c8..bb1ef85 100644
--- a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/TransitionSamples.kt
+++ b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/TransitionSamples.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.background
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 private enum class State {
     First,
diff --git a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt
index b66422a..cc06900 100644
--- a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt
+++ b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/AnimationModifierTest.kt
@@ -24,9 +24,9 @@
 import androidx.compose.mutableStateOf
 import androidx.compose.setValue
 import androidx.test.filters.MediumTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
@@ -34,7 +34,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import junit.framework.TestCase.assertEquals
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
index ad04c0e0..a6f8110 100644
--- a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
+++ b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/SingleValueAnimationTest.kt
@@ -35,8 +35,8 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.Bounds
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Bounds
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.lerp
 import org.junit.Assert.assertEquals
 import org.junit.Rule
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt
index acd1a1a..c6ac59d 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimationModifier.kt
@@ -23,15 +23,15 @@
 import androidx.compose.animation.core.spring
 import androidx.compose.remember
 import androidx.ui.core.AnimationClockAmbient
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
 import androidx.ui.core.clipToBounds
 import androidx.ui.core.composed
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 /**
  * This modifier animates its own size when its child modifier (or the child composable if it
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
index 8d0a6cf..ac6654c 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/PropertyKeys.kt
@@ -27,14 +27,14 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.colorspace.ColorSpace
 import androidx.compose.ui.graphics.colorspace.ColorSpaces
-import androidx.ui.unit.Bounds
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Position
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.Bounds
+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.PxBounds
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
index 121f7d9..a439c3f 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/SingleValueAnimation.kt
@@ -30,13 +30,13 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Color
-import androidx.ui.unit.Bounds
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Position
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Bounds
+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.PxBounds
+import androidx.compose.ui.unit.dp
 
 internal const val DpVisibilityThreshold = 0.1f
 internal const val PxVisibilityThreshold = 0.5f
diff --git a/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt b/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
index 703875a..ad823aa 100644
--- a/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
+++ b/ui/ui-animation/src/test/kotlin/androidx/compose/animation/ConverterTest.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.colorspace.ColorSpaces
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import junit.framework.TestCase.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/api/0.1.0-dev16.txt b/ui/ui-core/api/0.1.0-dev16.txt
index 1878414..b7fa316 100644
--- a/ui/ui-core/api/0.1.0-dev16.txt
+++ b/ui/ui-core/api/0.1.0-dev16.txt
@@ -21,7 +21,7 @@
     method public float component4();
     method public float component5();
     method public androidx.compose.ui.graphics.vector.VectorGroup component6();
-    method public androidx.compose.ui.graphics.vector.VectorAsset copy-RRDb8Ps(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
+    method public androidx.compose.ui.graphics.vector.VectorAsset copy-pRTh4Qo(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
     method public float getDefaultHeight();
     method public float getDefaultWidth();
     method public String getName();
@@ -102,7 +102,7 @@
 
   public final class VectorPainterKt {
     method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-CZQlTzY(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-RKTc9UI(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     field public static final String RootGroupName = "VectorRootGroup";
   }
 
@@ -235,7 +235,7 @@
 package androidx.ui.core {
 
   @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
@@ -260,7 +260,7 @@
   }
 
   @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
@@ -278,7 +278,7 @@
   }
 
   @androidx.compose.Immutable public interface Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
   }
 
@@ -316,7 +316,7 @@
   }
 
   @androidx.compose.Immutable public static interface Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
   @androidx.compose.Immutable public static interface Alignment.Vertical {
@@ -340,7 +340,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
@@ -360,7 +360,7 @@
 
   public final class AndroidComposeViewKt {
     method public static androidx.ui.core.AndroidOwner AndroidOwner(android.content.Context context, androidx.lifecycle.LifecycleOwner? lifecycleOwner = null, androidx.lifecycle.ViewModelStoreOwner? viewModelStoreOwner = null);
-    method public static androidx.ui.core.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
+    method public static androidx.compose.ui.unit.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
   }
 
   public interface AndroidOwner extends androidx.ui.core.Owner {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-n68Tcrs(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-VShsm3I(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
@@ -548,33 +548,33 @@
 
   public interface IntrinsicMeasurable {
     method public Object? getParentData();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract Object? parentData;
   }
 
   public final class IntrinsicMeasurableKt {
   }
 
-  public abstract class IntrinsicMeasureScope implements androidx.ui.unit.Density {
+  public abstract class IntrinsicMeasureScope implements androidx.compose.ui.unit.Density {
     ctor public IntrinsicMeasureScope();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
     method public final int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
   }
 
   public interface LayoutCoordinates {
-    method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
+    method public androidx.compose.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
     method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
     method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
@@ -582,13 +582,13 @@
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
-    property public abstract androidx.ui.unit.IntSize size;
+    property public abstract androidx.compose.ui.unit.IntSize size;
   }
 
   public final class LayoutCoordinatesKt {
-    method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
@@ -607,24 +607,24 @@
   }
 
   public final class LayoutKt {
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable @androidx.ui.core.ExperimentalLayoutNodeApi public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.LayoutNode.MeasureBlocks measureBlocks, androidx.ui.core.Modifier modifier = Modifier);
-    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable public static void WithConstraints(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.WithConstraintsScope,kotlin.Unit> children);
-    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   public interface LayoutModifier extends androidx.ui.core.Modifier.Element {
-    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   @androidx.ui.core.ExperimentalLayoutNodeApi public final class LayoutNode implements androidx.ui.core.Measurable androidx.ui.core.Remeasurement {
@@ -653,11 +653,11 @@
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public void move(int from, int to, int count);
     method public void onInvalidate();
     method public void place(int x, int y);
@@ -689,19 +689,19 @@
   }
 
   public static interface LayoutNode.MeasureBlocks {
-    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract static class LayoutNode.NoIntrinsicsMeasureBlocks implements androidx.ui.core.LayoutNode.MeasureBlocks {
     ctor public LayoutNode.NoIntrinsicsMeasureBlocks(String error);
-    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public final class LayoutNodeKt {
@@ -714,20 +714,20 @@
   }
 
   public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract class MeasureScope extends androidx.ui.core.IntrinsicMeasureScope {
     ctor public MeasureScope();
     method public final androidx.ui.core.MeasureScope.MeasureResult layout(int width, int height, java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines = emptyMap(), kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable.PlacementScope,kotlin.Unit> placementBlock);
-    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
+    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.compose.ui.unit.Constraints constraints);
   }
 
   public static interface MeasureScope.MeasureResult {
     method public java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> getAlignmentLines();
     method public int getHeight();
     method public int getWidth();
-    method public void placeChildren(androidx.ui.core.LayoutDirection layoutDirection);
+    method public void placeChildren(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines;
     property public abstract int height;
     property public abstract int width;
@@ -814,8 +814,8 @@
     method public android.graphics.Matrix getMatrix();
     method public androidx.ui.core.DrawLayerModifier getModifier();
     method public void invalidate();
-    method public void move(androidx.ui.unit.IntOffset position);
-    method public void resize(androidx.ui.unit.IntSize size);
+    method public void move(androidx.compose.ui.unit.IntOffset position);
+    method public void resize(androidx.compose.ui.unit.IntSize size);
     method public void setModifier(androidx.ui.core.DrawLayerModifier p);
     method public void updateDisplayList();
     method public void updateLayerProperties();
@@ -824,12 +824,12 @@
   }
 
   public interface Owner {
-    method public androidx.ui.unit.IntOffset calculatePosition();
+    method public androidx.compose.ui.unit.IntOffset calculatePosition();
     method public androidx.ui.core.OwnedLayer createLayer(androidx.ui.core.DrawLayerModifier drawLayerModifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> drawBlock, kotlin.jvm.functions.Function0<kotlin.Unit> invalidateParentLayer);
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
@@ -856,7 +856,7 @@
     property public abstract androidx.ui.autofill.Autofill? autofill;
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
@@ -889,38 +889,38 @@
   }
 
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
-    method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
+    method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
   }
 
   public abstract class Placeable {
     ctor public Placeable();
     method public abstract operator int get(androidx.ui.core.AlignmentLine line);
-    method protected final androidx.ui.unit.IntOffset getApparentToRealOffset();
+    method protected final androidx.compose.ui.unit.IntOffset getApparentToRealOffset();
     method public final int getHeight();
-    method protected final androidx.ui.unit.IntSize getMeasuredSize();
-    method protected final androidx.ui.core.Constraints getMeasurementConstraints();
+    method protected final androidx.compose.ui.unit.IntSize getMeasuredSize();
+    method protected final androidx.compose.ui.unit.Constraints getMeasurementConstraints();
     method public final int getWidth();
-    method protected abstract void place(androidx.ui.unit.IntOffset position);
-    method protected final void setMeasuredSize(androidx.ui.unit.IntSize value);
-    method protected final void setMeasurementConstraints(androidx.ui.core.Constraints p);
-    property protected final androidx.ui.unit.IntOffset apparentToRealOffset;
+    method protected abstract void place(androidx.compose.ui.unit.IntOffset position);
+    method protected final void setMeasuredSize(androidx.compose.ui.unit.IntSize value);
+    method protected final void setMeasurementConstraints(androidx.compose.ui.unit.Constraints p);
+    property protected final androidx.compose.ui.unit.IntOffset apparentToRealOffset;
     property public final int height;
-    property protected final androidx.ui.unit.IntSize measuredSize;
-    property protected final androidx.ui.core.Constraints measurementConstraints;
+    property protected final androidx.compose.ui.unit.IntSize measuredSize;
+    property protected final androidx.compose.ui.unit.Constraints measurementConstraints;
     property public final int width;
   }
 
   public abstract static class Placeable.PlacementScope {
     ctor public Placeable.PlacementScope();
-    method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
     method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
+    property public abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
     property public abstract int parentWidth;
   }
 
@@ -962,15 +962,15 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
-    method public androidx.ui.unit.Uptime? component1();
+    method public androidx.compose.ui.unit.Uptime? component1();
     method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
     method public androidx.compose.ui.geometry.Offset? getPosition();
-    method public androidx.ui.unit.Uptime? getUptime();
+    method public androidx.compose.ui.unit.Uptime? getUptime();
   }
 
   public final class PointerInputKt {
@@ -990,12 +990,12 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.compose.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public interface PopupPositionProvider {
-    method public androidx.ui.unit.IntOffset calculatePosition(androidx.ui.unit.IntBounds parentGlobalBounds, androidx.ui.unit.IntBounds windowGlobalBounds, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.unit.IntSize popupContentSize);
+    method public androidx.compose.ui.unit.IntOffset calculatePosition(androidx.compose.ui.unit.IntBounds parentGlobalBounds, androidx.compose.ui.unit.IntBounds windowGlobalBounds, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.IntSize popupContentSize);
   }
 
   public final class Ref<T> {
@@ -1017,7 +1017,7 @@
   }
 
   public final class SubcomposeLayoutKt {
-    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   @androidx.ui.core.ExperimentalSubcomposeLayoutApi public abstract class SubcomposeMeasureScope<T> extends androidx.ui.core.MeasureScope {
@@ -1056,14 +1056,14 @@
   }
 
   @androidx.compose.Stable public interface WithConstraintsScope {
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
     method public float getMinWidth();
-    property public abstract androidx.ui.core.Constraints constraints;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.Constraints constraints;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public abstract float maxHeight;
     property public abstract float maxWidth;
     property public abstract float minHeight;
@@ -1193,23 +1193,23 @@
 package androidx.ui.core.gesture {
 
   public final class ConstantsKt {
-    method public static androidx.ui.unit.Duration getDoubleTapMinTime();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapMinTime();
     method public static float getDoubleTapSlop();
-    method public static androidx.ui.unit.Duration getDoubleTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapTimeout();
     method public static float getDoubleTapTouchSlop();
     method public static float getHoverTapSlop();
-    method public static androidx.ui.unit.Duration getHoverTapTimeout();
-    method public static androidx.ui.unit.Duration getJumpTapTimeout();
-    method public static androidx.ui.unit.Duration getLongPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getHoverTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getJumpTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getLongPressTimeout();
     method public static float getMaxFlingVelocity();
     method public static float getMinFlingVelocity();
     method public static float getPagingTouchSlop();
     method public static float getPanSlop();
-    method public static androidx.ui.unit.Duration getPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getPressTimeout();
     method public static float getScaleSlop();
     method public static float getTouchSlop();
     method public static float getWindowTouchSlop();
-    method public static androidx.ui.unit.Duration getZoomControlsTimeout();
+    method public static androidx.compose.ui.unit.Duration getZoomControlsTimeout();
   }
 
   public final class DoubleTapGestureFilterKt {
@@ -1235,7 +1235,7 @@
   }
 
   public final class GestureUtilsKt {
-    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.ui.unit.IntSize bounds);
+    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public final class LongPressDragGestureFilterKt {
@@ -1366,8 +1366,8 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
-    method public androidx.ui.unit.Velocity calculateVelocity();
+    method public void addPosition(androidx.compose.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
+    method public androidx.compose.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
 
@@ -2051,8 +2051,8 @@
     method public abstract void onCancel();
     method public void onCustomEvent(androidx.ui.core.CustomEvent customEvent, androidx.ui.core.PointerEventPass pass);
     method public void onInit(androidx.ui.core.CustomEventDispatcher customEventDispatcher);
-    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
-    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
+    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
+    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public interface PointerInputModifier extends androidx.ui.core.Modifier.Element {
@@ -2156,29 +2156,29 @@
 
   public final class SemanticsNode {
     method public int getAlignmentLinePosition(androidx.ui.core.AlignmentLine line);
-    method public androidx.ui.unit.PxBounds getBoundsInRoot();
+    method public androidx.compose.ui.unit.PxBounds getBoundsInRoot();
     method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
-    method public androidx.ui.unit.PxBounds getGlobalBounds();
+    method public androidx.compose.ui.unit.PxBounds getGlobalBounds();
     method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
     method public androidx.compose.ui.geometry.Offset getPositionInRoot();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public boolean isRoot();
-    property public final androidx.ui.unit.PxBounds boundsInRoot;
+    property public final androidx.compose.ui.unit.PxBounds boundsInRoot;
     property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
-    property public final androidx.ui.unit.PxBounds globalBounds;
+    property public final androidx.compose.ui.unit.PxBounds globalBounds;
     property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
     property public final androidx.compose.ui.geometry.Offset positionInRoot;
-    property public final androidx.ui.unit.IntSize size;
+    property public final androidx.compose.ui.unit.IntSize size;
   }
 
   public final class SemanticsNodeKt {
@@ -2450,18 +2450,18 @@
 
   public final class PointerInputTestUtilKt {
     method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
-    method public static androidx.ui.core.PointerInputChange down(long id, androidx.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange down(long id, androidx.compose.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverAllPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event);
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses);
-    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
-    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration);
   }
 
 }
diff --git a/ui/ui-core/api/api_lint.ignore b/ui/ui-core/api/api_lint.ignore
index abc04a6..60fe3ff 100644
--- a/ui/ui-core/api/api_lint.ignore
+++ b/ui/ui-core/api/api_lint.ignore
@@ -1,9 +1,9 @@
 // Baseline format: 1.0
-ArrayReturn: androidx.ui.testutils.PointerInputTestUtilKt#invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange[], androidx.ui.unit.IntSize) parameter #1:
+ArrayReturn: androidx.ui.testutils.PointerInputTestUtilKt#invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange[], androidx.compose.ui.unit.IntSize) parameter #1:
     Method parameter should be Collection<PointerInputChange> (or subclass) instead of raw array; was `androidx.ui.core.PointerInputChange[]`
-ArrayReturn: androidx.ui.testutils.PointerInputTestUtilKt#invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange, androidx.ui.core.PointerEventPass[], androidx.ui.unit.IntSize) parameter #2:
+ArrayReturn: androidx.ui.testutils.PointerInputTestUtilKt#invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange, androidx.ui.core.PointerEventPass[], androidx.compose.ui.unit.IntSize) parameter #2:
     Method parameter should be Collection<PointerEventPass> (or subclass) instead of raw array; was `androidx.ui.core.PointerEventPass[]`
-ArrayReturn: androidx.ui.testutils.PointerInputTestUtilKt#invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange[], androidx.ui.core.PointerEventPass, androidx.ui.unit.IntSize) parameter #1:
+ArrayReturn: androidx.ui.testutils.PointerInputTestUtilKt#invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange[], androidx.ui.core.PointerEventPass, androidx.compose.ui.unit.IntSize) parameter #1:
     Method parameter should be Collection<PointerInputChange> (or subclass) instead of raw array; was `androidx.ui.core.PointerInputChange[]`
 
 
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 1878414..b7fa316 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -21,7 +21,7 @@
     method public float component4();
     method public float component5();
     method public androidx.compose.ui.graphics.vector.VectorGroup component6();
-    method public androidx.compose.ui.graphics.vector.VectorAsset copy-RRDb8Ps(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
+    method public androidx.compose.ui.graphics.vector.VectorAsset copy-pRTh4Qo(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
     method public float getDefaultHeight();
     method public float getDefaultWidth();
     method public String getName();
@@ -102,7 +102,7 @@
 
   public final class VectorPainterKt {
     method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-CZQlTzY(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-RKTc9UI(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     field public static final String RootGroupName = "VectorRootGroup";
   }
 
@@ -235,7 +235,7 @@
 package androidx.ui.core {
 
   @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
@@ -260,7 +260,7 @@
   }
 
   @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
@@ -278,7 +278,7 @@
   }
 
   @androidx.compose.Immutable public interface Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
   }
 
@@ -316,7 +316,7 @@
   }
 
   @androidx.compose.Immutable public static interface Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
   @androidx.compose.Immutable public static interface Alignment.Vertical {
@@ -340,7 +340,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
@@ -360,7 +360,7 @@
 
   public final class AndroidComposeViewKt {
     method public static androidx.ui.core.AndroidOwner AndroidOwner(android.content.Context context, androidx.lifecycle.LifecycleOwner? lifecycleOwner = null, androidx.lifecycle.ViewModelStoreOwner? viewModelStoreOwner = null);
-    method public static androidx.ui.core.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
+    method public static androidx.compose.ui.unit.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
   }
 
   public interface AndroidOwner extends androidx.ui.core.Owner {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-n68Tcrs(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-VShsm3I(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
@@ -548,33 +548,33 @@
 
   public interface IntrinsicMeasurable {
     method public Object? getParentData();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract Object? parentData;
   }
 
   public final class IntrinsicMeasurableKt {
   }
 
-  public abstract class IntrinsicMeasureScope implements androidx.ui.unit.Density {
+  public abstract class IntrinsicMeasureScope implements androidx.compose.ui.unit.Density {
     ctor public IntrinsicMeasureScope();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
     method public final int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
   }
 
   public interface LayoutCoordinates {
-    method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
+    method public androidx.compose.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
     method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
     method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
@@ -582,13 +582,13 @@
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
-    property public abstract androidx.ui.unit.IntSize size;
+    property public abstract androidx.compose.ui.unit.IntSize size;
   }
 
   public final class LayoutCoordinatesKt {
-    method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
@@ -607,24 +607,24 @@
   }
 
   public final class LayoutKt {
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable @androidx.ui.core.ExperimentalLayoutNodeApi public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.LayoutNode.MeasureBlocks measureBlocks, androidx.ui.core.Modifier modifier = Modifier);
-    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable public static void WithConstraints(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.WithConstraintsScope,kotlin.Unit> children);
-    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   public interface LayoutModifier extends androidx.ui.core.Modifier.Element {
-    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   @androidx.ui.core.ExperimentalLayoutNodeApi public final class LayoutNode implements androidx.ui.core.Measurable androidx.ui.core.Remeasurement {
@@ -653,11 +653,11 @@
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public void move(int from, int to, int count);
     method public void onInvalidate();
     method public void place(int x, int y);
@@ -689,19 +689,19 @@
   }
 
   public static interface LayoutNode.MeasureBlocks {
-    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract static class LayoutNode.NoIntrinsicsMeasureBlocks implements androidx.ui.core.LayoutNode.MeasureBlocks {
     ctor public LayoutNode.NoIntrinsicsMeasureBlocks(String error);
-    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public final class LayoutNodeKt {
@@ -714,20 +714,20 @@
   }
 
   public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract class MeasureScope extends androidx.ui.core.IntrinsicMeasureScope {
     ctor public MeasureScope();
     method public final androidx.ui.core.MeasureScope.MeasureResult layout(int width, int height, java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines = emptyMap(), kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable.PlacementScope,kotlin.Unit> placementBlock);
-    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
+    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.compose.ui.unit.Constraints constraints);
   }
 
   public static interface MeasureScope.MeasureResult {
     method public java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> getAlignmentLines();
     method public int getHeight();
     method public int getWidth();
-    method public void placeChildren(androidx.ui.core.LayoutDirection layoutDirection);
+    method public void placeChildren(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines;
     property public abstract int height;
     property public abstract int width;
@@ -814,8 +814,8 @@
     method public android.graphics.Matrix getMatrix();
     method public androidx.ui.core.DrawLayerModifier getModifier();
     method public void invalidate();
-    method public void move(androidx.ui.unit.IntOffset position);
-    method public void resize(androidx.ui.unit.IntSize size);
+    method public void move(androidx.compose.ui.unit.IntOffset position);
+    method public void resize(androidx.compose.ui.unit.IntSize size);
     method public void setModifier(androidx.ui.core.DrawLayerModifier p);
     method public void updateDisplayList();
     method public void updateLayerProperties();
@@ -824,12 +824,12 @@
   }
 
   public interface Owner {
-    method public androidx.ui.unit.IntOffset calculatePosition();
+    method public androidx.compose.ui.unit.IntOffset calculatePosition();
     method public androidx.ui.core.OwnedLayer createLayer(androidx.ui.core.DrawLayerModifier drawLayerModifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> drawBlock, kotlin.jvm.functions.Function0<kotlin.Unit> invalidateParentLayer);
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
@@ -856,7 +856,7 @@
     property public abstract androidx.ui.autofill.Autofill? autofill;
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
@@ -889,38 +889,38 @@
   }
 
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
-    method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
+    method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
   }
 
   public abstract class Placeable {
     ctor public Placeable();
     method public abstract operator int get(androidx.ui.core.AlignmentLine line);
-    method protected final androidx.ui.unit.IntOffset getApparentToRealOffset();
+    method protected final androidx.compose.ui.unit.IntOffset getApparentToRealOffset();
     method public final int getHeight();
-    method protected final androidx.ui.unit.IntSize getMeasuredSize();
-    method protected final androidx.ui.core.Constraints getMeasurementConstraints();
+    method protected final androidx.compose.ui.unit.IntSize getMeasuredSize();
+    method protected final androidx.compose.ui.unit.Constraints getMeasurementConstraints();
     method public final int getWidth();
-    method protected abstract void place(androidx.ui.unit.IntOffset position);
-    method protected final void setMeasuredSize(androidx.ui.unit.IntSize value);
-    method protected final void setMeasurementConstraints(androidx.ui.core.Constraints p);
-    property protected final androidx.ui.unit.IntOffset apparentToRealOffset;
+    method protected abstract void place(androidx.compose.ui.unit.IntOffset position);
+    method protected final void setMeasuredSize(androidx.compose.ui.unit.IntSize value);
+    method protected final void setMeasurementConstraints(androidx.compose.ui.unit.Constraints p);
+    property protected final androidx.compose.ui.unit.IntOffset apparentToRealOffset;
     property public final int height;
-    property protected final androidx.ui.unit.IntSize measuredSize;
-    property protected final androidx.ui.core.Constraints measurementConstraints;
+    property protected final androidx.compose.ui.unit.IntSize measuredSize;
+    property protected final androidx.compose.ui.unit.Constraints measurementConstraints;
     property public final int width;
   }
 
   public abstract static class Placeable.PlacementScope {
     ctor public Placeable.PlacementScope();
-    method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
     method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
+    property public abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
     property public abstract int parentWidth;
   }
 
@@ -962,15 +962,15 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
-    method public androidx.ui.unit.Uptime? component1();
+    method public androidx.compose.ui.unit.Uptime? component1();
     method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
     method public androidx.compose.ui.geometry.Offset? getPosition();
-    method public androidx.ui.unit.Uptime? getUptime();
+    method public androidx.compose.ui.unit.Uptime? getUptime();
   }
 
   public final class PointerInputKt {
@@ -990,12 +990,12 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.compose.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public interface PopupPositionProvider {
-    method public androidx.ui.unit.IntOffset calculatePosition(androidx.ui.unit.IntBounds parentGlobalBounds, androidx.ui.unit.IntBounds windowGlobalBounds, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.unit.IntSize popupContentSize);
+    method public androidx.compose.ui.unit.IntOffset calculatePosition(androidx.compose.ui.unit.IntBounds parentGlobalBounds, androidx.compose.ui.unit.IntBounds windowGlobalBounds, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.IntSize popupContentSize);
   }
 
   public final class Ref<T> {
@@ -1017,7 +1017,7 @@
   }
 
   public final class SubcomposeLayoutKt {
-    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   @androidx.ui.core.ExperimentalSubcomposeLayoutApi public abstract class SubcomposeMeasureScope<T> extends androidx.ui.core.MeasureScope {
@@ -1056,14 +1056,14 @@
   }
 
   @androidx.compose.Stable public interface WithConstraintsScope {
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
     method public float getMinWidth();
-    property public abstract androidx.ui.core.Constraints constraints;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.Constraints constraints;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public abstract float maxHeight;
     property public abstract float maxWidth;
     property public abstract float minHeight;
@@ -1193,23 +1193,23 @@
 package androidx.ui.core.gesture {
 
   public final class ConstantsKt {
-    method public static androidx.ui.unit.Duration getDoubleTapMinTime();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapMinTime();
     method public static float getDoubleTapSlop();
-    method public static androidx.ui.unit.Duration getDoubleTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapTimeout();
     method public static float getDoubleTapTouchSlop();
     method public static float getHoverTapSlop();
-    method public static androidx.ui.unit.Duration getHoverTapTimeout();
-    method public static androidx.ui.unit.Duration getJumpTapTimeout();
-    method public static androidx.ui.unit.Duration getLongPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getHoverTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getJumpTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getLongPressTimeout();
     method public static float getMaxFlingVelocity();
     method public static float getMinFlingVelocity();
     method public static float getPagingTouchSlop();
     method public static float getPanSlop();
-    method public static androidx.ui.unit.Duration getPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getPressTimeout();
     method public static float getScaleSlop();
     method public static float getTouchSlop();
     method public static float getWindowTouchSlop();
-    method public static androidx.ui.unit.Duration getZoomControlsTimeout();
+    method public static androidx.compose.ui.unit.Duration getZoomControlsTimeout();
   }
 
   public final class DoubleTapGestureFilterKt {
@@ -1235,7 +1235,7 @@
   }
 
   public final class GestureUtilsKt {
-    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.ui.unit.IntSize bounds);
+    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public final class LongPressDragGestureFilterKt {
@@ -1366,8 +1366,8 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
-    method public androidx.ui.unit.Velocity calculateVelocity();
+    method public void addPosition(androidx.compose.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
+    method public androidx.compose.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
 
@@ -2051,8 +2051,8 @@
     method public abstract void onCancel();
     method public void onCustomEvent(androidx.ui.core.CustomEvent customEvent, androidx.ui.core.PointerEventPass pass);
     method public void onInit(androidx.ui.core.CustomEventDispatcher customEventDispatcher);
-    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
-    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
+    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
+    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public interface PointerInputModifier extends androidx.ui.core.Modifier.Element {
@@ -2156,29 +2156,29 @@
 
   public final class SemanticsNode {
     method public int getAlignmentLinePosition(androidx.ui.core.AlignmentLine line);
-    method public androidx.ui.unit.PxBounds getBoundsInRoot();
+    method public androidx.compose.ui.unit.PxBounds getBoundsInRoot();
     method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
-    method public androidx.ui.unit.PxBounds getGlobalBounds();
+    method public androidx.compose.ui.unit.PxBounds getGlobalBounds();
     method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
     method public androidx.compose.ui.geometry.Offset getPositionInRoot();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public boolean isRoot();
-    property public final androidx.ui.unit.PxBounds boundsInRoot;
+    property public final androidx.compose.ui.unit.PxBounds boundsInRoot;
     property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
-    property public final androidx.ui.unit.PxBounds globalBounds;
+    property public final androidx.compose.ui.unit.PxBounds globalBounds;
     property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
     property public final androidx.compose.ui.geometry.Offset positionInRoot;
-    property public final androidx.ui.unit.IntSize size;
+    property public final androidx.compose.ui.unit.IntSize size;
   }
 
   public final class SemanticsNodeKt {
@@ -2450,18 +2450,18 @@
 
   public final class PointerInputTestUtilKt {
     method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
-    method public static androidx.ui.core.PointerInputChange down(long id, androidx.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange down(long id, androidx.compose.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverAllPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event);
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses);
-    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
-    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration);
   }
 
 }
diff --git a/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
index 1878414..b7fa316 100644
--- a/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -21,7 +21,7 @@
     method public float component4();
     method public float component5();
     method public androidx.compose.ui.graphics.vector.VectorGroup component6();
-    method public androidx.compose.ui.graphics.vector.VectorAsset copy-RRDb8Ps(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
+    method public androidx.compose.ui.graphics.vector.VectorAsset copy-pRTh4Qo(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
     method public float getDefaultHeight();
     method public float getDefaultWidth();
     method public String getName();
@@ -102,7 +102,7 @@
 
   public final class VectorPainterKt {
     method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-CZQlTzY(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-RKTc9UI(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     field public static final String RootGroupName = "VectorRootGroup";
   }
 
@@ -235,7 +235,7 @@
 package androidx.ui.core {
 
   @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
@@ -260,7 +260,7 @@
   }
 
   @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
@@ -278,7 +278,7 @@
   }
 
   @androidx.compose.Immutable public interface Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
   }
 
@@ -316,7 +316,7 @@
   }
 
   @androidx.compose.Immutable public static interface Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
   @androidx.compose.Immutable public static interface Alignment.Vertical {
@@ -340,7 +340,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
@@ -360,7 +360,7 @@
 
   public final class AndroidComposeViewKt {
     method public static androidx.ui.core.AndroidOwner AndroidOwner(android.content.Context context, androidx.lifecycle.LifecycleOwner? lifecycleOwner = null, androidx.lifecycle.ViewModelStoreOwner? viewModelStoreOwner = null);
-    method public static androidx.ui.core.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
+    method public static androidx.compose.ui.unit.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
   }
 
   public interface AndroidOwner extends androidx.ui.core.Owner {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-n68Tcrs(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-VShsm3I(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
@@ -548,33 +548,33 @@
 
   public interface IntrinsicMeasurable {
     method public Object? getParentData();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract Object? parentData;
   }
 
   public final class IntrinsicMeasurableKt {
   }
 
-  public abstract class IntrinsicMeasureScope implements androidx.ui.unit.Density {
+  public abstract class IntrinsicMeasureScope implements androidx.compose.ui.unit.Density {
     ctor public IntrinsicMeasureScope();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
     method public final int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
   }
 
   public interface LayoutCoordinates {
-    method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
+    method public androidx.compose.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
     method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
     method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
@@ -582,13 +582,13 @@
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
-    property public abstract androidx.ui.unit.IntSize size;
+    property public abstract androidx.compose.ui.unit.IntSize size;
   }
 
   public final class LayoutCoordinatesKt {
-    method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
@@ -607,24 +607,24 @@
   }
 
   public final class LayoutKt {
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable @androidx.ui.core.ExperimentalLayoutNodeApi public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.LayoutNode.MeasureBlocks measureBlocks, androidx.ui.core.Modifier modifier = Modifier);
-    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable public static void WithConstraints(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.WithConstraintsScope,kotlin.Unit> children);
-    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   public interface LayoutModifier extends androidx.ui.core.Modifier.Element {
-    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   @androidx.ui.core.ExperimentalLayoutNodeApi public final class LayoutNode implements androidx.ui.core.Measurable androidx.ui.core.Remeasurement {
@@ -653,11 +653,11 @@
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public void move(int from, int to, int count);
     method public void onInvalidate();
     method public void place(int x, int y);
@@ -689,19 +689,19 @@
   }
 
   public static interface LayoutNode.MeasureBlocks {
-    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract static class LayoutNode.NoIntrinsicsMeasureBlocks implements androidx.ui.core.LayoutNode.MeasureBlocks {
     ctor public LayoutNode.NoIntrinsicsMeasureBlocks(String error);
-    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public final class LayoutNodeKt {
@@ -714,20 +714,20 @@
   }
 
   public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract class MeasureScope extends androidx.ui.core.IntrinsicMeasureScope {
     ctor public MeasureScope();
     method public final androidx.ui.core.MeasureScope.MeasureResult layout(int width, int height, java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines = emptyMap(), kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable.PlacementScope,kotlin.Unit> placementBlock);
-    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
+    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.compose.ui.unit.Constraints constraints);
   }
 
   public static interface MeasureScope.MeasureResult {
     method public java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> getAlignmentLines();
     method public int getHeight();
     method public int getWidth();
-    method public void placeChildren(androidx.ui.core.LayoutDirection layoutDirection);
+    method public void placeChildren(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines;
     property public abstract int height;
     property public abstract int width;
@@ -814,8 +814,8 @@
     method public android.graphics.Matrix getMatrix();
     method public androidx.ui.core.DrawLayerModifier getModifier();
     method public void invalidate();
-    method public void move(androidx.ui.unit.IntOffset position);
-    method public void resize(androidx.ui.unit.IntSize size);
+    method public void move(androidx.compose.ui.unit.IntOffset position);
+    method public void resize(androidx.compose.ui.unit.IntSize size);
     method public void setModifier(androidx.ui.core.DrawLayerModifier p);
     method public void updateDisplayList();
     method public void updateLayerProperties();
@@ -824,12 +824,12 @@
   }
 
   public interface Owner {
-    method public androidx.ui.unit.IntOffset calculatePosition();
+    method public androidx.compose.ui.unit.IntOffset calculatePosition();
     method public androidx.ui.core.OwnedLayer createLayer(androidx.ui.core.DrawLayerModifier drawLayerModifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> drawBlock, kotlin.jvm.functions.Function0<kotlin.Unit> invalidateParentLayer);
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
@@ -856,7 +856,7 @@
     property public abstract androidx.ui.autofill.Autofill? autofill;
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
@@ -889,38 +889,38 @@
   }
 
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
-    method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
+    method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
   }
 
   public abstract class Placeable {
     ctor public Placeable();
     method public abstract operator int get(androidx.ui.core.AlignmentLine line);
-    method protected final androidx.ui.unit.IntOffset getApparentToRealOffset();
+    method protected final androidx.compose.ui.unit.IntOffset getApparentToRealOffset();
     method public final int getHeight();
-    method protected final androidx.ui.unit.IntSize getMeasuredSize();
-    method protected final androidx.ui.core.Constraints getMeasurementConstraints();
+    method protected final androidx.compose.ui.unit.IntSize getMeasuredSize();
+    method protected final androidx.compose.ui.unit.Constraints getMeasurementConstraints();
     method public final int getWidth();
-    method protected abstract void place(androidx.ui.unit.IntOffset position);
-    method protected final void setMeasuredSize(androidx.ui.unit.IntSize value);
-    method protected final void setMeasurementConstraints(androidx.ui.core.Constraints p);
-    property protected final androidx.ui.unit.IntOffset apparentToRealOffset;
+    method protected abstract void place(androidx.compose.ui.unit.IntOffset position);
+    method protected final void setMeasuredSize(androidx.compose.ui.unit.IntSize value);
+    method protected final void setMeasurementConstraints(androidx.compose.ui.unit.Constraints p);
+    property protected final androidx.compose.ui.unit.IntOffset apparentToRealOffset;
     property public final int height;
-    property protected final androidx.ui.unit.IntSize measuredSize;
-    property protected final androidx.ui.core.Constraints measurementConstraints;
+    property protected final androidx.compose.ui.unit.IntSize measuredSize;
+    property protected final androidx.compose.ui.unit.Constraints measurementConstraints;
     property public final int width;
   }
 
   public abstract static class Placeable.PlacementScope {
     ctor public Placeable.PlacementScope();
-    method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
     method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
+    property public abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
     property public abstract int parentWidth;
   }
 
@@ -962,15 +962,15 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
-    method public androidx.ui.unit.Uptime? component1();
+    method public androidx.compose.ui.unit.Uptime? component1();
     method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
     method public androidx.compose.ui.geometry.Offset? getPosition();
-    method public androidx.ui.unit.Uptime? getUptime();
+    method public androidx.compose.ui.unit.Uptime? getUptime();
   }
 
   public final class PointerInputKt {
@@ -990,12 +990,12 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.compose.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public interface PopupPositionProvider {
-    method public androidx.ui.unit.IntOffset calculatePosition(androidx.ui.unit.IntBounds parentGlobalBounds, androidx.ui.unit.IntBounds windowGlobalBounds, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.unit.IntSize popupContentSize);
+    method public androidx.compose.ui.unit.IntOffset calculatePosition(androidx.compose.ui.unit.IntBounds parentGlobalBounds, androidx.compose.ui.unit.IntBounds windowGlobalBounds, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.IntSize popupContentSize);
   }
 
   public final class Ref<T> {
@@ -1017,7 +1017,7 @@
   }
 
   public final class SubcomposeLayoutKt {
-    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   @androidx.ui.core.ExperimentalSubcomposeLayoutApi public abstract class SubcomposeMeasureScope<T> extends androidx.ui.core.MeasureScope {
@@ -1056,14 +1056,14 @@
   }
 
   @androidx.compose.Stable public interface WithConstraintsScope {
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
     method public float getMinWidth();
-    property public abstract androidx.ui.core.Constraints constraints;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.Constraints constraints;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public abstract float maxHeight;
     property public abstract float maxWidth;
     property public abstract float minHeight;
@@ -1193,23 +1193,23 @@
 package androidx.ui.core.gesture {
 
   public final class ConstantsKt {
-    method public static androidx.ui.unit.Duration getDoubleTapMinTime();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapMinTime();
     method public static float getDoubleTapSlop();
-    method public static androidx.ui.unit.Duration getDoubleTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapTimeout();
     method public static float getDoubleTapTouchSlop();
     method public static float getHoverTapSlop();
-    method public static androidx.ui.unit.Duration getHoverTapTimeout();
-    method public static androidx.ui.unit.Duration getJumpTapTimeout();
-    method public static androidx.ui.unit.Duration getLongPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getHoverTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getJumpTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getLongPressTimeout();
     method public static float getMaxFlingVelocity();
     method public static float getMinFlingVelocity();
     method public static float getPagingTouchSlop();
     method public static float getPanSlop();
-    method public static androidx.ui.unit.Duration getPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getPressTimeout();
     method public static float getScaleSlop();
     method public static float getTouchSlop();
     method public static float getWindowTouchSlop();
-    method public static androidx.ui.unit.Duration getZoomControlsTimeout();
+    method public static androidx.compose.ui.unit.Duration getZoomControlsTimeout();
   }
 
   public final class DoubleTapGestureFilterKt {
@@ -1235,7 +1235,7 @@
   }
 
   public final class GestureUtilsKt {
-    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.ui.unit.IntSize bounds);
+    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public final class LongPressDragGestureFilterKt {
@@ -1366,8 +1366,8 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
-    method public androidx.ui.unit.Velocity calculateVelocity();
+    method public void addPosition(androidx.compose.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
+    method public androidx.compose.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
 
@@ -2051,8 +2051,8 @@
     method public abstract void onCancel();
     method public void onCustomEvent(androidx.ui.core.CustomEvent customEvent, androidx.ui.core.PointerEventPass pass);
     method public void onInit(androidx.ui.core.CustomEventDispatcher customEventDispatcher);
-    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
-    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
+    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
+    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public interface PointerInputModifier extends androidx.ui.core.Modifier.Element {
@@ -2156,29 +2156,29 @@
 
   public final class SemanticsNode {
     method public int getAlignmentLinePosition(androidx.ui.core.AlignmentLine line);
-    method public androidx.ui.unit.PxBounds getBoundsInRoot();
+    method public androidx.compose.ui.unit.PxBounds getBoundsInRoot();
     method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
-    method public androidx.ui.unit.PxBounds getGlobalBounds();
+    method public androidx.compose.ui.unit.PxBounds getGlobalBounds();
     method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
     method public androidx.compose.ui.geometry.Offset getPositionInRoot();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public boolean isRoot();
-    property public final androidx.ui.unit.PxBounds boundsInRoot;
+    property public final androidx.compose.ui.unit.PxBounds boundsInRoot;
     property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
-    property public final androidx.ui.unit.PxBounds globalBounds;
+    property public final androidx.compose.ui.unit.PxBounds globalBounds;
     property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
     property public final androidx.compose.ui.geometry.Offset positionInRoot;
-    property public final androidx.ui.unit.IntSize size;
+    property public final androidx.compose.ui.unit.IntSize size;
   }
 
   public final class SemanticsNodeKt {
@@ -2450,18 +2450,18 @@
 
   public final class PointerInputTestUtilKt {
     method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
-    method public static androidx.ui.core.PointerInputChange down(long id, androidx.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange down(long id, androidx.compose.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverAllPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event);
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses);
-    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
-    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration);
   }
 
 }
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 1878414..b7fa316 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -21,7 +21,7 @@
     method public float component4();
     method public float component5();
     method public androidx.compose.ui.graphics.vector.VectorGroup component6();
-    method public androidx.compose.ui.graphics.vector.VectorAsset copy-RRDb8Ps(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
+    method public androidx.compose.ui.graphics.vector.VectorAsset copy-pRTh4Qo(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
     method public float getDefaultHeight();
     method public float getDefaultWidth();
     method public String getName();
@@ -102,7 +102,7 @@
 
   public final class VectorPainterKt {
     method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-CZQlTzY(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-RKTc9UI(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     field public static final String RootGroupName = "VectorRootGroup";
   }
 
@@ -235,7 +235,7 @@
 package androidx.ui.core {
 
   @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
@@ -260,7 +260,7 @@
   }
 
   @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
@@ -278,7 +278,7 @@
   }
 
   @androidx.compose.Immutable public interface Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
   }
 
@@ -316,7 +316,7 @@
   }
 
   @androidx.compose.Immutable public static interface Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
   @androidx.compose.Immutable public static interface Alignment.Vertical {
@@ -340,7 +340,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
@@ -360,7 +360,7 @@
 
   public final class AndroidComposeViewKt {
     method public static androidx.ui.core.AndroidOwner AndroidOwner(android.content.Context context, androidx.lifecycle.LifecycleOwner? lifecycleOwner = null, androidx.lifecycle.ViewModelStoreOwner? viewModelStoreOwner = null);
-    method public static androidx.ui.core.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
+    method public static androidx.compose.ui.unit.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
   }
 
   public interface AndroidOwner extends androidx.ui.core.Owner {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-n68Tcrs(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-VShsm3I(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
@@ -548,33 +548,33 @@
 
   public interface IntrinsicMeasurable {
     method public Object? getParentData();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract Object? parentData;
   }
 
   public final class IntrinsicMeasurableKt {
   }
 
-  public abstract class IntrinsicMeasureScope implements androidx.ui.unit.Density {
+  public abstract class IntrinsicMeasureScope implements androidx.compose.ui.unit.Density {
     ctor public IntrinsicMeasureScope();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
     method public final int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
   }
 
   public interface LayoutCoordinates {
-    method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
+    method public androidx.compose.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
     method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
     method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
@@ -582,13 +582,13 @@
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
-    property public abstract androidx.ui.unit.IntSize size;
+    property public abstract androidx.compose.ui.unit.IntSize size;
   }
 
   public final class LayoutCoordinatesKt {
-    method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
@@ -607,24 +607,24 @@
   }
 
   public final class LayoutKt {
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable @androidx.ui.core.ExperimentalLayoutNodeApi public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.LayoutNode.MeasureBlocks measureBlocks, androidx.ui.core.Modifier modifier = Modifier);
-    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable public static void WithConstraints(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.WithConstraintsScope,kotlin.Unit> children);
-    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   public interface LayoutModifier extends androidx.ui.core.Modifier.Element {
-    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   @androidx.ui.core.ExperimentalLayoutNodeApi public final class LayoutNode implements androidx.ui.core.Measurable androidx.ui.core.Remeasurement {
@@ -653,11 +653,11 @@
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public void move(int from, int to, int count);
     method public void onInvalidate();
     method public void place(int x, int y);
@@ -689,19 +689,19 @@
   }
 
   public static interface LayoutNode.MeasureBlocks {
-    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract static class LayoutNode.NoIntrinsicsMeasureBlocks implements androidx.ui.core.LayoutNode.MeasureBlocks {
     ctor public LayoutNode.NoIntrinsicsMeasureBlocks(String error);
-    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public final class LayoutNodeKt {
@@ -714,20 +714,20 @@
   }
 
   public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract class MeasureScope extends androidx.ui.core.IntrinsicMeasureScope {
     ctor public MeasureScope();
     method public final androidx.ui.core.MeasureScope.MeasureResult layout(int width, int height, java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines = emptyMap(), kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable.PlacementScope,kotlin.Unit> placementBlock);
-    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
+    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.compose.ui.unit.Constraints constraints);
   }
 
   public static interface MeasureScope.MeasureResult {
     method public java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> getAlignmentLines();
     method public int getHeight();
     method public int getWidth();
-    method public void placeChildren(androidx.ui.core.LayoutDirection layoutDirection);
+    method public void placeChildren(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines;
     property public abstract int height;
     property public abstract int width;
@@ -814,8 +814,8 @@
     method public android.graphics.Matrix getMatrix();
     method public androidx.ui.core.DrawLayerModifier getModifier();
     method public void invalidate();
-    method public void move(androidx.ui.unit.IntOffset position);
-    method public void resize(androidx.ui.unit.IntSize size);
+    method public void move(androidx.compose.ui.unit.IntOffset position);
+    method public void resize(androidx.compose.ui.unit.IntSize size);
     method public void setModifier(androidx.ui.core.DrawLayerModifier p);
     method public void updateDisplayList();
     method public void updateLayerProperties();
@@ -824,12 +824,12 @@
   }
 
   public interface Owner {
-    method public androidx.ui.unit.IntOffset calculatePosition();
+    method public androidx.compose.ui.unit.IntOffset calculatePosition();
     method public androidx.ui.core.OwnedLayer createLayer(androidx.ui.core.DrawLayerModifier drawLayerModifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> drawBlock, kotlin.jvm.functions.Function0<kotlin.Unit> invalidateParentLayer);
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
@@ -856,7 +856,7 @@
     property public abstract androidx.ui.autofill.Autofill? autofill;
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
@@ -889,38 +889,38 @@
   }
 
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
-    method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
+    method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
   }
 
   public abstract class Placeable {
     ctor public Placeable();
     method public abstract operator int get(androidx.ui.core.AlignmentLine line);
-    method protected final androidx.ui.unit.IntOffset getApparentToRealOffset();
+    method protected final androidx.compose.ui.unit.IntOffset getApparentToRealOffset();
     method public final int getHeight();
-    method protected final androidx.ui.unit.IntSize getMeasuredSize();
-    method protected final androidx.ui.core.Constraints getMeasurementConstraints();
+    method protected final androidx.compose.ui.unit.IntSize getMeasuredSize();
+    method protected final androidx.compose.ui.unit.Constraints getMeasurementConstraints();
     method public final int getWidth();
-    method protected abstract void place(androidx.ui.unit.IntOffset position);
-    method protected final void setMeasuredSize(androidx.ui.unit.IntSize value);
-    method protected final void setMeasurementConstraints(androidx.ui.core.Constraints p);
-    property protected final androidx.ui.unit.IntOffset apparentToRealOffset;
+    method protected abstract void place(androidx.compose.ui.unit.IntOffset position);
+    method protected final void setMeasuredSize(androidx.compose.ui.unit.IntSize value);
+    method protected final void setMeasurementConstraints(androidx.compose.ui.unit.Constraints p);
+    property protected final androidx.compose.ui.unit.IntOffset apparentToRealOffset;
     property public final int height;
-    property protected final androidx.ui.unit.IntSize measuredSize;
-    property protected final androidx.ui.core.Constraints measurementConstraints;
+    property protected final androidx.compose.ui.unit.IntSize measuredSize;
+    property protected final androidx.compose.ui.unit.Constraints measurementConstraints;
     property public final int width;
   }
 
   public abstract static class Placeable.PlacementScope {
     ctor public Placeable.PlacementScope();
-    method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
     method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
+    property public abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
     property public abstract int parentWidth;
   }
 
@@ -962,15 +962,15 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
-    method public androidx.ui.unit.Uptime? component1();
+    method public androidx.compose.ui.unit.Uptime? component1();
     method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
     method public androidx.compose.ui.geometry.Offset? getPosition();
-    method public androidx.ui.unit.Uptime? getUptime();
+    method public androidx.compose.ui.unit.Uptime? getUptime();
   }
 
   public final class PointerInputKt {
@@ -990,12 +990,12 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.compose.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public interface PopupPositionProvider {
-    method public androidx.ui.unit.IntOffset calculatePosition(androidx.ui.unit.IntBounds parentGlobalBounds, androidx.ui.unit.IntBounds windowGlobalBounds, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.unit.IntSize popupContentSize);
+    method public androidx.compose.ui.unit.IntOffset calculatePosition(androidx.compose.ui.unit.IntBounds parentGlobalBounds, androidx.compose.ui.unit.IntBounds windowGlobalBounds, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.IntSize popupContentSize);
   }
 
   public final class Ref<T> {
@@ -1017,7 +1017,7 @@
   }
 
   public final class SubcomposeLayoutKt {
-    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   @androidx.ui.core.ExperimentalSubcomposeLayoutApi public abstract class SubcomposeMeasureScope<T> extends androidx.ui.core.MeasureScope {
@@ -1056,14 +1056,14 @@
   }
 
   @androidx.compose.Stable public interface WithConstraintsScope {
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
     method public float getMinWidth();
-    property public abstract androidx.ui.core.Constraints constraints;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.Constraints constraints;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public abstract float maxHeight;
     property public abstract float maxWidth;
     property public abstract float minHeight;
@@ -1193,23 +1193,23 @@
 package androidx.ui.core.gesture {
 
   public final class ConstantsKt {
-    method public static androidx.ui.unit.Duration getDoubleTapMinTime();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapMinTime();
     method public static float getDoubleTapSlop();
-    method public static androidx.ui.unit.Duration getDoubleTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapTimeout();
     method public static float getDoubleTapTouchSlop();
     method public static float getHoverTapSlop();
-    method public static androidx.ui.unit.Duration getHoverTapTimeout();
-    method public static androidx.ui.unit.Duration getJumpTapTimeout();
-    method public static androidx.ui.unit.Duration getLongPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getHoverTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getJumpTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getLongPressTimeout();
     method public static float getMaxFlingVelocity();
     method public static float getMinFlingVelocity();
     method public static float getPagingTouchSlop();
     method public static float getPanSlop();
-    method public static androidx.ui.unit.Duration getPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getPressTimeout();
     method public static float getScaleSlop();
     method public static float getTouchSlop();
     method public static float getWindowTouchSlop();
-    method public static androidx.ui.unit.Duration getZoomControlsTimeout();
+    method public static androidx.compose.ui.unit.Duration getZoomControlsTimeout();
   }
 
   public final class DoubleTapGestureFilterKt {
@@ -1235,7 +1235,7 @@
   }
 
   public final class GestureUtilsKt {
-    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.ui.unit.IntSize bounds);
+    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public final class LongPressDragGestureFilterKt {
@@ -1366,8 +1366,8 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
-    method public androidx.ui.unit.Velocity calculateVelocity();
+    method public void addPosition(androidx.compose.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
+    method public androidx.compose.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
 
@@ -2051,8 +2051,8 @@
     method public abstract void onCancel();
     method public void onCustomEvent(androidx.ui.core.CustomEvent customEvent, androidx.ui.core.PointerEventPass pass);
     method public void onInit(androidx.ui.core.CustomEventDispatcher customEventDispatcher);
-    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
-    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
+    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
+    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public interface PointerInputModifier extends androidx.ui.core.Modifier.Element {
@@ -2156,29 +2156,29 @@
 
   public final class SemanticsNode {
     method public int getAlignmentLinePosition(androidx.ui.core.AlignmentLine line);
-    method public androidx.ui.unit.PxBounds getBoundsInRoot();
+    method public androidx.compose.ui.unit.PxBounds getBoundsInRoot();
     method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
-    method public androidx.ui.unit.PxBounds getGlobalBounds();
+    method public androidx.compose.ui.unit.PxBounds getGlobalBounds();
     method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
     method public androidx.compose.ui.geometry.Offset getPositionInRoot();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public boolean isRoot();
-    property public final androidx.ui.unit.PxBounds boundsInRoot;
+    property public final androidx.compose.ui.unit.PxBounds boundsInRoot;
     property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
-    property public final androidx.ui.unit.PxBounds globalBounds;
+    property public final androidx.compose.ui.unit.PxBounds globalBounds;
     property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
     property public final androidx.compose.ui.geometry.Offset positionInRoot;
-    property public final androidx.ui.unit.IntSize size;
+    property public final androidx.compose.ui.unit.IntSize size;
   }
 
   public final class SemanticsNodeKt {
@@ -2450,18 +2450,18 @@
 
   public final class PointerInputTestUtilKt {
     method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
-    method public static androidx.ui.core.PointerInputChange down(long id, androidx.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange down(long id, androidx.compose.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverAllPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event);
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses);
-    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
-    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration);
   }
 
 }
diff --git a/ui/ui-core/api/restricted_0.1.0-dev16.txt b/ui/ui-core/api/restricted_0.1.0-dev16.txt
index bcbfda8..87c2f1f 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev16.txt
@@ -21,7 +21,7 @@
     method public float component4();
     method public float component5();
     method public androidx.compose.ui.graphics.vector.VectorGroup component6();
-    method public androidx.compose.ui.graphics.vector.VectorAsset copy-RRDb8Ps(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
+    method public androidx.compose.ui.graphics.vector.VectorAsset copy-pRTh4Qo(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
     method public float getDefaultHeight();
     method public float getDefaultWidth();
     method public String getName();
@@ -102,7 +102,7 @@
 
   public final class VectorPainterKt {
     method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-CZQlTzY(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-RKTc9UI(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     field public static final String RootGroupName = "VectorRootGroup";
   }
 
@@ -235,7 +235,7 @@
 package androidx.ui.core {
 
   @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
@@ -260,7 +260,7 @@
   }
 
   @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
@@ -278,7 +278,7 @@
   }
 
   @androidx.compose.Immutable public interface Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
   }
 
@@ -316,7 +316,7 @@
   }
 
   @androidx.compose.Immutable public static interface Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
   @androidx.compose.Immutable public static interface Alignment.Vertical {
@@ -340,7 +340,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
@@ -360,7 +360,7 @@
 
   public final class AndroidComposeViewKt {
     method public static androidx.ui.core.AndroidOwner AndroidOwner(android.content.Context context, androidx.lifecycle.LifecycleOwner? lifecycleOwner = null, androidx.lifecycle.ViewModelStoreOwner? viewModelStoreOwner = null);
-    method public static androidx.ui.core.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
+    method public static androidx.compose.ui.unit.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
   }
 
   public interface AndroidOwner extends androidx.ui.core.Owner {
@@ -474,11 +474,11 @@
     method public androidx.ui.core.IntrinsicMinMax getMinMax();
     method public Object? getParentData();
     method public androidx.ui.core.IntrinsicWidthHeight getWidthHeight();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public Object? parentData;
   }
 
@@ -533,7 +533,7 @@
   }
 
   public final class DrawShadowKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-n68Tcrs(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-VShsm3I(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
@@ -568,24 +568,24 @@
 
   public interface IntrinsicMeasurable {
     method public Object? getParentData();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract Object? parentData;
   }
 
   public final class IntrinsicMeasurableKt {
   }
 
-  public abstract class IntrinsicMeasureScope implements androidx.ui.unit.Density {
+  public abstract class IntrinsicMeasureScope implements androidx.compose.ui.unit.Density {
     ctor public IntrinsicMeasureScope();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
     method public final int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
   }
 
   @kotlin.PublishedApi internal enum IntrinsicMinMax {
@@ -602,31 +602,31 @@
     enum_constant public static final androidx.ui.core.IntrinsicWidthHeight Width;
   }
 
-  @kotlin.PublishedApi internal final class IntrinsicsMeasureScope extends androidx.ui.core.MeasureScope implements androidx.ui.unit.Density {
-    ctor public IntrinsicsMeasureScope(androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection);
+  @kotlin.PublishedApi internal final class IntrinsicsMeasureScope extends androidx.ui.core.MeasureScope implements androidx.compose.ui.unit.Density {
+    ctor public IntrinsicsMeasureScope(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public float getDensity();
     method public float getFontScale();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method @androidx.compose.Stable public float toDp(float);
     method @androidx.compose.Stable public float toDp(int);
-    method @androidx.compose.Stable public float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public float toPx-0680j_4(float);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public long toSp(float);
     method @androidx.compose.Stable public long toSp(int);
-    method @androidx.compose.Stable public long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public long toSp-0680j_4(float);
   }
 
   public interface LayoutCoordinates {
-    method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
+    method public androidx.compose.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
     method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
     method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
@@ -634,13 +634,13 @@
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
-    property public abstract androidx.ui.unit.IntSize size;
+    property public abstract androidx.compose.ui.unit.IntSize size;
   }
 
   public final class LayoutCoordinatesKt {
-    method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
@@ -670,24 +670,24 @@
   }
 
   public final class LayoutKt {
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable @androidx.ui.core.ExperimentalLayoutNodeApi public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.LayoutNode.MeasureBlocks measureBlocks, androidx.ui.core.Modifier modifier = Modifier);
-    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable public static void WithConstraints(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.WithConstraintsScope,kotlin.Unit> children);
-    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   public interface LayoutModifier extends androidx.ui.core.Modifier.Element {
-    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   @androidx.ui.core.ExperimentalLayoutNodeApi public final class LayoutNode implements androidx.ui.core.Measurable androidx.ui.core.Remeasurement {
@@ -716,11 +716,11 @@
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public void move(int from, int to, int count);
     method public void onInvalidate();
     method public void place(int x, int y);
@@ -752,19 +752,19 @@
   }
 
   public static interface LayoutNode.MeasureBlocks {
-    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract static class LayoutNode.NoIntrinsicsMeasureBlocks implements androidx.ui.core.LayoutNode.MeasureBlocks {
     ctor public LayoutNode.NoIntrinsicsMeasureBlocks(String error);
-    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public final class LayoutNodeKt {
@@ -777,20 +777,20 @@
   }
 
   public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract class MeasureScope extends androidx.ui.core.IntrinsicMeasureScope {
     ctor public MeasureScope();
     method public final androidx.ui.core.MeasureScope.MeasureResult layout(int width, int height, java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines = emptyMap(), kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable.PlacementScope,kotlin.Unit> placementBlock);
-    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
+    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.compose.ui.unit.Constraints constraints);
   }
 
   public static interface MeasureScope.MeasureResult {
     method public java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> getAlignmentLines();
     method public int getHeight();
     method public int getWidth();
-    method public void placeChildren(androidx.ui.core.LayoutDirection layoutDirection);
+    method public void placeChildren(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines;
     property public abstract int height;
     property public abstract int width;
@@ -877,8 +877,8 @@
     method public android.graphics.Matrix getMatrix();
     method public androidx.ui.core.DrawLayerModifier getModifier();
     method public void invalidate();
-    method public void move(androidx.ui.unit.IntOffset position);
-    method public void resize(androidx.ui.unit.IntSize size);
+    method public void move(androidx.compose.ui.unit.IntOffset position);
+    method public void resize(androidx.compose.ui.unit.IntSize size);
     method public void setModifier(androidx.ui.core.DrawLayerModifier p);
     method public void updateDisplayList();
     method public void updateLayerProperties();
@@ -887,12 +887,12 @@
   }
 
   public interface Owner {
-    method public androidx.ui.unit.IntOffset calculatePosition();
+    method public androidx.compose.ui.unit.IntOffset calculatePosition();
     method public androidx.ui.core.OwnedLayer createLayer(androidx.ui.core.DrawLayerModifier drawLayerModifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> drawBlock, kotlin.jvm.functions.Function0<kotlin.Unit> invalidateParentLayer);
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
@@ -919,7 +919,7 @@
     property public abstract androidx.ui.autofill.Autofill? autofill;
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
@@ -952,38 +952,38 @@
   }
 
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
-    method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
+    method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
   }
 
   public abstract class Placeable {
     ctor public Placeable();
     method public abstract operator int get(androidx.ui.core.AlignmentLine line);
-    method protected final androidx.ui.unit.IntOffset getApparentToRealOffset();
+    method protected final androidx.compose.ui.unit.IntOffset getApparentToRealOffset();
     method public final int getHeight();
-    method protected final androidx.ui.unit.IntSize getMeasuredSize();
-    method protected final androidx.ui.core.Constraints getMeasurementConstraints();
+    method protected final androidx.compose.ui.unit.IntSize getMeasuredSize();
+    method protected final androidx.compose.ui.unit.Constraints getMeasurementConstraints();
     method public final int getWidth();
-    method protected abstract void place(androidx.ui.unit.IntOffset position);
-    method protected final void setMeasuredSize(androidx.ui.unit.IntSize value);
-    method protected final void setMeasurementConstraints(androidx.ui.core.Constraints p);
-    property protected final androidx.ui.unit.IntOffset apparentToRealOffset;
+    method protected abstract void place(androidx.compose.ui.unit.IntOffset position);
+    method protected final void setMeasuredSize(androidx.compose.ui.unit.IntSize value);
+    method protected final void setMeasurementConstraints(androidx.compose.ui.unit.Constraints p);
+    property protected final androidx.compose.ui.unit.IntOffset apparentToRealOffset;
     property public final int height;
-    property protected final androidx.ui.unit.IntSize measuredSize;
-    property protected final androidx.ui.core.Constraints measurementConstraints;
+    property protected final androidx.compose.ui.unit.IntSize measuredSize;
+    property protected final androidx.compose.ui.unit.Constraints measurementConstraints;
     property public final int width;
   }
 
   public abstract static class Placeable.PlacementScope {
     ctor public Placeable.PlacementScope();
-    method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
     method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
+    property public abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
     property public abstract int parentWidth;
   }
 
@@ -1025,15 +1025,15 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
-    method public androidx.ui.unit.Uptime? component1();
+    method public androidx.compose.ui.unit.Uptime? component1();
     method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
     method public androidx.compose.ui.geometry.Offset? getPosition();
-    method public androidx.ui.unit.Uptime? getUptime();
+    method public androidx.compose.ui.unit.Uptime? getUptime();
   }
 
   public final class PointerInputKt {
@@ -1053,12 +1053,12 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.compose.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public interface PopupPositionProvider {
-    method public androidx.ui.unit.IntOffset calculatePosition(androidx.ui.unit.IntBounds parentGlobalBounds, androidx.ui.unit.IntBounds windowGlobalBounds, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.unit.IntSize popupContentSize);
+    method public androidx.compose.ui.unit.IntOffset calculatePosition(androidx.compose.ui.unit.IntBounds parentGlobalBounds, androidx.compose.ui.unit.IntBounds windowGlobalBounds, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.IntSize popupContentSize);
   }
 
   public final class Ref<T> {
@@ -1080,7 +1080,7 @@
   }
 
   public final class SubcomposeLayoutKt {
-    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   @androidx.ui.core.ExperimentalSubcomposeLayoutApi public abstract class SubcomposeMeasureScope<T> extends androidx.ui.core.MeasureScope {
@@ -1119,14 +1119,14 @@
   }
 
   @androidx.compose.Stable public interface WithConstraintsScope {
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
     method public float getMinWidth();
-    property public abstract androidx.ui.core.Constraints constraints;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.Constraints constraints;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public abstract float maxHeight;
     property public abstract float maxWidth;
     property public abstract float minHeight;
@@ -1256,23 +1256,23 @@
 package androidx.ui.core.gesture {
 
   public final class ConstantsKt {
-    method public static androidx.ui.unit.Duration getDoubleTapMinTime();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapMinTime();
     method public static float getDoubleTapSlop();
-    method public static androidx.ui.unit.Duration getDoubleTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapTimeout();
     method public static float getDoubleTapTouchSlop();
     method public static float getHoverTapSlop();
-    method public static androidx.ui.unit.Duration getHoverTapTimeout();
-    method public static androidx.ui.unit.Duration getJumpTapTimeout();
-    method public static androidx.ui.unit.Duration getLongPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getHoverTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getJumpTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getLongPressTimeout();
     method public static float getMaxFlingVelocity();
     method public static float getMinFlingVelocity();
     method public static float getPagingTouchSlop();
     method public static float getPanSlop();
-    method public static androidx.ui.unit.Duration getPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getPressTimeout();
     method public static float getScaleSlop();
     method public static float getTouchSlop();
     method public static float getWindowTouchSlop();
-    method public static androidx.ui.unit.Duration getZoomControlsTimeout();
+    method public static androidx.compose.ui.unit.Duration getZoomControlsTimeout();
   }
 
   public final class DoubleTapGestureFilterKt {
@@ -1298,7 +1298,7 @@
   }
 
   public final class GestureUtilsKt {
-    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.ui.unit.IntSize bounds);
+    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public final class LongPressDragGestureFilterKt {
@@ -1429,8 +1429,8 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
-    method public androidx.ui.unit.Velocity calculateVelocity();
+    method public void addPosition(androidx.compose.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
+    method public androidx.compose.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
 
@@ -2114,8 +2114,8 @@
     method public abstract void onCancel();
     method public void onCustomEvent(androidx.ui.core.CustomEvent customEvent, androidx.ui.core.PointerEventPass pass);
     method public void onInit(androidx.ui.core.CustomEventDispatcher customEventDispatcher);
-    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
-    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
+    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
+    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public interface PointerInputModifier extends androidx.ui.core.Modifier.Element {
@@ -2219,29 +2219,29 @@
 
   public final class SemanticsNode {
     method public int getAlignmentLinePosition(androidx.ui.core.AlignmentLine line);
-    method public androidx.ui.unit.PxBounds getBoundsInRoot();
+    method public androidx.compose.ui.unit.PxBounds getBoundsInRoot();
     method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
-    method public androidx.ui.unit.PxBounds getGlobalBounds();
+    method public androidx.compose.ui.unit.PxBounds getGlobalBounds();
     method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
     method public androidx.compose.ui.geometry.Offset getPositionInRoot();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public boolean isRoot();
-    property public final androidx.ui.unit.PxBounds boundsInRoot;
+    property public final androidx.compose.ui.unit.PxBounds boundsInRoot;
     property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
-    property public final androidx.ui.unit.PxBounds globalBounds;
+    property public final androidx.compose.ui.unit.PxBounds globalBounds;
     property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
     property public final androidx.compose.ui.geometry.Offset positionInRoot;
-    property public final androidx.ui.unit.IntSize size;
+    property public final androidx.compose.ui.unit.IntSize size;
   }
 
   public final class SemanticsNodeKt {
@@ -2522,18 +2522,18 @@
 
   public final class PointerInputTestUtilKt {
     method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
-    method public static androidx.ui.core.PointerInputChange down(long id, androidx.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange down(long id, androidx.compose.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverAllPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event);
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses);
-    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
-    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration);
   }
 
 }
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index bcbfda8..87c2f1f 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -21,7 +21,7 @@
     method public float component4();
     method public float component5();
     method public androidx.compose.ui.graphics.vector.VectorGroup component6();
-    method public androidx.compose.ui.graphics.vector.VectorAsset copy-RRDb8Ps(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
+    method public androidx.compose.ui.graphics.vector.VectorAsset copy-pRTh4Qo(String name, float defaultWidth, float defaultHeight, float viewportWidth, float viewportHeight, androidx.compose.ui.graphics.vector.VectorGroup root);
     method public float getDefaultHeight();
     method public float getDefaultWidth();
     method public String getName();
@@ -102,7 +102,7 @@
 
   public final class VectorPainterKt {
     method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-CZQlTzY(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
+    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter-RKTc9UI(float defaultWidth, float defaultHeight, float viewportWidth = (0.0f/0.0f), float viewportHeight = (0.0f/0.0f), String name = "VectorRootGroup", kotlin.jvm.functions.Function2<? super java.lang.Float,? super java.lang.Float,kotlin.Unit> children);
     field public static final String RootGroupName = "VectorRootGroup";
   }
 
@@ -235,7 +235,7 @@
 package androidx.ui.core {
 
   @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
@@ -260,7 +260,7 @@
   }
 
   @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method @androidx.compose.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
@@ -278,7 +278,7 @@
   }
 
   @androidx.compose.Immutable public interface Alignment {
-    method public androidx.ui.unit.IntOffset align(androidx.ui.unit.IntSize size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public androidx.compose.ui.unit.IntOffset align(androidx.compose.ui.unit.IntSize size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
     field public static final androidx.ui.core.Alignment.Companion Companion;
   }
 
@@ -316,7 +316,7 @@
   }
 
   @androidx.compose.Immutable public static interface Alignment.Horizontal {
-    method public int align(int size, androidx.ui.core.LayoutDirection layoutDirection = LayoutDirection.Ltr);
+    method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
   @androidx.compose.Immutable public static interface Alignment.Vertical {
@@ -340,7 +340,7 @@
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
     method public static androidx.compose.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
@@ -360,7 +360,7 @@
 
   public final class AndroidComposeViewKt {
     method public static androidx.ui.core.AndroidOwner AndroidOwner(android.content.Context context, androidx.lifecycle.LifecycleOwner? lifecycleOwner = null, androidx.lifecycle.ViewModelStoreOwner? viewModelStoreOwner = null);
-    method public static androidx.ui.core.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
+    method public static androidx.compose.ui.unit.LayoutDirection getLocaleLayoutDirection(android.content.res.Configuration);
   }
 
   public interface AndroidOwner extends androidx.ui.core.Owner {
@@ -474,11 +474,11 @@
     method public androidx.ui.core.IntrinsicMinMax getMinMax();
     method public Object? getParentData();
     method public androidx.ui.core.IntrinsicWidthHeight getWidthHeight();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public Object? parentData;
   }
 
@@ -533,7 +533,7 @@
   }
 
   public final class DrawShadowKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-n68Tcrs(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawShadow-VShsm3I(androidx.ui.core.Modifier, float elevation, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = elevation > 0.dp, @FloatRange(from=0.0, to=1.0) float opacity = 1f);
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for Compose UI LayoutNode and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalLayoutNodeApi {
@@ -568,24 +568,24 @@
 
   public interface IntrinsicMeasurable {
     method public Object? getParentData();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract Object? parentData;
   }
 
   public final class IntrinsicMeasurableKt {
   }
 
-  public abstract class IntrinsicMeasureScope implements androidx.ui.unit.Density {
+  public abstract class IntrinsicMeasureScope implements androidx.compose.ui.unit.Density {
     ctor public IntrinsicMeasureScope();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
     method public final int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasurable, int width);
     method public final int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasurable, int height);
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
   }
 
   @kotlin.PublishedApi internal enum IntrinsicMinMax {
@@ -602,31 +602,31 @@
     enum_constant public static final androidx.ui.core.IntrinsicWidthHeight Width;
   }
 
-  @kotlin.PublishedApi internal final class IntrinsicsMeasureScope extends androidx.ui.core.MeasureScope implements androidx.ui.unit.Density {
-    ctor public IntrinsicsMeasureScope(androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection);
+  @kotlin.PublishedApi internal final class IntrinsicsMeasureScope extends androidx.ui.core.MeasureScope implements androidx.compose.ui.unit.Density {
+    ctor public IntrinsicsMeasureScope(androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public float getDensity();
     method public float getFontScale();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method @androidx.compose.Stable public float toDp(float);
     method @androidx.compose.Stable public float toDp(int);
-    method @androidx.compose.Stable public float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public float toPx-0680j_4(float);
+    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public long toSp(float);
     method @androidx.compose.Stable public long toSp(int);
-    method @androidx.compose.Stable public long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public long toSp-0680j_4(float);
   }
 
   public interface LayoutCoordinates {
-    method public androidx.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
+    method public androidx.compose.ui.unit.PxBounds childBoundingBox(androidx.ui.core.LayoutCoordinates child);
     method public androidx.compose.ui.geometry.Offset childToLocal(androidx.ui.core.LayoutCoordinates child, androidx.compose.ui.geometry.Offset childLocal);
     method public operator int get(androidx.ui.core.AlignmentLine line);
     method public androidx.ui.core.LayoutCoordinates? getParentCoordinates();
     method public java.util.Set<androidx.ui.core.AlignmentLine> getProvidedAlignmentLines();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.geometry.Offset globalToLocal(androidx.compose.ui.geometry.Offset global);
     method public boolean isAttached();
     method public androidx.compose.ui.geometry.Offset localToGlobal(androidx.compose.ui.geometry.Offset local);
@@ -634,13 +634,13 @@
     property public abstract boolean isAttached;
     property public abstract androidx.ui.core.LayoutCoordinates? parentCoordinates;
     property public abstract java.util.Set<androidx.ui.core.AlignmentLine> providedAlignmentLines;
-    property public abstract androidx.ui.unit.IntSize size;
+    property public abstract androidx.compose.ui.unit.IntSize size;
   }
 
   public final class LayoutCoordinatesKt {
-    method public static androidx.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
-    method public static androidx.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInParent(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getBoundsInRoot(androidx.ui.core.LayoutCoordinates);
+    method public static androidx.compose.ui.unit.PxBounds getGlobalBounds(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getGlobalPosition(androidx.ui.core.LayoutCoordinates);
     method public static androidx.compose.ui.geometry.Offset getPositionInParent(androidx.ui.core.LayoutCoordinates);
     method public static inline androidx.compose.ui.geometry.Offset getPositionInRoot(androidx.ui.core.LayoutCoordinates);
@@ -670,24 +670,24 @@
   }
 
   public final class LayoutKt {
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.ui.core.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function4<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,? super androidx.compose.ui.unit.LayoutDirection,java.lang.Integer> maxIntrinsicHeightMeasureBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable @androidx.ui.core.ExperimentalLayoutNodeApi public static inline void Layout(kotlin.jvm.functions.Function0<kotlin.Unit> children, androidx.ui.core.LayoutNode.MeasureBlocks measureBlocks, androidx.ui.core.Modifier modifier = Modifier);
-    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? super androidx.ui.core.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
-    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated public static androidx.ui.core.LayoutNode.MeasureBlocks MeasuringIntrinsicsMeasureBlocks(kotlin.jvm.functions.Function4<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? super androidx.compose.ui.unit.LayoutDirection,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @Deprecated @androidx.compose.Composable public static void MultiMeasureLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
     method @androidx.compose.Composable public static void WithConstraints(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.WithConstraintsScope,kotlin.Unit> children);
-    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.ui.core.ExperimentalLayoutNodeApi public static androidx.ui.core.LayoutNode.MeasureBlocks measureBlocksOf(kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> minIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicWidthMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.IntrinsicMeasureScope,? super java.util.List<? extends androidx.ui.core.IntrinsicMeasurable>,? super java.lang.Integer,java.lang.Integer> maxIntrinsicHeightMeasureBlock, kotlin.jvm.functions.Function3<? super androidx.ui.core.MeasureScope,? super java.util.List<? extends androidx.ui.core.Measurable>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   public interface LayoutModifier extends androidx.ui.core.Modifier.Element {
-    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope, androidx.ui.core.Measurable measurable, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public default int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope, androidx.ui.core.IntrinsicMeasurable measurable, int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   @androidx.ui.core.ExperimentalLayoutNodeApi public final class LayoutNode implements androidx.ui.core.Measurable androidx.ui.core.Remeasurement {
@@ -716,11 +716,11 @@
     method public void ignoreModelReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method public void insertAt(int index, androidx.ui.core.LayoutNode instance);
     method public boolean isPlaced();
-    method public int maxIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(int width, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(int height, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(int width, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(int height, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public void move(int from, int to, int count);
     method public void onInvalidate();
     method public void place(int x, int y);
@@ -752,19 +752,19 @@
   }
 
   public static interface LayoutNode.MeasureBlocks {
-    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public int maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public androidx.ui.core.MeasureScope.MeasureResult measure(androidx.ui.core.MeasureScope measureScope, java.util.List<? extends androidx.ui.core.Measurable> measurables, androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public int minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract static class LayoutNode.NoIntrinsicsMeasureBlocks implements androidx.ui.core.LayoutNode.MeasureBlocks {
     ctor public LayoutNode.NoIntrinsicsMeasureBlocks(String error);
-    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.ui.core.LayoutDirection layoutDirection);
-    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.ui.core.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void maxIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicHeight(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int w, androidx.compose.ui.unit.LayoutDirection layoutDirection);
+    method public Void minIntrinsicWidth(androidx.ui.core.IntrinsicMeasureScope intrinsicMeasureScope, java.util.List<? extends androidx.ui.core.IntrinsicMeasurable> measurables, int h, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public final class LayoutNodeKt {
@@ -777,20 +777,20 @@
   }
 
   public interface Measurable extends androidx.ui.core.IntrinsicMeasurable {
-    method public androidx.ui.core.Placeable measure(androidx.ui.core.Constraints constraints, androidx.ui.core.LayoutDirection layoutDirection);
+    method public androidx.ui.core.Placeable measure(androidx.compose.ui.unit.Constraints constraints, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public abstract class MeasureScope extends androidx.ui.core.IntrinsicMeasureScope {
     ctor public MeasureScope();
     method public final androidx.ui.core.MeasureScope.MeasureResult layout(int width, int height, java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines = emptyMap(), kotlin.jvm.functions.Function1<? super androidx.ui.core.Placeable.PlacementScope,kotlin.Unit> placementBlock);
-    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.ui.core.Constraints constraints);
+    method public final androidx.ui.core.Placeable measure(androidx.ui.core.Measurable, androidx.compose.ui.unit.Constraints constraints);
   }
 
   public static interface MeasureScope.MeasureResult {
     method public java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> getAlignmentLines();
     method public int getHeight();
     method public int getWidth();
-    method public void placeChildren(androidx.ui.core.LayoutDirection layoutDirection);
+    method public void placeChildren(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     property public abstract java.util.Map<androidx.ui.core.AlignmentLine,java.lang.Integer> alignmentLines;
     property public abstract int height;
     property public abstract int width;
@@ -877,8 +877,8 @@
     method public android.graphics.Matrix getMatrix();
     method public androidx.ui.core.DrawLayerModifier getModifier();
     method public void invalidate();
-    method public void move(androidx.ui.unit.IntOffset position);
-    method public void resize(androidx.ui.unit.IntSize size);
+    method public void move(androidx.compose.ui.unit.IntOffset position);
+    method public void resize(androidx.compose.ui.unit.IntSize size);
     method public void setModifier(androidx.ui.core.DrawLayerModifier p);
     method public void updateDisplayList();
     method public void updateLayerProperties();
@@ -887,12 +887,12 @@
   }
 
   public interface Owner {
-    method public androidx.ui.unit.IntOffset calculatePosition();
+    method public androidx.compose.ui.unit.IntOffset calculatePosition();
     method public androidx.ui.core.OwnedLayer createLayer(androidx.ui.core.DrawLayerModifier drawLayerModifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Canvas,kotlin.Unit> drawBlock, kotlin.jvm.functions.Function0<kotlin.Unit> invalidateParentLayer);
     method public androidx.ui.autofill.Autofill? getAutofill();
     method public androidx.ui.autofill.AutofillTree getAutofillTree();
     method public androidx.ui.core.clipboard.ClipboardManager getClipboardManager();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public androidx.compose.ui.text.font.Font.ResourceLoader getFontLoader();
     method public androidx.ui.core.hapticfeedback.HapticFeedback getHapticFeedBack();
     method public long getMeasureIteration();
@@ -919,7 +919,7 @@
     property public abstract androidx.ui.autofill.Autofill? autofill;
     property public abstract androidx.ui.autofill.AutofillTree autofillTree;
     property public abstract androidx.ui.core.clipboard.ClipboardManager clipboardManager;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract androidx.compose.ui.text.font.Font.ResourceLoader fontLoader;
     property public abstract androidx.ui.core.hapticfeedback.HapticFeedback hapticFeedBack;
     property public abstract long measureIteration;
@@ -952,38 +952,38 @@
   }
 
   public interface ParentDataModifier extends androidx.ui.core.Modifier.Element {
-    method public Object? modifyParentData(androidx.ui.unit.Density, Object? parentData);
+    method public Object? modifyParentData(androidx.compose.ui.unit.Density, Object? parentData);
   }
 
   public abstract class Placeable {
     ctor public Placeable();
     method public abstract operator int get(androidx.ui.core.AlignmentLine line);
-    method protected final androidx.ui.unit.IntOffset getApparentToRealOffset();
+    method protected final androidx.compose.ui.unit.IntOffset getApparentToRealOffset();
     method public final int getHeight();
-    method protected final androidx.ui.unit.IntSize getMeasuredSize();
-    method protected final androidx.ui.core.Constraints getMeasurementConstraints();
+    method protected final androidx.compose.ui.unit.IntSize getMeasuredSize();
+    method protected final androidx.compose.ui.unit.Constraints getMeasurementConstraints();
     method public final int getWidth();
-    method protected abstract void place(androidx.ui.unit.IntOffset position);
-    method protected final void setMeasuredSize(androidx.ui.unit.IntSize value);
-    method protected final void setMeasurementConstraints(androidx.ui.core.Constraints p);
-    property protected final androidx.ui.unit.IntOffset apparentToRealOffset;
+    method protected abstract void place(androidx.compose.ui.unit.IntOffset position);
+    method protected final void setMeasuredSize(androidx.compose.ui.unit.IntSize value);
+    method protected final void setMeasurementConstraints(androidx.compose.ui.unit.Constraints p);
+    property protected final androidx.compose.ui.unit.IntOffset apparentToRealOffset;
     property public final int height;
-    property protected final androidx.ui.unit.IntSize measuredSize;
-    property protected final androidx.ui.core.Constraints measurementConstraints;
+    property protected final androidx.compose.ui.unit.IntSize measuredSize;
+    property protected final androidx.compose.ui.unit.Constraints measurementConstraints;
     property public final int width;
   }
 
   public abstract static class Placeable.PlacementScope {
     ctor public Placeable.PlacementScope();
-    method public abstract androidx.ui.core.LayoutDirection getParentLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getParentLayoutDirection();
     method public abstract int getParentWidth();
-    method public final void place(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
+    method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
     method public final void place(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void place(androidx.ui.core.Placeable, int x, int y);
     method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.geometry.Offset position);
     method public final void placeAbsolute(androidx.ui.core.Placeable, int x, int y);
-    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.ui.unit.IntOffset position);
-    property public abstract androidx.ui.core.LayoutDirection parentLayoutDirection;
+    method public final void placeAbsolute(androidx.ui.core.Placeable, androidx.compose.ui.unit.IntOffset position);
+    property public abstract androidx.compose.ui.unit.LayoutDirection parentLayoutDirection;
     property public abstract int parentWidth;
   }
 
@@ -1025,15 +1025,15 @@
   }
 
   @androidx.compose.Immutable public final class PointerInputData {
-    ctor public PointerInputData(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
-    method public androidx.ui.unit.Uptime? component1();
+    method public androidx.compose.ui.unit.Uptime? component1();
     method public androidx.compose.ui.geometry.Offset? component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.Immutable public androidx.ui.core.PointerInputData copy(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     method public boolean getDown();
     method public androidx.compose.ui.geometry.Offset? getPosition();
-    method public androidx.ui.unit.Uptime? getUptime();
+    method public androidx.compose.ui.unit.Uptime? getUptime();
   }
 
   public final class PointerInputKt {
@@ -1053,12 +1053,12 @@
   }
 
   public final class PopupKt {
-    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable public static void Popup(androidx.ui.core.Alignment alignment = Alignment.TopStart, androidx.compose.ui.unit.IntOffset offset = IntOffset(0, 0), boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @androidx.compose.Composable public static void Popup(androidx.ui.core.PopupPositionProvider popupPositionProvider, boolean isFocusable = false, kotlin.jvm.functions.Function0<kotlin.Unit>? onDismissRequest = null, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public interface PopupPositionProvider {
-    method public androidx.ui.unit.IntOffset calculatePosition(androidx.ui.unit.IntBounds parentGlobalBounds, androidx.ui.unit.IntBounds windowGlobalBounds, androidx.ui.core.LayoutDirection layoutDirection, androidx.ui.unit.IntSize popupContentSize);
+    method public androidx.compose.ui.unit.IntOffset calculatePosition(androidx.compose.ui.unit.IntBounds parentGlobalBounds, androidx.compose.ui.unit.IntBounds windowGlobalBounds, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.unit.IntSize popupContentSize);
   }
 
   public final class Ref<T> {
@@ -1080,7 +1080,7 @@
   }
 
   public final class SubcomposeLayoutKt {
-    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.ui.core.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.Composable @androidx.ui.core.ExperimentalSubcomposeLayoutApi public static <T> void SubcomposeLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function2<? super androidx.ui.core.SubcomposeMeasureScope<T>,? super androidx.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
   @androidx.ui.core.ExperimentalSubcomposeLayoutApi public abstract class SubcomposeMeasureScope<T> extends androidx.ui.core.MeasureScope {
@@ -1119,14 +1119,14 @@
   }
 
   @androidx.compose.Stable public interface WithConstraintsScope {
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
     method public float getMinWidth();
-    property public abstract androidx.ui.core.Constraints constraints;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.Constraints constraints;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public abstract float maxHeight;
     property public abstract float maxWidth;
     property public abstract float minHeight;
@@ -1256,23 +1256,23 @@
 package androidx.ui.core.gesture {
 
   public final class ConstantsKt {
-    method public static androidx.ui.unit.Duration getDoubleTapMinTime();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapMinTime();
     method public static float getDoubleTapSlop();
-    method public static androidx.ui.unit.Duration getDoubleTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getDoubleTapTimeout();
     method public static float getDoubleTapTouchSlop();
     method public static float getHoverTapSlop();
-    method public static androidx.ui.unit.Duration getHoverTapTimeout();
-    method public static androidx.ui.unit.Duration getJumpTapTimeout();
-    method public static androidx.ui.unit.Duration getLongPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getHoverTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getJumpTapTimeout();
+    method public static androidx.compose.ui.unit.Duration getLongPressTimeout();
     method public static float getMaxFlingVelocity();
     method public static float getMinFlingVelocity();
     method public static float getPagingTouchSlop();
     method public static float getPanSlop();
-    method public static androidx.ui.unit.Duration getPressTimeout();
+    method public static androidx.compose.ui.unit.Duration getPressTimeout();
     method public static float getScaleSlop();
     method public static float getTouchSlop();
     method public static float getWindowTouchSlop();
-    method public static androidx.ui.unit.Duration getZoomControlsTimeout();
+    method public static androidx.compose.ui.unit.Duration getZoomControlsTimeout();
   }
 
   public final class DoubleTapGestureFilterKt {
@@ -1298,7 +1298,7 @@
   }
 
   public final class GestureUtilsKt {
-    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.ui.unit.IntSize bounds);
+    method public static boolean anyPointersInBounds(java.util.List<androidx.ui.core.PointerInputChange>, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public final class LongPressDragGestureFilterKt {
@@ -1429,8 +1429,8 @@
 
   public final class VelocityTracker {
     ctor public VelocityTracker();
-    method public void addPosition(androidx.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
-    method public androidx.ui.unit.Velocity calculateVelocity();
+    method public void addPosition(androidx.compose.ui.unit.Uptime uptime, androidx.compose.ui.geometry.Offset position);
+    method public androidx.compose.ui.unit.Velocity calculateVelocity();
     method public void resetTracking();
   }
 
@@ -2114,8 +2114,8 @@
     method public abstract void onCancel();
     method public void onCustomEvent(androidx.ui.core.CustomEvent customEvent, androidx.ui.core.PointerEventPass pass);
     method public void onInit(androidx.ui.core.CustomEventDispatcher customEventDispatcher);
-    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
-    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.ui.unit.IntSize bounds);
+    method public java.util.List<androidx.ui.core.PointerInputChange> onPointerEvent(androidx.ui.core.PointerEvent pointerEvent, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
+    method public abstract java.util.List<androidx.ui.core.PointerInputChange> onPointerInput(java.util.List<androidx.ui.core.PointerInputChange> changes, androidx.ui.core.PointerEventPass pass, androidx.compose.ui.unit.IntSize bounds);
   }
 
   public interface PointerInputModifier extends androidx.ui.core.Modifier.Element {
@@ -2219,29 +2219,29 @@
 
   public final class SemanticsNode {
     method public int getAlignmentLinePosition(androidx.ui.core.AlignmentLine line);
-    method public androidx.ui.unit.PxBounds getBoundsInRoot();
+    method public androidx.compose.ui.unit.PxBounds getBoundsInRoot();
     method public java.util.List<androidx.ui.core.semantics.SemanticsNode> getChildren();
     method public androidx.ui.core.LayoutNode getComponentNode();
     method public androidx.ui.core.semantics.SemanticsConfiguration getConfig();
-    method public androidx.ui.unit.PxBounds getGlobalBounds();
+    method public androidx.compose.ui.unit.PxBounds getGlobalBounds();
     method public androidx.compose.ui.geometry.Offset getGlobalPosition();
     method public int getId();
     method public boolean getMergingEnabled();
     method public androidx.ui.core.semantics.SemanticsNode? getParent();
     method public androidx.compose.ui.geometry.Offset getPositionInRoot();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public boolean isRoot();
-    property public final androidx.ui.unit.PxBounds boundsInRoot;
+    property public final androidx.compose.ui.unit.PxBounds boundsInRoot;
     property public final java.util.List<androidx.ui.core.semantics.SemanticsNode> children;
     property public final androidx.ui.core.LayoutNode componentNode;
     property public final androidx.ui.core.semantics.SemanticsConfiguration config;
-    property public final androidx.ui.unit.PxBounds globalBounds;
+    property public final androidx.compose.ui.unit.PxBounds globalBounds;
     property public final androidx.compose.ui.geometry.Offset globalPosition;
     property public final int id;
     property public final boolean isRoot;
     property public final androidx.ui.core.semantics.SemanticsNode? parent;
     property public final androidx.compose.ui.geometry.Offset positionInRoot;
-    property public final androidx.ui.unit.IntSize size;
+    property public final androidx.compose.ui.unit.IntSize size;
   }
 
   public final class SemanticsNodeKt {
@@ -2522,18 +2522,18 @@
 
   public final class PointerInputTestUtilKt {
     method public static androidx.ui.core.PointerInputChange consume(androidx.ui.core.PointerInputChange, float dx = 0f, float dy = 0f, boolean downChange = false);
-    method public static androidx.ui.core.PointerInputChange down(long id, androidx.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange down(long id, androidx.compose.ui.unit.Duration duration = Duration.Zero, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverAllPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverAllPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event);
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
-    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange![] pointerInputChanges, androidx.ui.core.PointerEventPass pointerEventPass, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static androidx.ui.core.PointerInputChange invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, androidx.ui.core.PointerInputChange pointerInputChange, androidx.ui.core.PointerEventPass![] pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
+    method public static java.util.List<androidx.ui.core.PointerInputChange> invokeOverPasses(kotlin.jvm.functions.Function3<? super java.util.List<androidx.ui.core.PointerInputChange>,? super androidx.ui.core.PointerEventPass,? super androidx.compose.ui.unit.IntSize,? extends java.util.List<androidx.ui.core.PointerInputChange>>, java.util.List<androidx.ui.core.PointerInputChange> pointerInputChanges, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses, androidx.compose.ui.unit.IntSize size = IntSize(Int.MAX_VALUE, Int.MAX_VALUE));
     method public static void invokeOverPasses(kotlin.jvm.functions.Function2<? super androidx.ui.core.CustomEvent,? super androidx.ui.core.PointerEventPass,kotlin.Unit>, androidx.ui.core.CustomEvent event, java.util.List<? extends androidx.ui.core.PointerEventPass> pointerEventPasses);
-    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
-    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration, float x = 0f, float y = 0f);
-    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.ui.unit.Duration duration);
+    method public static androidx.ui.core.PointerInputChange moveBy(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float dx = 0f, float dy = 0f);
+    method public static androidx.ui.core.PointerInputChange moveTo(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration, float x = 0f, float y = 0f);
+    method public static androidx.ui.core.PointerInputChange up(androidx.ui.core.PointerInputChange, androidx.compose.ui.unit.Duration duration);
   }
 
 }
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/DeclarativeGraphicsDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/DeclarativeGraphicsDemo.kt
index e718b3d..63aa05d 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/DeclarativeGraphicsDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/DeclarativeGraphicsDemo.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun DeclarativeGraphicsDemo() {
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/MultipleCollect.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/MultipleCollect.kt
index 4312df5..2c05662 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/MultipleCollect.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/MultipleCollect.kt
@@ -19,7 +19,7 @@
 package androidx.ui.core.demos
 
 import androidx.compose.Composable
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.id
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
index 5c3ed9d..133da32 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/PopupDemo.kt
@@ -45,8 +45,8 @@
 import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun PopupDemo() {
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/VectorGraphicsDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/VectorGraphicsDemo.kt
index f111676..36f4846 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/VectorGraphicsDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/VectorGraphicsDemo.kt
@@ -38,8 +38,8 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.res.loadVectorResource
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun VectorGraphicsDemo() {
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
index bba0c49..2c5c021 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/autofill/ExplicitAutofillTypesDemo.kt
@@ -39,7 +39,7 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.ui.material.MaterialTheme
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 @OptIn(ExperimentalFoundationApi::class)
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt
index 57f91a0..365ebfc 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapGestureDetectorDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [doubleTapGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt
index ee82f75..0c7d15e 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DoubleTapInTapDemo.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun DoubleTapInTapDemo() {
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt
index e29af96..ecfd4c5 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragScaleGestureDetectorDemo.kt
@@ -34,7 +34,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple demo that shows off how [dragGestureFilter] and [scaleGestureFilter] automatically
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragSlopExceededGestureFilterDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragSlopExceededGestureFilterDemo.kt
index d4eff34..346cbb0 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragSlopExceededGestureFilterDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/DragSlopExceededGestureFilterDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [dragSlopExceededGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
index d90959a9..68bfb72 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/HorizontalScrollersInVerticalScrollerDemo.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Composable
 import androidx.compose.state
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.Direction
 import androidx.ui.core.DrawModifier
@@ -41,8 +41,8 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt
index 9b3f771..0c537f6 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressDragGestureDetectorDemo.kt
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [longPressDragGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt
index 204a48d..2d3d390 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/LongPressGestureDetectorDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [longPressGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt
index f3495d8..51c715e 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedLongPressDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Demonstration of how various press/tap gesture interact together in a nested fashion.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt
index c59b42f6..e45c89d 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedPressDemo.kt
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Demonstration of how various press/tap gesture interact together in a nested fashion.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt
index 6c8899b..9fcae88 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScrollingDemo.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Composable
 import androidx.compose.state
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Direction
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
@@ -40,8 +40,8 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PointerInputDuringSubCompDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PointerInputDuringSubCompDemo.kt
index d4a53a7..8a58a6d 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PointerInputDuringSubCompDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PointerInputDuringSubCompDemo.kt
@@ -38,9 +38,9 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.dp
 
 /**
  * Demonstration of how various press/tap gesture interact together in a nested fashion.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt
index 99aa7b6..0ae637c 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PopupDragDemo.kt
@@ -34,8 +34,8 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
-import androidx.ui.unit.round
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.round
 
 @Composable
 fun PopupDragDemo() {
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt
index d896aaa..4abba83 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/PressIndicatorGestureDetectorDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [pressIndicatorGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt
index 6443343..42b97a0 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/RawDragGestureDetectorDemo.kt
@@ -31,7 +31,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [rawDragGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScaleGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScaleGestureDetectorDemo.kt
index 1251f2f3..bb2ecf2 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScaleGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScaleGestureDetectorDemo.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [scaleGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt
index d508c024c..b33a254 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/ScrollGestureFilterDemo.kt
@@ -34,8 +34,8 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple demo that shows off ScrollGestureFilter.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt
index e32237e..8e135239 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TapGestureDetectorDemo.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [tapGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt
index 8d6f712..fbbf412 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/TouchSlopDragGestureDetectorDemo.kt
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Simple [dragGestureFilter] demo.
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
index 55ca458..995be2c 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/VerticalScrollerInDrawerLayoutDemo.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Composable
 import androidx.compose.state
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Direction
@@ -51,8 +51,8 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/viewinterop/ViewInterop.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/viewinterop/ViewInterop.kt
index 35358b1..5c42759 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/viewinterop/ViewInterop.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/viewinterop/ViewInterop.kt
@@ -42,7 +42,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.size
 import androidx.ui.material.Button
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 import androidx.ui.viewinterop.emitView
 
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/DrawShadowSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/DrawShadowSample.kt
index 44b89cf..057b629 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/DrawShadowSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/DrawShadowSample.kt
@@ -23,7 +23,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayoutSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayoutSample.kt
index b42df5a..900ed4f 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayoutSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayoutSample.kt
@@ -18,7 +18,7 @@
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ModifierSamples.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ModifierSamples.kt
index 1661ae9..f28038b 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ModifierSamples.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ModifierSamples.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.padding
 import androidx.ui.material.Button
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OnPositionedSamples.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OnPositionedSamples.kt
index 66afaab..dc0d616 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OnPositionedSamples.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OnPositionedSamples.kt
@@ -27,7 +27,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OpacitySample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OpacitySample.kt
index 7d91ca6..ece82cb 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OpacitySample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/OpacitySample.kt
@@ -23,7 +23,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt
index b65956c..c329b04 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PainterSample.kt
@@ -27,7 +27,7 @@
 import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt
index a884ad4..56a460e 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/PopupSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.foundation.shape.corner.RoundedCornerShape
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/SubcomposeLayoutSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/SubcomposeLayoutSample.kt
index 507283c..09323d3 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/SubcomposeLayoutSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/SubcomposeLayoutSample.kt
@@ -20,7 +20,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.ExperimentalSubcomposeLayoutApi
 import androidx.ui.core.SubcomposeLayout
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/WithConstraintsSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/WithConstraintsSample.kt
index bb84d51..153d742 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/WithConstraintsSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/WithConstraintsSample.kt
@@ -24,7 +24,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
index daa3f1b..fe53efc 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorTest.kt
@@ -39,7 +39,7 @@
 import androidx.ui.test.onRoot
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Assert.assertEquals
 import org.junit.Rule
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParserTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParserTest.kt
index 6373faf..aee6d32 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParserTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParserTest.kt
@@ -26,7 +26,7 @@
 import androidx.compose.ui.graphics.vector.VectorNode
 import androidx.compose.ui.graphics.vector.VectorPath
 import androidx.ui.res.loadVectorResource
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt
index 57f20cd..60cd287 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/AndroidPointerInputTest.kt
@@ -35,8 +35,8 @@
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.down
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import androidx.ui.viewinterop.AndroidView
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt
index 0fedbb5..bd31cc0 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PainterModifierTest.kt
@@ -50,9 +50,11 @@
 import androidx.compose.foundation.layout.ltr
 import androidx.compose.foundation.layout.rtl
 import androidx.compose.foundation.layout.width
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.compose.foundation.layout.widthIn
 import androidx.compose.foundation.layout.wrapContentHeight
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertWidthIsEqualTo
 import androidx.ui.test.captureToBitmap
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PopupTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PopupTest.kt
index fcd089b..ab71ef5 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PopupTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/PopupTest.kt
@@ -40,12 +40,13 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.runOnUiThread
-import androidx.ui.unit.IntBounds
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.IntBounds
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth
 import org.hamcrest.CoreMatchers.instanceOf
 import org.hamcrest.Description
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/FocusTestUtils.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/FocusTestUtils.kt
index f86b975..90d3c78 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/FocusTestUtils.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/FocusTestUtils.kt
@@ -21,7 +21,7 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.size
 import androidx.ui.test.ComposeTestRule
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Suppress("DEPRECATION")
 internal val FocusModifier.focusNode
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/Helpers.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/Helpers.kt
index b3ac211..ea2c3ea 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/Helpers.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/Helpers.kt
@@ -16,10 +16,10 @@
 
 package androidx.ui.core.layout
 
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.HorizontalAlignmentLine
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.Measurable
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/MeasureAndLayoutDelegateTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/MeasureAndLayoutDelegateTest.kt
index 3545cea..f8e778b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/MeasureAndLayoutDelegateTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/MeasureAndLayoutDelegateTest.kt
@@ -17,9 +17,9 @@
 package androidx.ui.core.layout
 
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode.LayoutState
 import androidx.ui.core.test.AndroidOwnerExtraAssertionsRule
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/PlacedChildTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/PlacedChildTest.kt
index 27a6f2b..df1c9ce 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/PlacedChildTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/layout/PlacedChildTest.kt
@@ -17,9 +17,9 @@
 package androidx.ui.core.layout
 
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
index d5db86b..d7d3c12 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/HitPathTrackerTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.test.filters.SmallTest
 import androidx.ui.core.AlignmentLine
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.CustomEvent
 import androidx.ui.core.CustomEventDispatcher
 import androidx.ui.core.LayoutCoordinates
@@ -32,9 +32,9 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveTo
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.eq
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
index 0143456..f0659bf 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/PointerInputEventProcessorTest.kt
@@ -17,10 +17,10 @@
 package androidx.ui.core.pointerinput
 
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ConsumedData
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.LayoutNodeWrapper
 import androidx.ui.core.Measurable
@@ -34,11 +34,11 @@
 import androidx.ui.core.PointerInputHandler
 import androidx.ui.core.consumePositionChange
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Uptime
-import androidx.ui.unit.milliseconds
-import androidx.ui.unit.minus
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Uptime
+import androidx.compose.ui.unit.milliseconds
+import androidx.compose.ui.unit.minus
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.doAnswer
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt
index 2636d8c..909f2dd 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/pointerinput/TestUtils.kt
@@ -23,8 +23,8 @@
 import androidx.ui.core.PointerInputData
 import androidx.ui.core.PointerInputHandler
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Uptime
 
 /**
  * This class enables Mockito to spy.
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt
index 820a500..b506b5b88 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidLayoutDrawTest.kt
@@ -43,7 +43,7 @@
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.AlignmentLine
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.DrawLayerModifier
@@ -53,7 +53,7 @@
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
@@ -62,14 +62,14 @@
 import androidx.ui.core.ParentDataModifier
 import androidx.ui.core.Ref
 import androidx.ui.core.VerticalAlignmentLine
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
 import androidx.ui.core.drawBehind
 import androidx.ui.core.drawLayer
 import androidx.ui.core.drawWithContent
 import androidx.ui.core.id
 import androidx.ui.core.layoutId
-import androidx.ui.core.offset
+import androidx.compose.ui.unit.offset
 import androidx.ui.core.setContent
 import androidx.ui.core.zIndex
 import androidx.compose.foundation.drawBackground
@@ -87,9 +87,9 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.rtl
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNotNull
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt
index e29261f..81555a3 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/AndroidViewCompatTest.kt
@@ -47,13 +47,13 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.AlignmentLine
 import androidx.ui.core.AndroidComposeView
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ContextAmbient
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutEmitHelper
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.LayoutNode
@@ -84,9 +84,9 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.runOnUiThread
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 import androidx.ui.viewinterop.emitView
 import junit.framework.TestCase.assertNotNull
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt
index 54c51fa..e4b14bf 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipDrawTest.kt
@@ -40,7 +40,7 @@
 import androidx.compose.ui.graphics.PathOperation
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import org.junit.Assert
 import org.junit.Before
 import org.junit.Rule
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
index 135d555..f245d26 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ClipPointerInputTest.kt
@@ -37,7 +37,7 @@
 import androidx.ui.framework.test.TestActivity
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.foundation.layout.offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Rule
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt
index 8c0ae81..e01cabb 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawLayerTest.kt
@@ -28,10 +28,10 @@
 import androidx.ui.core.positionInRoot
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.PxBounds
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Before
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawReorderingTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawReorderingTest.kt
index fa6ac8d..65cca3f 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawReorderingTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawReorderingTest.kt
@@ -26,7 +26,7 @@
 import androidx.compose.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DrawLayerModifier
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt
index c4e94ae..7d9df95 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/DrawShadowTest.kt
@@ -35,9 +35,9 @@
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.luminance
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt
index 1bfd72d..12825ba 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayerTouchTransformTest.kt
@@ -42,7 +42,7 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.down
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt
index 249e75b..cc966bc 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OnPositionedTest.kt
@@ -37,7 +37,7 @@
 import androidx.ui.core.positionInRoot
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.PxBounds
 import androidx.compose.ui.geometry.Offset
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RootNodeLayoutTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RootNodeLayoutTest.kt
index 3cfc3a7..435050b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RootNodeLayoutTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RootNodeLayoutTest.kt
@@ -20,7 +20,7 @@
 import android.widget.FrameLayout
 import androidx.compose.Recomposer
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
@@ -29,7 +29,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.PxBounds
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
 import org.junit.Assert.assertNotNull
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt
index d1b3e2a..f14b3e1 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/RtlLayoutTest.kt
@@ -21,17 +21,17 @@
 import androidx.compose.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
-import androidx.ui.core.offset
+import androidx.compose.ui.unit.offset
 import androidx.ui.core.onPositioned
 import androidx.ui.core.setContent
 import androidx.compose.ui.geometry.Offset
@@ -41,9 +41,9 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.rtl
 import androidx.compose.foundation.layout.size
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/SubcomposeLayoutTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/SubcomposeLayoutTest.kt
index 61316fc..171ef80 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/SubcomposeLayoutTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/SubcomposeLayoutTest.kt
@@ -40,7 +40,7 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert.assertEquals
 import org.junit.Rule
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt
index 0e96c01..e86339a 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WithConstraintsTest.kt
@@ -31,10 +31,10 @@
 import androidx.compose.state
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureBlock2
@@ -54,10 +54,10 @@
 import androidx.compose.foundation.layout.DpConstraints
 import androidx.compose.foundation.layout.ltr
 import androidx.compose.foundation.layout.rtl
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Before
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt
index 13f29fc..ffacd29 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterIntegrationTest.kt
@@ -30,7 +30,7 @@
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
 import androidx.ui.test.android.createAndroidComposeRule
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 import com.nhaarman.mockitokotlin2.clearInvocations
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt
index a777419..5298348 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropFilterTest.kt
@@ -38,8 +38,8 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import androidx.ui.viewinterop.AndroidViewHolder
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt
index af13f7b..380bd25 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/node/PointerInteropUtilsTest.kt
@@ -24,7 +24,7 @@
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/PrimitiveResourcesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/PrimitiveResourcesTest.kt
index 0b81f37..dce1560 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/PrimitiveResourcesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/PrimitiveResourcesTest.kt
@@ -20,7 +20,7 @@
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.ContextAmbient
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.core.test.R
 import androidx.ui.test.createComposeRule
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt
index e9624a8..bdfa6c5 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposedViewTest.kt
@@ -48,9 +48,9 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.runOnUiThread
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.hamcrest.CoreMatchers.endsWith
 import org.hamcrest.CoreMatchers.equalTo
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.kt b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.kt
index 4fa0db3..0b3e56f 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/compose/ui/graphics/vector/compat/XmlVectorParser.kt
@@ -37,7 +37,7 @@
 import androidx.compose.ui.graphics.vector.PathNode
 import androidx.compose.ui.graphics.vector.VectorAssetBuilder
 import androidx.compose.ui.graphics.vector.addPathNodes
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.xmlpull.v1.XmlPullParser
 import org.xmlpull.v1.XmlPullParserException
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
index 0d2c362..17ca419 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeView.kt
@@ -86,8 +86,10 @@
 import androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry
 import androidx.ui.core.LayoutNode.UsageByParent
 import androidx.compose.ui.text.font.Font
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.util.fastForEach
 import androidx.ui.util.trace
 import java.lang.reflect.Method
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
index 3acf05a..19b61d5 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidComposeViewAccessibilityDelegateCompat.kt
@@ -51,7 +51,7 @@
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.TextLayoutResult
 import androidx.compose.ui.text.length
-import androidx.ui.unit.toRect
+import androidx.compose.ui.unit.toRect
 import androidx.ui.util.fastForEach
 
 internal class AndroidComposeViewAccessibilityDelegateCompat(val view: AndroidComposeView) :
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
index 33e44a7..eb8366a 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidPopup.kt
@@ -39,8 +39,8 @@
 import androidx.ui.core.semantics.semantics
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.semantics.popup
-import androidx.ui.unit.IntBounds
-import androidx.ui.unit.round
+import androidx.compose.ui.unit.IntBounds
+import androidx.compose.ui.unit.round
 import org.jetbrains.annotations.TestOnly
 
 /**
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt
index 1045529..4b89e7a 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/OutlineResolver.kt
@@ -27,7 +27,7 @@
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt
index b999d23..3d7c81c 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/RenderNodeLayer.kt
@@ -23,8 +23,8 @@
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.CanvasHolder
 import androidx.compose.ui.graphics.RectangleShape
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 
 /**
  * RenderNode implementation of OwnedLayer.
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt
index b920a51..349e9f9 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ViewLayer.kt
@@ -24,8 +24,8 @@
 import androidx.compose.ui.graphics.CanvasHolder
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.RectangleShape
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import java.lang.reflect.Field
 import java.lang.reflect.Method
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt
index d6af224..ce767ab 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/MotionEventAdapter.kt
@@ -25,9 +25,9 @@
 import androidx.annotation.VisibleForTesting
 import androidx.ui.core.PointerId
 import androidx.ui.core.PointerInputData
-import androidx.ui.unit.NanosecondsPerMillisecond
+import androidx.compose.ui.unit.NanosecondsPerMillisecond
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.Uptime
 
 /**
  * Converts Android framework [MotionEvent]s into Compose [PointerInputEvent]s.
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt
index c7c95cb..41c356c 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.pointerinput
 
 import android.view.MotionEvent
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.Uptime
 
 internal actual class PointerInputEvent(
     actual val uptime: Uptime,
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt
index 2971edd..8fae414 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropFilter.kt
@@ -28,8 +28,8 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import androidx.ui.util.fastAny
 import androidx.ui.viewinterop.AndroidViewHolder
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt
index 24b0fd5..4cce9fb 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/PointerInteropUtils.kt
@@ -22,9 +22,9 @@
 import android.view.MotionEvent.ACTION_CANCEL
 import androidx.ui.core.PointerEvent
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Duration
-import androidx.ui.unit.NanosecondsPerMillisecond
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.NanosecondsPerMillisecond
+import androidx.compose.ui.unit.milliseconds
 
 /**
  * Converts to a [MotionEvent] and runs [block] with it.
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/ViewInterop.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/ViewInterop.kt
index 17fcd07..824c097 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/ViewInterop.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/ViewInterop.kt
@@ -20,9 +20,9 @@
 import android.view.ViewGroup
 import androidx.annotation.RestrictTo
 import androidx.ui.core.AndroidOwner
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/PrimitiveResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/PrimitiveResources.kt
index c0997d6..cbbc11f9 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/PrimitiveResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/PrimitiveResources.kt
@@ -23,7 +23,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.ContextAmbient
 import androidx.ui.core.DensityAmbient
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 
 /**
  * Load an integer resource.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/DrawCache.kt b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/DrawCache.kt
index 598bc1e..2286ecd 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/DrawCache.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/DrawCache.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics.vector
 
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.BlendMode
@@ -25,9 +25,9 @@
 import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.ImageAsset
 import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.toSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.toSize
 
 /**
  * Creates a drawing environment that directs its drawing commands to an [ImageAsset]
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
index 30e57ce..fb0c77b 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/Vector.kt
@@ -28,7 +28,7 @@
 import androidx.compose.ui.graphics.drawscope.Stroke
 import androidx.compose.ui.graphics.drawscope.withTransform
 import androidx.compose.ui.graphics.vectormath.Matrix4
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastForEach
 import androidx.ui.util.toRadians
 import kotlin.math.ceil
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAsset.kt b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAsset.kt
index 0d3b507..ebd5b30 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAsset.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAsset.kt
@@ -19,7 +19,7 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.graphics.StrokeJoin
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 
 /**
  * Vector graphics object that is generated as a result of [VectorAssetBuilder]]
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAssetBuilder.kt b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAssetBuilder.kt
index f0c9794..b083c2e 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAssetBuilder.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorAssetBuilder.kt
@@ -19,7 +19,7 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.graphics.StrokeJoin
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 
 private inline class Stack<T>(private val backing: ArrayList<T> = ArrayList<T>()) {
     val size: Int get() = backing.size
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
index 75de765..00209751 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorPainter.kt
@@ -30,7 +30,7 @@
 import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 
 /**
  * Default identifier for the root group if a Vector graphic
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Alignment.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Alignment.kt
index c78f078..6960c68 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Alignment.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Alignment.kt
@@ -18,8 +18,9 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt
index a61ddab..05fc0f0 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Ambients.kt
@@ -27,7 +27,7 @@
 import androidx.compose.ui.text.input.TextInputService
 import androidx.ui.platform.UriHandler
 import androidx.compose.ui.text.font.Font
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import kotlin.coroutines.CoroutineContext
 
 /**
@@ -62,9 +62,9 @@
 
 /**
  * Provides the [Density] to be used to transform between [density-independent pixel
- * units (DP)][androidx.ui.unit.Dp] and [pixel units][androidx.ui.unit.Px] or
- * [scale-independent pixel units (SP)][androidx.ui.unit.TextUnit] and
- * [pixel units][androidx.ui.unit.Px]. This is typically used when a [DP][androidx.ui.unit.Dp]
+ * units (DP)][androidx.compose.ui.unit.Dp] and [pixel units][androidx.compose.ui.unit.Px] or
+ * [scale-independent pixel units (SP)][androidx.compose.ui.unit.TextUnit] and
+ * [pixel units][androidx.compose.ui.unit.Px]. This is typically used when a [DP][androidx.compose.ui.unit.Dp]
  * is provided and it must be converted in the body of [Layout] or [DrawModifier].
  */
 val DensityAmbient = staticAmbientOf<Density>()
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt
index 782ec0e..ed2b410 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DelegatingLayoutNodeWrapper.kt
@@ -24,7 +24,9 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.util.nativeClass
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawShadow.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawShadow.kt
index a8c518c..b7515f5 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawShadow.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawShadow.kt
@@ -19,8 +19,8 @@
 import androidx.compose.Stable
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.annotation.FloatRange
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt
index 99d1dca..d94a750 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/InnerPlaceable.kt
@@ -28,8 +28,10 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.graphics.PaintingStyle
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.util.fastAny
 import androidx.ui.util.fastForEach
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasurable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasurable.kt
index dc8edb1..23f04ec 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasurable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasurable.kt
@@ -16,6 +16,8 @@
 
 package androidx.ui.core
 
+import androidx.compose.ui.unit.LayoutDirection
+
 /**
  * A part of the composition that can be measured. This represents a layout.
  * The instance should never be stored.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasureScope.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasureScope.kt
index 0cc7a34..d528c44 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasureScope.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/IntrinsicMeasureScope.kt
@@ -16,7 +16,9 @@
 
 package androidx.ui.core
 
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.LayoutDirection
+
 /**
  * The receiver scope of a layout's intrinsic measurements lambdas.
  */
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt
index 7d98c21..409e360 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayerWrapper.kt
@@ -20,7 +20,9 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.LayoutDirection
 
 internal class LayerWrapper(
     wrapped: LayoutNodeWrapper,
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Layout.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Layout.kt
index 2856735..be4291b 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Layout.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Layout.kt
@@ -23,10 +23,12 @@
 import androidx.compose.currentComposer
 import androidx.compose.emit
 import androidx.compose.remember
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.util.fastForEach
 import androidx.ui.util.fastMap
 import kotlin.math.max
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt
index de05978..e68f435 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutCoordinates.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core
 
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.PxBounds
 
 /**
  * A holder of the measured bounds for the layout (MeasureBox).
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutId.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutId.kt
index f26dc90..2263dc6 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutId.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutId.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Tag the element with [id] to identify the element within its parent.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutModifier.kt
index 0420cf1..35b4b71 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutModifier.kt
@@ -16,9 +16,11 @@
 
 package androidx.ui.core
 
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
 
 /**
  * A [Modifier.Element] that changes how its wrapped content is measured and laid out.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt
index 4c1c547..bdceb49 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNode.kt
@@ -44,7 +44,9 @@
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.drawCanvas
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.util.deleteAt
 import androidx.ui.util.nativeClass
 import kotlin.math.roundToInt
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt
index 31a9cdc..c1c0283 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/LayoutNodeWrapper.kt
@@ -28,12 +28,14 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Paint
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.minus
-import androidx.ui.unit.plus
-import androidx.ui.unit.toOffset
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.minus
+import androidx.compose.ui.unit.plus
+import androidx.compose.ui.unit.toOffset
 
 /**
  * Measurable and Placeable type that has a position.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Measurable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Measurable.kt
index fa2d9ab..e2d7456 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Measurable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Measurable.kt
@@ -16,6 +16,9 @@
 
 package androidx.ui.core
 
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
+
 /**
  * A part of the composition that can be measured. This represents a layout.
  * The instance should never be stored.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureAndLayoutDelegate.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureAndLayoutDelegate.kt
index 11c1c21..4bf65ce 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureAndLayoutDelegate.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureAndLayoutDelegate.kt
@@ -16,6 +16,9 @@
 
 package androidx.ui.core
 
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.isZero
 import androidx.ui.core.LayoutNode.LayoutState.LayingOut
 import androidx.ui.core.LayoutNode.LayoutState.Measuring
 import androidx.ui.core.LayoutNode.LayoutState.NeedsRelayout
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureScope.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureScope.kt
index 51af139..3308407 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureScope.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/MeasureScope.kt
@@ -16,6 +16,9 @@
 
 package androidx.ui.core
 
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
+
 /**
  * The receiver scope of a layout's measure lambda. The return value of the
  * measure lambda is [MeasureResult], which should be returned by [layout]
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedLayoutNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedLayoutNode.kt
index 9974a4c..3920c5a 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedLayoutNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModifiedLayoutNode.kt
@@ -20,6 +20,8 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.graphics.PaintingStyle
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 
 @OptIn(ExperimentalLayoutNodeApi::class)
 internal class ModifiedLayoutNode(
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OuterMeasurablePlaceable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OuterMeasurablePlaceable.kt
index af8bb36..38eba3c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OuterMeasurablePlaceable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OuterMeasurablePlaceable.kt
@@ -16,11 +16,13 @@
 
 package androidx.ui.core
 
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.LayoutNode.LayoutState
 import androidx.ui.core.LayoutNode.MeasureBlocks
 import androidx.ui.core.LayoutNode.UsageByParent
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
 
 @OptIn(ExperimentalLayoutNodeApi::class)
 internal class OuterMeasurablePlaceable(
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OwnedLayer.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OwnedLayer.kt
index 009e85b..9551652 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OwnedLayer.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/OwnedLayer.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core
 
 import androidx.compose.ui.graphics.Canvas
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 
 /**
  * A layer returned by [Owner.createLayer] to separate drawn content. An `OwnedLayer` has
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt
index bb3305a..f2c37de 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Owner.kt
@@ -27,8 +27,8 @@
 import androidx.compose.ui.text.input.TextInputService
 import androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry
 import androidx.compose.ui.text.font.Font
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
 
 /**
  * Owner implements the connection to the underlying view system. On Android, this connects
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt
index 774d65c..4768747 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PainterModifier.kt
@@ -21,7 +21,13 @@
 import androidx.compose.ui.graphics.DefaultAlpha
 import androidx.compose.ui.graphics.drawscope.translate
 import androidx.compose.ui.graphics.painter.Painter
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
+import androidx.compose.ui.unit.hasFixedHeight
+import androidx.compose.ui.unit.hasFixedWidth
 import kotlin.math.ceil
 import kotlin.math.max
 import kotlin.math.roundToInt
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ParentDataModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ParentDataModifier.kt
index 5ba5e01..eea5ce0 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ParentDataModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ParentDataModifier.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * A [Modifier] that provides data to the parent [Layout]. This can be read from within the
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt
index 432f29b..b5956ee 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Placeable.kt
@@ -17,9 +17,11 @@
 package androidx.ui.core
 
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.round
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.round
 
 /**
  * A [Placeable] corresponds to a child layout that can be positioned by its
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt
index ab8157c..546c3a1 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/PointerInput.kt
@@ -20,8 +20,8 @@
 import androidx.compose.Stable
 import androidx.ui.core.pointerinput.PointerInputEvent
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Uptime
 
 /**
  * Represents a pointer input event internally.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt
index a53284e..0afc558 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Popup.kt
@@ -21,11 +21,12 @@
 import androidx.compose.Providers
 import androidx.compose.ambientOf
 import androidx.compose.remember
-import androidx.ui.unit.IntBounds
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.IntBounds
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 
 /**
  * Opens a popup with the given content.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/SubcomposeLayout.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/SubcomposeLayout.kt
index fd62820..0237e6c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/SubcomposeLayout.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/SubcomposeLayout.kt
@@ -28,6 +28,8 @@
 import androidx.compose.currentComposer
 import androidx.compose.emit
 import androidx.compose.remember
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode.LayoutState.LayingOut
 import androidx.ui.core.LayoutNode.LayoutState.Measuring
 import androidx.ui.core.MeasureScope.MeasureResult
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt
index 2deb288..0a62dea 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilter.kt
@@ -32,7 +32,7 @@
 import androidx.ui.core.gesture.customevents.DelayUpMessage
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastAny
 import kotlinx.coroutines.Job
 import kotlin.coroutines.CoroutineContext
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt
index 8e7053e..1df0a0b 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilter.kt
@@ -33,7 +33,7 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.positionChange
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import kotlin.math.abs
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/GestureUtils.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/GestureUtils.kt
index 6f6dfe7..c3bba95 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/GestureUtils.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/GestureUtils.kt
@@ -19,9 +19,9 @@
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
-import androidx.ui.unit.Duration
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.inMilliseconds
 import androidx.ui.util.fastAny
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt
index 9197204..4454fa6 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilter.kt
@@ -25,7 +25,7 @@
 import androidx.ui.core.composed
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 interface LongPressDragObserver {
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt
index 0fa97c8..92a2633 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/LongPressGestureFilter.kt
@@ -33,7 +33,7 @@
 import androidx.ui.core.gesture.customevents.LongPressFiredEvent
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastAny
 import kotlinx.coroutines.Job
 import kotlin.coroutines.CoroutineContext
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt
index 2751984..9a0e877 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilter.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastAny
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt
index 5a0e133..c7907c2 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawDragGestureFilter.kt
@@ -37,7 +37,7 @@
 import androidx.ui.core.gesture.util.VelocityTracker
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.positionChange
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.util.fastAny
 import androidx.ui.util.fastForEach
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt
index 2b59015..8135046 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilter.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 /**
  * Reacts if the first pointer input change it sees is an unconsumed down change, and if it reacts,
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawScaleGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawScaleGestureFilter.kt
index f16d40b..b38e6b48 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawScaleGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/RawScaleGestureFilter.kt
@@ -26,7 +26,7 @@
 import androidx.ui.core.consumeDownChange
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.testutils.consume
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 /**
  * Observes various events sent by [rawScaleGestureFilter].  Implement and pass into
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilter.kt
index de590ab..ad16249 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilter.kt
@@ -24,7 +24,7 @@
 import androidx.ui.core.changedToUpIgnoreConsumed
 import androidx.ui.core.composed
 import androidx.ui.core.pointerinput.PointerInputFilter
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import kotlin.math.absoluteValue
 
 // TODO(b/143877464): Implement a "can scale in / can scale out" check so that scale slop is only
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt
index 80107ff..c5cf1ad 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/TapGestureFilter.kt
@@ -32,7 +32,7 @@
 import androidx.ui.core.gesture.customevents.DelayUpMessage
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastAny
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/constants.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/constants.kt
index 815a84c..1c8af3a 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/constants.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/constants.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.core.gesture
 
-import androidx.ui.unit.Duration
-import androidx.ui.unit.dp
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.milliseconds
 
 /**
  * Modeled after Android's ViewConfiguration:
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt
index 29f6498..3fa4d70 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/util/VelocityTracker.kt
@@ -16,11 +16,11 @@
 
 package androidx.ui.core.gesture.util
 
-import androidx.ui.unit.Duration
+import androidx.compose.ui.unit.Duration
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Uptime
-import androidx.ui.unit.Velocity
-import androidx.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.Uptime
+import androidx.compose.ui.unit.Velocity
+import androidx.compose.ui.unit.inMilliseconds
 import kotlin.math.absoluteValue
 
 private const val AssumePointerMoveStoppedMilliseconds: Int = 40
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/HitPathTracker.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/HitPathTracker.kt
index 02cdc4b..9e53a58 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/HitPathTracker.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/HitPathTracker.kt
@@ -23,9 +23,9 @@
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.PointerId
 import androidx.ui.core.PointerInputChange
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.plus
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.plus
 import androidx.ui.util.annotation.VisibleForTesting
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt
index 157ca25..d26a64df 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInput.kt
@@ -24,9 +24,9 @@
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.PointerEvent
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.round
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.round
 
 /**
  * A [Modifier.Element] that can interact with pointer input.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt
index e72a8e0..e912f20 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/pointerinput/PointerInputEvent.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.core.PointerId
 import androidx.ui.core.PointerInputData
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.Uptime
 
 /**
  * The normalized data structure for pointer input event information that is taken in processed by
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt
index 2375142..2b4b624 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionHandles.kt
@@ -28,9 +28,9 @@
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.text.InternalTextApi
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 internal val HANDLE_WIDTH = 25.dp
 internal val HANDLE_HEIGHT = 25.dp
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt
index 5324640..a4ddac3 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionLayout.kt
@@ -18,24 +18,24 @@
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
 import androidx.ui.core.Placeable
 import androidx.ui.core.Popup
-import androidx.ui.core.enforce
-import androidx.ui.core.hasFixedHeight
-import androidx.ui.core.hasFixedWidth
+import androidx.compose.ui.unit.enforce
+import androidx.compose.ui.unit.hasFixedHeight
+import androidx.compose.ui.unit.hasFixedWidth
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.text.InternalTextApi
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import kotlin.math.max
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
index 3205204..338c479 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsNode.kt
@@ -26,8 +26,8 @@
 import androidx.ui.core.globalPosition
 import androidx.ui.core.positionInRoot
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.PxBounds
 import androidx.ui.util.fastForEach
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt
index 347bd48..4c9b34c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/testutils/PointerInputTestUtil.kt
@@ -24,9 +24,9 @@
 import androidx.ui.core.PointerInputData
 import androidx.ui.core.PointerInputHandler
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Duration
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Uptime
 
 // TODO(shepshapard): Document.
 
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/AlignmentTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/AlignmentTest.kt
index 493571d..bd982fe 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/AlignmentTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/AlignmentTest.kt
@@ -16,8 +16,9 @@
 
 package androidx.ui.core
 
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.LayoutDirection
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/ConstraintsTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/ConstraintsTest.kt
index ce04bc7..1a1905d 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/ConstraintsTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/ConstraintsTest.kt
@@ -16,7 +16,15 @@
 
 package androidx.ui.core
 
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.constrain
+import androidx.compose.ui.unit.enforce
+import androidx.compose.ui.unit.hasFixedHeight
+import androidx.compose.ui.unit.hasFixedWidth
+import androidx.compose.ui.unit.isZero
+import androidx.compose.ui.unit.offset
+import androidx.compose.ui.unit.satisfiedBy
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt
index 79a8a94..4081f5d 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/LayoutNodeTest.kt
@@ -19,7 +19,9 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.anyOrNull
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt
index d9e4853..8191a44 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/PointerInputTest.kt
@@ -18,8 +18,8 @@
 
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Uptime
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Uptime
+import androidx.compose.ui.unit.milliseconds
 import org.hamcrest.CoreMatchers.`is`
 import org.hamcrest.core.IsEqual.equalTo
 import org.junit.Assert.assertThat
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt
index 7b85e32..cf4819f 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DoubleTapGestureFilterTest.kt
@@ -27,8 +27,8 @@
 import androidx.ui.testutils.invokeOverAllPasses
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilterTest.kt
index 1de3982..10dbb8c 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/DragSlopExceededGestureFilterTest.kt
@@ -33,8 +33,8 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.Duration
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import org.junit.Before
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/GestureUtilsTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/GestureUtilsTest.kt
index 4e262fc..d69cc70 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/GestureUtilsTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/GestureUtilsTest.kt
@@ -18,8 +18,8 @@
 
 import androidx.ui.testutils.down
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt
index b4ebd93..1db5208 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/LongPressGestureFilterTest.kt
@@ -27,8 +27,8 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt
index 35f5d14..29410e8 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/PressIndicatorGestureFilterTest.kt
@@ -26,8 +26,8 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.inOrder
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt
index 7fa3db4..b253f54 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawDragGestureFilterTest.kt
@@ -31,9 +31,9 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.Duration
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.argumentCaptor
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt
index cb510fa..75d28c2 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawPressStartGestureFilterTest.kt
@@ -25,8 +25,8 @@
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.never
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt
index 640e523..10cec15 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/RawScaleGestureFilterTest.kt
@@ -27,7 +27,7 @@
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilterTest.kt
index 927eaa9..74798c9 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleSlopExceededGestureFilterTest.kt
@@ -20,8 +20,8 @@
 import androidx.ui.testutils.invokeOverAllPasses
 import androidx.ui.testutils.moveBy
 import androidx.ui.testutils.moveTo
-import androidx.ui.unit.Duration
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Test
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleUtilsTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleUtilsTest.kt
index 9a28480..23719b0 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleUtilsTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/ScaleUtilsTest.kt
@@ -18,7 +18,7 @@
 
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveTo
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt
index f6a0ac1..d6fe335 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/TapGestureFilterTest.kt
@@ -28,8 +28,8 @@
 import androidx.ui.testutils.invokeOverPasses
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.milliseconds
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.never
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerSetupTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerSetupTest.kt
index 816dda2..f2f7499 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerSetupTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerSetupTest.kt
@@ -26,7 +26,7 @@
 import androidx.ui.testutils.down
 import androidx.ui.testutils.moveTo
 import androidx.ui.testutils.up
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerTest.kt
index 8e304c9..e6c12ab 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/scrollorientationlocking/ScrollOrientationLockerTest.kt
@@ -23,7 +23,7 @@
 import androidx.ui.core.PointerInputChange
 import androidx.ui.core.gesture.ExperimentalPointerInput
 import androidx.ui.testutils.down
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth
 import com.nhaarman.mockitokotlin2.mock
 import org.junit.Test
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
index 628d1d4..8fd294a 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/gesture/util/VelocityTrackerTest.kt
@@ -18,9 +18,9 @@
 
 import androidx.ui.core.PointerInputData
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Uptime
-import androidx.ui.unit.Velocity
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Uptime
+import androidx.compose.ui.unit.Velocity
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/graphics/vector/VectorAssetBuilderTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/graphics/vector/VectorAssetBuilderTest.kt
index d1eb353..1b8c6b6 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/graphics/vector/VectorAssetBuilderTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/graphics/vector/VectorAssetBuilderTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics.vector
 
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt
index a8a1954..510116c 100644
--- a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt
+++ b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example1/Main.kt
@@ -42,14 +42,14 @@
 import androidx.ui.material.TopAppBar
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import androidx.compose.ui.text.font.fontFamily
 import androidx.ui.desktop.font
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Row
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 private const val title = "Desktop Compose Elements"
 
diff --git a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt
index 37e0b57..0344ec6 100644
--- a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt
+++ b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/example2/Main.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.graphics.drawscope.rotate
 import androidx.compose.ui.graphics.drawscope.withTransform
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.desktop.AppWindow
 
 private const val title = "Desktop Compose Canvas"
diff --git a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/AppContent.kt b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/AppContent.kt
index 7b7e5d2..75970e3 100644
--- a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/AppContent.kt
+++ b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/AppContent.kt
@@ -41,9 +41,9 @@
 import androidx.compose.foundation.layout.width
 import androidx.ui.material.Button
 import androidx.ui.material.Surface
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun content() {
diff --git a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/Main.kt b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/Main.kt
index a3737a0..54a0a79 100644
--- a/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/Main.kt
+++ b/ui/ui-desktop/samples/src/jvmMain/kotlin/androidx/ui/desktop/examples/popupexample/Main.kt
@@ -17,7 +17,7 @@
 
 import androidx.ui.desktop.AppWindow
 import androidx.ui.desktop.AppManager
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 
 fun main() {
     AppManager.onWindowsEmptyAction = onCloseAppEvent
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/core/Popup.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/core/Popup.kt
index 13f2fd2..1e124fa 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/core/Popup.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/core/Popup.kt
@@ -26,8 +26,8 @@
 import androidx.ui.core.gesture.tapGestureFilter
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun Popup(
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppDialog.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppDialog.kt
index 2893e9d..215a611 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppDialog.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppDialog.kt
@@ -18,8 +18,8 @@
 import androidx.compose.Composable
 import androidx.compose.emptyContent
 import androidx.compose.remember
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import java.awt.Dimension
 import java.awt.Toolkit
 import java.awt.event.WindowAdapter
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppWindow.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppWindow.kt
index f768e5c..5e1c54e 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppWindow.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppWindow.kt
@@ -19,8 +19,8 @@
 import androidx.compose.Composable
 import androidx.compose.emptyContent
 import androidx.compose.Providers
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import java.awt.Dimension
 import java.awt.Toolkit
 import java.awt.event.WindowAdapter
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt
index 9c7a142..96d5158 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopParagraphIntrinsics.kt
@@ -24,8 +24,8 @@
 import androidx.compose.ui.text.SpanStyleRange
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.Font
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
 import kotlin.math.ceil
 import org.jetbrains.skija.paragraph.Paragraph
 import org.jetbrains.skija.paragraph.ParagraphBuilder
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt
index 25ef00f..261f54d 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/graphics/DesktopCanvas.kt
@@ -21,8 +21,8 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.vectormath.Matrix4
 import androidx.compose.ui.graphics.vectormath.isIdentity
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastForEach
 import org.jetbrains.skija.ClipMode as SkijaClipMode
 import org.jetbrains.skija.IRect as SkijaIRect
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt
index 8b25fec..9f8bfac 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/view/LayoutScope.kt
@@ -38,7 +38,7 @@
 import androidx.ui.desktop.FontLoader
 import androidx.ui.desktop.LayoutScopeGlobal
 import androidx.compose.ui.text.input.TextInputService
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntOffset
 import com.jogamp.opengl.awt.GLCanvas
 import org.jetbrains.skija.Canvas
 
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
index 87a5efa..3f5eaed 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
@@ -33,8 +33,8 @@
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.font.fontFamily
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt
index 977fe8d..d10002c 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/DesktopPaintTest.kt
@@ -18,8 +18,8 @@
 
 import androidx.ui.TestResources.testImageAsset
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import org.junit.Assert.assertEquals
 import org.junit.Test
 
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt
index b04ed93..26bf1b7 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/graphics/canvas/DesktopCanvasTest.kt
@@ -29,8 +29,8 @@
 import androidx.compose.ui.graphics.vectormath.Matrix4
 import androidx.compose.ui.graphics.withSave
 import androidx.compose.ui.graphics.withSaveLayer
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import org.junit.Test
 
 class DesktopCanvasTest : DesktopGraphicsTest() {
diff --git a/ui/ui-foundation/api/0.1.0-dev16.txt b/ui/ui-foundation/api/0.1.0-dev16.txt
index 430b0ad..3b04bf4 100644
--- a/ui/ui-foundation/api/0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/0.1.0-dev16.txt
@@ -19,19 +19,19 @@
   @androidx.compose.Immutable public final class Border {
     method public float component1();
     method public androidx.compose.ui.graphics.Brush component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-AFCpbbc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
     method public androidx.compose.ui.graphics.Brush getBrush();
     method public float getSize();
   }
 
   public final class BorderKt {
-    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-J38HW4w(float size, long color);
+    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-Qek64HU(float size, long color);
   }
 
   public final class BoxKt {
-    method @androidx.compose.Composable public static void Box-P9R6ZIA(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
-    var var411924e1: androidx.ui.unit.Dp = border?.size
-    if (var411924e1 != null) var411924e1 else 0.dp
+    method @androidx.compose.Composable public static void Box-DoyBz0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
+    var var41192a01: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192a01 != null) var41192a01 else 0.dp
 }, float paddingStart = Dp.Unspecified, float paddingTop = Dp.Unspecified, float paddingEnd = Dp.Unspecified, float paddingBottom = Dp.Unspecified, androidx.ui.core.Alignment gravity = ContentGravity.TopStart, kotlin.jvm.functions.Function0<kotlin.Unit> children = emptyContent());
   }
 
@@ -68,11 +68,11 @@
 
   public final class DrawBorderKt {
     method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder(androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-5e76lqs(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-hoekokM(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-P9kTT0c(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-TpnEqK8(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
     method public static androidx.ui.core.Modifier drawBorder(androidx.ui.core.Modifier, androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder--qa9Gvs(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder-9JauuOk(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-D25cWHo(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-XW3HxwY(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
   }
 
   @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
@@ -198,8 +198,8 @@
 
   public final class TextKt {
     method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-B9ZxLYc(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-k_des18(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-OwS078w(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-xPlIdmA(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
     method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
@@ -214,7 +214,7 @@
   }
 
   public final class AndroidFlingDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public AndroidFlingDecaySpec(androidx.ui.unit.Density density);
+    ctor public AndroidFlingDecaySpec(androidx.compose.ui.unit.Density density);
     method public float getAbsVelocityThreshold();
     method public long getDurationMillis(float start, float startVelocity);
     method public float getTarget(float start, float startVelocity);
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -347,7 +347,7 @@
   public final class GenericShape implements androidx.compose.ui.graphics.Shape {
     ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
     method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public final androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
     method public abstract androidx.compose.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public final androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,13 +367,13 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-lwCvPpU(long shapeSize, androidx.compose.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(float size);
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-ipo6vVg(float size);
+    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.corner.CornerSize getZeroCornerSize();
   }
 
@@ -389,8 +389,8 @@
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
   }
 
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
@@ -405,8 +405,8 @@
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape getCircleShape();
   }
 
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index 430b0ad..3b04bf4 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -19,19 +19,19 @@
   @androidx.compose.Immutable public final class Border {
     method public float component1();
     method public androidx.compose.ui.graphics.Brush component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-AFCpbbc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
     method public androidx.compose.ui.graphics.Brush getBrush();
     method public float getSize();
   }
 
   public final class BorderKt {
-    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-J38HW4w(float size, long color);
+    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-Qek64HU(float size, long color);
   }
 
   public final class BoxKt {
-    method @androidx.compose.Composable public static void Box-P9R6ZIA(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
-    var var411924e1: androidx.ui.unit.Dp = border?.size
-    if (var411924e1 != null) var411924e1 else 0.dp
+    method @androidx.compose.Composable public static void Box-DoyBz0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
+    var var41192a01: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192a01 != null) var41192a01 else 0.dp
 }, float paddingStart = Dp.Unspecified, float paddingTop = Dp.Unspecified, float paddingEnd = Dp.Unspecified, float paddingBottom = Dp.Unspecified, androidx.ui.core.Alignment gravity = ContentGravity.TopStart, kotlin.jvm.functions.Function0<kotlin.Unit> children = emptyContent());
   }
 
@@ -68,11 +68,11 @@
 
   public final class DrawBorderKt {
     method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder(androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-5e76lqs(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-hoekokM(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-P9kTT0c(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-TpnEqK8(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
     method public static androidx.ui.core.Modifier drawBorder(androidx.ui.core.Modifier, androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder--qa9Gvs(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder-9JauuOk(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-D25cWHo(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-XW3HxwY(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
   }
 
   @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
@@ -198,8 +198,8 @@
 
   public final class TextKt {
     method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-B9ZxLYc(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-k_des18(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-OwS078w(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-xPlIdmA(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
     method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
@@ -214,7 +214,7 @@
   }
 
   public final class AndroidFlingDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public AndroidFlingDecaySpec(androidx.ui.unit.Density density);
+    ctor public AndroidFlingDecaySpec(androidx.compose.ui.unit.Density density);
     method public float getAbsVelocityThreshold();
     method public long getDurationMillis(float start, float startVelocity);
     method public float getTarget(float start, float startVelocity);
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -347,7 +347,7 @@
   public final class GenericShape implements androidx.compose.ui.graphics.Shape {
     ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
     method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public final androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
     method public abstract androidx.compose.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public final androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,13 +367,13 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-lwCvPpU(long shapeSize, androidx.compose.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(float size);
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-ipo6vVg(float size);
+    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.corner.CornerSize getZeroCornerSize();
   }
 
@@ -389,8 +389,8 @@
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
   }
 
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
@@ -405,8 +405,8 @@
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape getCircleShape();
   }
 
diff --git a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
index 430b0ad..3b04bf4 100644
--- a/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_0.1.0-dev16.txt
@@ -19,19 +19,19 @@
   @androidx.compose.Immutable public final class Border {
     method public float component1();
     method public androidx.compose.ui.graphics.Brush component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-AFCpbbc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
     method public androidx.compose.ui.graphics.Brush getBrush();
     method public float getSize();
   }
 
   public final class BorderKt {
-    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-J38HW4w(float size, long color);
+    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-Qek64HU(float size, long color);
   }
 
   public final class BoxKt {
-    method @androidx.compose.Composable public static void Box-P9R6ZIA(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
-    var var411924e1: androidx.ui.unit.Dp = border?.size
-    if (var411924e1 != null) var411924e1 else 0.dp
+    method @androidx.compose.Composable public static void Box-DoyBz0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
+    var var41192a01: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192a01 != null) var41192a01 else 0.dp
 }, float paddingStart = Dp.Unspecified, float paddingTop = Dp.Unspecified, float paddingEnd = Dp.Unspecified, float paddingBottom = Dp.Unspecified, androidx.ui.core.Alignment gravity = ContentGravity.TopStart, kotlin.jvm.functions.Function0<kotlin.Unit> children = emptyContent());
   }
 
@@ -68,11 +68,11 @@
 
   public final class DrawBorderKt {
     method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder(androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-5e76lqs(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-hoekokM(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-P9kTT0c(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-TpnEqK8(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
     method public static androidx.ui.core.Modifier drawBorder(androidx.ui.core.Modifier, androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder--qa9Gvs(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder-9JauuOk(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-D25cWHo(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-XW3HxwY(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
   }
 
   @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
@@ -198,8 +198,8 @@
 
   public final class TextKt {
     method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-B9ZxLYc(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-k_des18(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-OwS078w(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-xPlIdmA(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
     method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
@@ -214,7 +214,7 @@
   }
 
   public final class AndroidFlingDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public AndroidFlingDecaySpec(androidx.ui.unit.Density density);
+    ctor public AndroidFlingDecaySpec(androidx.compose.ui.unit.Density density);
     method public float getAbsVelocityThreshold();
     method public long getDurationMillis(float start, float startVelocity);
     method public float getTarget(float start, float startVelocity);
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -347,7 +347,7 @@
   public final class GenericShape implements androidx.compose.ui.graphics.Shape {
     ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
     method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public final androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
     method public abstract androidx.compose.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public final androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,13 +367,13 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-lwCvPpU(long shapeSize, androidx.compose.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(float size);
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-ipo6vVg(float size);
+    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.corner.CornerSize getZeroCornerSize();
   }
 
@@ -389,8 +389,8 @@
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
   }
 
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
@@ -405,8 +405,8 @@
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape getCircleShape();
   }
 
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index 430b0ad..3b04bf4 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -19,19 +19,19 @@
   @androidx.compose.Immutable public final class Border {
     method public float component1();
     method public androidx.compose.ui.graphics.Brush component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-AFCpbbc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
     method public androidx.compose.ui.graphics.Brush getBrush();
     method public float getSize();
   }
 
   public final class BorderKt {
-    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-J38HW4w(float size, long color);
+    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-Qek64HU(float size, long color);
   }
 
   public final class BoxKt {
-    method @androidx.compose.Composable public static void Box-P9R6ZIA(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
-    var var411924e1: androidx.ui.unit.Dp = border?.size
-    if (var411924e1 != null) var411924e1 else 0.dp
+    method @androidx.compose.Composable public static void Box-DoyBz0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
+    var var41192a01: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192a01 != null) var41192a01 else 0.dp
 }, float paddingStart = Dp.Unspecified, float paddingTop = Dp.Unspecified, float paddingEnd = Dp.Unspecified, float paddingBottom = Dp.Unspecified, androidx.ui.core.Alignment gravity = ContentGravity.TopStart, kotlin.jvm.functions.Function0<kotlin.Unit> children = emptyContent());
   }
 
@@ -68,11 +68,11 @@
 
   public final class DrawBorderKt {
     method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder(androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-5e76lqs(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-hoekokM(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-P9kTT0c(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-TpnEqK8(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
     method public static androidx.ui.core.Modifier drawBorder(androidx.ui.core.Modifier, androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder--qa9Gvs(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder-9JauuOk(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-D25cWHo(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-XW3HxwY(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
   }
 
   @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
@@ -198,8 +198,8 @@
 
   public final class TextKt {
     method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-B9ZxLYc(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-k_des18(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-OwS078w(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-xPlIdmA(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
     method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
@@ -214,7 +214,7 @@
   }
 
   public final class AndroidFlingDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public AndroidFlingDecaySpec(androidx.ui.unit.Density density);
+    ctor public AndroidFlingDecaySpec(androidx.compose.ui.unit.Density density);
     method public float getAbsVelocityThreshold();
     method public long getDurationMillis(float start, float startVelocity);
     method public float getTarget(float start, float startVelocity);
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -347,7 +347,7 @@
   public final class GenericShape implements androidx.compose.ui.graphics.Shape {
     ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
     method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public final androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
     method public abstract androidx.compose.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public final androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,13 +367,13 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-lwCvPpU(long shapeSize, androidx.compose.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(float size);
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-ipo6vVg(float size);
+    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.corner.CornerSize getZeroCornerSize();
   }
 
@@ -389,8 +389,8 @@
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
   }
 
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
@@ -405,8 +405,8 @@
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape getCircleShape();
   }
 
diff --git a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
index 430b0ad..3b04bf4 100644
--- a/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-foundation/api/restricted_0.1.0-dev16.txt
@@ -19,19 +19,19 @@
   @androidx.compose.Immutable public final class Border {
     method public float component1();
     method public androidx.compose.ui.graphics.Brush component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-AFCpbbc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
     method public androidx.compose.ui.graphics.Brush getBrush();
     method public float getSize();
   }
 
   public final class BorderKt {
-    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-J38HW4w(float size, long color);
+    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-Qek64HU(float size, long color);
   }
 
   public final class BoxKt {
-    method @androidx.compose.Composable public static void Box-P9R6ZIA(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
-    var var411924e1: androidx.ui.unit.Dp = border?.size
-    if (var411924e1 != null) var411924e1 else 0.dp
+    method @androidx.compose.Composable public static void Box-DoyBz0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
+    var var41192a01: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192a01 != null) var41192a01 else 0.dp
 }, float paddingStart = Dp.Unspecified, float paddingTop = Dp.Unspecified, float paddingEnd = Dp.Unspecified, float paddingBottom = Dp.Unspecified, androidx.ui.core.Alignment gravity = ContentGravity.TopStart, kotlin.jvm.functions.Function0<kotlin.Unit> children = emptyContent());
   }
 
@@ -68,11 +68,11 @@
 
   public final class DrawBorderKt {
     method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder(androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-5e76lqs(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-hoekokM(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-P9kTT0c(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-TpnEqK8(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
     method public static androidx.ui.core.Modifier drawBorder(androidx.ui.core.Modifier, androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder--qa9Gvs(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder-9JauuOk(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-D25cWHo(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-XW3HxwY(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
   }
 
   @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
@@ -198,8 +198,8 @@
 
   public final class TextKt {
     method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-B9ZxLYc(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-k_des18(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-OwS078w(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-xPlIdmA(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
     method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
@@ -214,7 +214,7 @@
   }
 
   public final class AndroidFlingDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public AndroidFlingDecaySpec(androidx.ui.unit.Density density);
+    ctor public AndroidFlingDecaySpec(androidx.compose.ui.unit.Density density);
     method public float getAbsVelocityThreshold();
     method public long getDurationMillis(float start, float startVelocity);
     method public float getTarget(float start, float startVelocity);
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -347,7 +347,7 @@
   public final class GenericShape implements androidx.compose.ui.graphics.Shape {
     ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
     method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public final androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
     method public abstract androidx.compose.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public final androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,13 +367,13 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-lwCvPpU(long shapeSize, androidx.compose.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(float size);
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-ipo6vVg(float size);
+    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.corner.CornerSize getZeroCornerSize();
   }
 
@@ -389,8 +389,8 @@
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
   }
 
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
@@ -405,8 +405,8 @@
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape getCircleShape();
   }
 
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index 430b0ad..3b04bf4 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -19,19 +19,19 @@
   @androidx.compose.Immutable public final class Border {
     method public float component1();
     method public androidx.compose.ui.graphics.Brush component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-AFCpbbc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.Immutable public androidx.compose.foundation.Border copy-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
     method public androidx.compose.ui.graphics.Brush getBrush();
     method public float getSize();
   }
 
   public final class BorderKt {
-    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-J38HW4w(float size, long color);
+    method @androidx.compose.Stable public static androidx.compose.foundation.Border Border-Qek64HU(float size, long color);
   }
 
   public final class BoxKt {
-    method @androidx.compose.Composable public static void Box-P9R6ZIA(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
-    var var411924e1: androidx.ui.unit.Dp = border?.size
-    if (var411924e1 != null) var411924e1 else 0.dp
+    method @androidx.compose.Composable public static void Box-DoyBz0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long backgroundColor = Color.Transparent, androidx.compose.foundation.Border? border = null, float padding = elvis {
+    var var41192a01: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192a01 != null) var41192a01 else 0.dp
 }, float paddingStart = Dp.Unspecified, float paddingTop = Dp.Unspecified, float paddingEnd = Dp.Unspecified, float paddingBottom = Dp.Unspecified, androidx.ui.core.Alignment gravity = ContentGravity.TopStart, kotlin.jvm.functions.Function0<kotlin.Unit> children = emptyContent());
   }
 
@@ -68,11 +68,11 @@
 
   public final class DrawBorderKt {
     method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder(androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-5e76lqs(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-hoekokM(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.Modifier DrawBorder-P9kTT0c(float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
+    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.DrawBorder DrawBorder-TpnEqK8(float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
     method public static androidx.ui.core.Modifier drawBorder(androidx.ui.core.Modifier, androidx.compose.foundation.Border border, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder--qa9Gvs(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
-    method public static androidx.ui.core.Modifier drawBorder-9JauuOk(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-D25cWHo(androidx.ui.core.Modifier, float size, androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.graphics.Shape shape);
+    method public static androidx.ui.core.Modifier drawBorder-XW3HxwY(androidx.ui.core.Modifier, float size, long color, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape);
   }
 
   @kotlin.RequiresOptIn(message="This foundation API is experimental and is likely to change or be removed in the " + "future.") public @interface ExperimentalFoundationApi {
@@ -198,8 +198,8 @@
 
   public final class TextKt {
     method @androidx.compose.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Text-B9ZxLYc(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
-    method @androidx.compose.Composable public static void Text-k_des18(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-OwS078w(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
+    method @androidx.compose.Composable public static void Text-xPlIdmA(String text, androidx.ui.core.Modifier modifier = Modifier, long color = Color.Unset, long fontSize = TextUnit.Inherit, androidx.compose.ui.text.font.FontStyle? fontStyle = null, androidx.compose.ui.text.font.FontWeight? fontWeight = null, androidx.compose.ui.text.font.FontFamily? fontFamily = null, long letterSpacing = TextUnit.Inherit, androidx.compose.ui.text.style.TextDecoration? textDecoration = null, androidx.compose.ui.text.style.TextAlign? textAlign = null, long lineHeight = TextUnit.Inherit, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, boolean softWrap = true, int maxLines = 2147483647, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent = mapOf(), kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, androidx.compose.ui.text.TextStyle style = currentTextStyle());
     method @androidx.compose.Composable public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
@@ -214,7 +214,7 @@
   }
 
   public final class AndroidFlingDecaySpec implements androidx.compose.animation.core.FloatDecayAnimationSpec {
-    ctor public AndroidFlingDecaySpec(androidx.ui.unit.Density density);
+    ctor public AndroidFlingDecaySpec(androidx.compose.ui.unit.Density density);
     method public float getAbsVelocityThreshold();
     method public long getDurationMillis(float start, float startVelocity);
     method public float getTarget(float start, float startVelocity);
@@ -246,7 +246,7 @@
 package androidx.compose.foundation.gestures {
 
   public final class DraggableKt {
-    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
+    method public static androidx.ui.core.Modifier draggable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, boolean enabled = true, boolean reverseDirection = false, androidx.compose.foundation.InteractionState? interactionState = null, boolean startDragImmediately = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canDrag = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onDragStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onDragStopped = {}, kotlin.jvm.functions.Function2<? super androidx.compose.ui.unit.Density,? super java.lang.Float,kotlin.Unit> onDrag);
   }
 
   public final class ScrollableController {
@@ -347,7 +347,7 @@
   public final class GenericShape implements androidx.compose.ui.graphics.Shape {
     ctor public GenericShape(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
     method public androidx.compose.foundation.shape.GenericShape copy(kotlin.jvm.functions.Function2<? super androidx.compose.ui.graphics.Path,? super androidx.compose.ui.geometry.Size,kotlin.Unit> builder);
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
 }
@@ -358,8 +358,8 @@
     ctor public CornerBasedShape(androidx.compose.foundation.shape.corner.CornerSize topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft);
     method public abstract androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize topLeft = topLeft, androidx.compose.foundation.shape.corner.CornerSize topRight = topRight, androidx.compose.foundation.shape.corner.CornerSize bottomRight = bottomRight, androidx.compose.foundation.shape.corner.CornerSize bottomLeft = bottomLeft);
     method public final androidx.compose.foundation.shape.corner.CornerBasedShape copy(androidx.compose.foundation.shape.corner.CornerSize all);
-    method public final androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
     method public abstract androidx.compose.ui.graphics.Outline createOutline-hMawgr0(long size, float topLeft, float topRight, float bottomRight, float bottomLeft);
+    method public final androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomLeft();
     method public final androidx.compose.foundation.shape.corner.CornerSize getBottomRight();
     method public final androidx.compose.foundation.shape.corner.CornerSize getTopLeft();
@@ -367,13 +367,13 @@
   }
 
   @androidx.compose.Immutable public interface CornerSize {
-    method public float toPx-6PvjmT0(long shapeSize, androidx.ui.unit.Density density);
+    method public float toPx-lwCvPpU(long shapeSize, androidx.compose.ui.unit.Density density);
   }
 
   public final class CornerSizeKt {
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(float size);
     method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-ipo6vVg(float size);
+    method @androidx.compose.Stable public static androidx.compose.foundation.shape.corner.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.corner.CornerSize getZeroCornerSize();
   }
 
@@ -389,8 +389,8 @@
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.CutCornerShape CutCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
   }
 
   public final class RoundedCornerShape extends androidx.compose.foundation.shape.corner.CornerBasedShape {
@@ -405,8 +405,8 @@
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(int percent);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(float topLeft = 0.0f, float topRight = 0.0f, float bottomRight = 0.0f, float bottomLeft = 0.0f);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape(@IntRange(from=0, to=100) int topLeftPercent = 0, @IntRange(from=0, to=100) int topRightPercent = 0, @IntRange(from=0, to=100) int bottomRightPercent = 0, @IntRange(from=0, to=100) int bottomLeftPercent = 0);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ipo6vVg(float size);
-    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-rIHlIKc(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-0680j_4(float size);
+    method public static androidx.compose.foundation.shape.corner.RoundedCornerShape RoundedCornerShape-ZmiikuI(float topLeft = 0.dp, float topRight = 0.dp, float bottomRight = 0.dp, float bottomLeft = 0.dp);
     method public static androidx.compose.foundation.shape.corner.RoundedCornerShape getCircleShape();
   }
 
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/BoxDemo.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/BoxDemo.kt
index 2c8d8637..e654675 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/BoxDemo.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/BoxDemo.kt
@@ -32,7 +32,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun BoxDemo() {
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt
index f302013..13ffccd 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/DrawModifiersDemo.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun DrawModifiersDemo() {
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/HighLevelGesturesDemo.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/HighLevelGesturesDemo.kt
index 0bdeba8..68c473c 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/HighLevelGesturesDemo.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/HighLevelGesturesDemo.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun HighLevelGesturesDemo() {
diff --git a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt
index 25a549f..e69861a 100644
--- a/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt
+++ b/ui/ui-foundation/integration-tests/foundation-demos/src/main/java/androidx/compose/foundation/demos/ListDemos.kt
@@ -39,8 +39,8 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import kotlin.random.Random
 
 val LazyListDemos = listOf(
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BorderSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BorderSamples.kt
index 2ce8585..78a2350 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BorderSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BorderSamples.kt
@@ -28,7 +28,7 @@
 import androidx.compose.ui.graphics.HorizontalGradient
 import androidx.compose.ui.graphics.TileMode
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 @Sampled
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BoxSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BoxSamples.kt
index 53437c8..e1e9169 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BoxSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/BoxSamples.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.shape.corner.CircleShape
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt
index e0038db..3de5307 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/CanvasSamples.kt
@@ -24,7 +24,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.drawscope.inset
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DarkThemeSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DarkThemeSample.kt
index 6867583..0d3fedc 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DarkThemeSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DarkThemeSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DeterminateProgressSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DeterminateProgressSamples.kt
index 825c22b..7c22cb1 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DeterminateProgressSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DeterminateProgressSamples.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.determinateProgressIndicator
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DialogSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DialogSample.kt
index 3aa1f65..8cdbaae 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DialogSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DialogSample.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.Dialog
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DraggableSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DraggableSamples.kt
index b19f1d3..497a423 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DraggableSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DraggableSamples.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.layout.offsetPx
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DrawBackgroundSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DrawBackgroundSamples.kt
index bbb05f9..0834cdf 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DrawBackgroundSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/DrawBackgroundSamples.kt
@@ -25,7 +25,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.HorizontalGradient
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 @Sampled
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt
index aac53f2..6907228 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ImageSamples.kt
@@ -34,9 +34,9 @@
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.res.loadVectorResource
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/IndicationSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/IndicationSamples.kt
index b5d13ca..de11abd 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/IndicationSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/IndicationSamples.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 @Sampled
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt
index bd90942..1349217 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/InteractionStateSample.kt
@@ -34,7 +34,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt
index d44bc25..21f63f4 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollableSamples.kt
@@ -29,8 +29,8 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import kotlin.math.roundToInt
 
 @Sampled
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt
index b6bfa5c..e9adca4 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ScrollerSamples.kt
@@ -41,8 +41,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.size
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 
 private val colors = listOf(
     Color(0xFFffd7d7.toInt()),
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectableSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectableSamples.kt
index e6476be..50d2ce0 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectableSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/SelectableSamples.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.size
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ZoomableSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ZoomableSample.kt
index 4360f25..cdbbd05 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ZoomableSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ZoomableSample.kt
@@ -35,8 +35,8 @@
 import androidx.ui.core.clipToBounds
 import androidx.ui.core.drawLayer
 import androidx.compose.ui.graphics.Color
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 
 @Sampled
 @Composable
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BackgroundTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BackgroundTest.kt
index ac69439..d54e536 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BackgroundTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BackgroundTest.kt
@@ -33,7 +33,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt
index 67b87af..2585a55 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BorderTest.kt
@@ -35,7 +35,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt
index 3870bc1..399b365 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/BoxTest.kt
@@ -41,9 +41,9 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt
index 488f28f..e36e690 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/CanvasTest.kt
@@ -35,7 +35,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onRoot
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DeterminateProgressTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DeterminateProgressTest.kt
index d61d7c8..fc6cd92 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DeterminateProgressTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DeterminateProgressTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnUiThread
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt
index 76be75d..a9b66ec 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DraggableTest.kt
@@ -40,8 +40,8 @@
 import androidx.ui.test.swipeWithVelocity
 import androidx.ui.test.up
 import androidx.ui.test.size
-import androidx.ui.unit.dp
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/FoundationTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/FoundationTest.kt
index 5b4ac59..b54bf9f 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/FoundationTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/FoundationTest.kt
@@ -25,7 +25,7 @@
 import androidx.ui.test.ComposeTestRule
 import androidx.ui.test.SemanticsNodeInteraction
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Constant to emulate very big but finite constraints
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
index e2cf90a..883ff79 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ImageTest.kt
@@ -42,9 +42,9 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.onRoot
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
index 36f0f02..e88c7ca 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/IndicationTest.kt
@@ -30,7 +30,7 @@
 import androidx.ui.test.down
 import androidx.ui.test.up
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Ignore
 import org.junit.Rule
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollTest.kt
index c667bd3..a9843cf 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollTest.kt
@@ -50,9 +50,9 @@
 import androidx.ui.test.swipeLeft
 import androidx.ui.test.swipeRight
 import androidx.ui.test.swipeUp
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
index daaec91..9ab8156 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ScrollableTest.kt
@@ -42,8 +42,8 @@
 import androidx.ui.test.swipe
 import androidx.ui.test.swipeWithVelocity
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt
index 5deac43..4bf1ecd 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldCursorTest.kt
@@ -35,10 +35,10 @@
 import androidx.ui.test.hasInputMethodsSupport
 import androidx.ui.test.waitForIdle
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import java.util.concurrent.CountDownLatch
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt
index 3f06c08..0e4f840 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldFocusTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.runOnUiThread
 import androidx.compose.foundation.text.CoreTextField
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
index 1d2eba5..632b220 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldTest.kt
@@ -71,7 +71,7 @@
 import androidx.ui.test.isNotFocused
 import androidx.ui.test.performSemanticsAction
 import androidx.ui.test.runOnIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt
index aaec3b0..e8251f5 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextTest.kt
@@ -30,9 +30,9 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.performSemanticsAction
 import androidx.ui.test.runOnIdle
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt
index 25a9314..476bb1af 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ZoomableTest.kt
@@ -34,8 +34,8 @@
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.pinch
 import androidx.ui.test.size
-import androidx.ui.unit.dp
-import androidx.ui.unit.toSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.toSize
 import com.google.common.truth.Truth
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Rule
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt
index b2a41f1..478a47f 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnItemsTest.kt
@@ -55,9 +55,9 @@
 import androidx.ui.test.swipeUp
 import androidx.ui.test.swipeWithVelocity
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import com.google.common.collect.Range
 import com.google.common.truth.IntegerSubject
 import com.google.common.truth.Truth
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt
index f10c3bd..b606a47 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowItemsTest.kt
@@ -39,7 +39,7 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt
index 83696ca..747ddf2 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShapeTest.kt
@@ -21,8 +21,8 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.geometry.toRect
 import androidx.compose.ui.graphics.Outline
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt
index 13b92a0..96fe35d 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CornerSizeTest.kt
@@ -18,8 +18,8 @@
 
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.geometry.Size
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt
index ff53d2a..440cf21 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/CutCornerShapeTest.kt
@@ -23,8 +23,8 @@
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.PathOperation
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt
index 32f730fc..2b0dcf8 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShapeTest.kt
@@ -23,8 +23,8 @@
 import androidx.compose.ui.geometry.toRect
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert.assertEquals
 import org.junit.Test
diff --git a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingCalculator.kt b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingCalculator.kt
index 36396f3..7a970e8 100644
--- a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingCalculator.kt
+++ b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingCalculator.kt
@@ -18,7 +18,7 @@
 
 import android.view.ViewConfiguration
 import androidx.ui.core.DensityAmbient
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import kotlin.math.exp
 import kotlin.math.ln
 import kotlin.math.sign
diff --git a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingDecaySpec.kt b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingDecaySpec.kt
index 9050645..e2df929 100644
--- a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingDecaySpec.kt
+++ b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingDecaySpec.kt
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.animation
 
 import androidx.compose.animation.core.FloatDecayAnimationSpec
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import kotlin.math.sign
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt
index 677b204..bb7d2e0 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/BaseTextField.kt
@@ -51,7 +51,7 @@
 import androidx.compose.ui.text.TextLayoutResult
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.constrain
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 // TODO(b/151940543): Remove this variable when we have a solution for idling animations
 /** @suppress */
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt
index 9e56f09..72aa8c0 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Border.kt
@@ -21,7 +21,7 @@
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.SolidColor
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 
 /**
  * Class to specify border appearance.
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Box.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Box.kt
index 4398caf..311a88e 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Box.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Box.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Composable
 import androidx.compose.emptyContent
 import androidx.ui.core.Alignment
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.RectangleShape
@@ -27,9 +27,9 @@
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.fastForEach
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt
index 35a7e75..02001c4 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DrawBorder.kt
@@ -40,8 +40,8 @@
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.Fill
 import androidx.compose.ui.graphics.drawscope.Stroke
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
 import androidx.ui.util.nativeClass
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt
index 0b2c3d4..af71a15 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Icon.kt
@@ -30,7 +30,7 @@
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.ui.graphics.vector.VectorPainter
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Icon component that draws [asset] using [tint], defaulting to [contentColor].
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Scroll.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Scroll.kt
index f062aac..50d84ff 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Scroll.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Scroll.kt
@@ -31,8 +31,8 @@
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.Alignment
 import androidx.ui.core.AnimationClockAmbient
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
@@ -56,7 +56,7 @@
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.rememberSavedInstanceState
 import androidx.ui.semantics.scrollBy
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt
index 3013046..2155748 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Text.kt
@@ -38,7 +38,7 @@
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnit
 
 /**
  * High level element that displays text and provides semantics / accessibility information.
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
index 85f79df..b01a117 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Draggable.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.Interaction
 import androidx.compose.foundation.InteractionState
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Configure touch dragging for the UI element in a single [Orientation]. The drag distance is
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt
index aa59b8f..8f24361 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItems.kt
@@ -37,7 +37,7 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.padding
 import androidx.ui.core.Alignment
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * A vertically scrolling list that only composes and lays out the currently visible items.
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt
index 06f71be..64f85e4 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyItemsState.kt
@@ -23,9 +23,9 @@
 import androidx.compose.ExperimentalComposeApi
 import androidx.compose.Recomposer
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
@@ -34,8 +34,8 @@
 import androidx.ui.core.Ref
 import androidx.ui.core.Remeasurement
 import androidx.ui.core.RemeasurementModifier
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
 import androidx.ui.core.subcomposeInto
 import kotlin.math.abs
 import kotlin.math.max
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt
index 1c59bb5..8f64bd2 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/GenericShape.kt
@@ -20,7 +20,7 @@
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Creates [Shape] defined by applying the provided [builder] on a [Path].
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt
index c348f66..4183f1b 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerBasedShape.kt
@@ -19,7 +19,7 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.ui.util.nativeClass
 import kotlin.math.min
 
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt
index f543ecd..e902018 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CornerSize.kt
@@ -19,8 +19,8 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
 import androidx.ui.util.annotation.FloatRange
 import androidx.ui.util.annotation.IntRange
 
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt
index 4d93373..eec1e5a 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/CutCornerShape.kt
@@ -20,8 +20,8 @@
 import androidx.compose.ui.geometry.toRect
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Path
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.annotation.IntRange
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt
index 32fe557..7258547 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/corner/RoundedCornerShape.kt
@@ -22,8 +22,8 @@
 import androidx.compose.ui.geometry.toRect
 import androidx.compose.ui.graphics.Outline
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.annotation.IntRange
 
 /**
diff --git a/ui/ui-graphics/api/0.1.0-dev16.txt b/ui/ui-graphics/api/0.1.0-dev16.txt
index 15db45c..040b8db 100644
--- a/ui/ui-graphics/api/0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/0.1.0-dev16.txt
@@ -176,7 +176,7 @@
     method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
@@ -596,7 +596,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.compose.ui.graphics.Brush {
@@ -838,7 +838,7 @@
 
 package androidx.compose.ui.graphics.drawscope {
 
-  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
+  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.compose.ui.unit.Density {
     ctor public DrawScope();
     method protected final void draw-7QIdRrY(androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public final void drawArc-BcZ8TnY(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -846,7 +846,7 @@
     method public final void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawCircle-NGaRamM(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine-1-s4MmQ(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawOval-0a6MmAQ(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -860,10 +860,10 @@
     method public final void drawRoundRect-S2ipBsc(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawRoundRect-jmXbwic(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final androidx.compose.ui.geometry.Offset getCenter();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final long getSize();
     property public final androidx.compose.ui.geometry.Offset center;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
   }
@@ -955,8 +955,8 @@
   }
 
   public final class ImagePainter extends androidx.compose.ui.graphics.painter.Painter {
-    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
-    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
+    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
+    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
     method public long getIntrinsicSize();
     method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
     property public long intrinsicSize;
@@ -966,7 +966,7 @@
     ctor public Painter();
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
-    method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
+    method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public final void draw-ty3CEPU(androidx.compose.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
diff --git a/ui/ui-graphics/api/current.txt b/ui/ui-graphics/api/current.txt
index 15db45c..040b8db 100644
--- a/ui/ui-graphics/api/current.txt
+++ b/ui/ui-graphics/api/current.txt
@@ -176,7 +176,7 @@
     method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
@@ -596,7 +596,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.compose.ui.graphics.Brush {
@@ -838,7 +838,7 @@
 
 package androidx.compose.ui.graphics.drawscope {
 
-  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
+  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.compose.ui.unit.Density {
     ctor public DrawScope();
     method protected final void draw-7QIdRrY(androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public final void drawArc-BcZ8TnY(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -846,7 +846,7 @@
     method public final void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawCircle-NGaRamM(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine-1-s4MmQ(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawOval-0a6MmAQ(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -860,10 +860,10 @@
     method public final void drawRoundRect-S2ipBsc(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawRoundRect-jmXbwic(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final androidx.compose.ui.geometry.Offset getCenter();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final long getSize();
     property public final androidx.compose.ui.geometry.Offset center;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
   }
@@ -955,8 +955,8 @@
   }
 
   public final class ImagePainter extends androidx.compose.ui.graphics.painter.Painter {
-    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
-    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
+    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
+    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
     method public long getIntrinsicSize();
     method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
     property public long intrinsicSize;
@@ -966,7 +966,7 @@
     ctor public Painter();
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
-    method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
+    method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public final void draw-ty3CEPU(androidx.compose.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
diff --git a/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt
index 15db45c..040b8db 100644
--- a/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_0.1.0-dev16.txt
@@ -176,7 +176,7 @@
     method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
@@ -596,7 +596,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.compose.ui.graphics.Brush {
@@ -838,7 +838,7 @@
 
 package androidx.compose.ui.graphics.drawscope {
 
-  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
+  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.compose.ui.unit.Density {
     ctor public DrawScope();
     method protected final void draw-7QIdRrY(androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public final void drawArc-BcZ8TnY(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -846,7 +846,7 @@
     method public final void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawCircle-NGaRamM(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine-1-s4MmQ(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawOval-0a6MmAQ(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -860,10 +860,10 @@
     method public final void drawRoundRect-S2ipBsc(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawRoundRect-jmXbwic(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final androidx.compose.ui.geometry.Offset getCenter();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final long getSize();
     property public final androidx.compose.ui.geometry.Offset center;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
   }
@@ -955,8 +955,8 @@
   }
 
   public final class ImagePainter extends androidx.compose.ui.graphics.painter.Painter {
-    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
-    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
+    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
+    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
     method public long getIntrinsicSize();
     method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
     property public long intrinsicSize;
@@ -966,7 +966,7 @@
     ctor public Painter();
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
-    method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
+    method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public final void draw-ty3CEPU(androidx.compose.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
diff --git a/ui/ui-graphics/api/public_plus_experimental_current.txt b/ui/ui-graphics/api/public_plus_experimental_current.txt
index 15db45c..040b8db 100644
--- a/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -176,7 +176,7 @@
     method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
@@ -596,7 +596,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.compose.ui.graphics.Brush {
@@ -838,7 +838,7 @@
 
 package androidx.compose.ui.graphics.drawscope {
 
-  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
+  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.compose.ui.unit.Density {
     ctor public DrawScope();
     method protected final void draw-7QIdRrY(androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public final void drawArc-BcZ8TnY(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -846,7 +846,7 @@
     method public final void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawCircle-NGaRamM(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine-1-s4MmQ(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawOval-0a6MmAQ(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -860,10 +860,10 @@
     method public final void drawRoundRect-S2ipBsc(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawRoundRect-jmXbwic(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final androidx.compose.ui.geometry.Offset getCenter();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final long getSize();
     property public final androidx.compose.ui.geometry.Offset center;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
   }
@@ -955,8 +955,8 @@
   }
 
   public final class ImagePainter extends androidx.compose.ui.graphics.painter.Painter {
-    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
-    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
+    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
+    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
     method public long getIntrinsicSize();
     method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
     property public long intrinsicSize;
@@ -966,7 +966,7 @@
     ctor public Painter();
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
-    method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
+    method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public final void draw-ty3CEPU(androidx.compose.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
diff --git a/ui/ui-graphics/api/restricted_0.1.0-dev16.txt b/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
index e1bfcb6..a8964c4 100644
--- a/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
@@ -13,7 +13,7 @@
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize, androidx.ui.unit.IntOffset dstOffset, androidx.ui.unit.IntSize dstSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize, androidx.compose.ui.unit.IntOffset dstOffset, androidx.compose.ui.unit.IntSize dstSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
     method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Paint paint);
@@ -208,7 +208,7 @@
     method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
@@ -629,7 +629,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.compose.ui.graphics.Brush {
@@ -871,7 +871,7 @@
 
 package androidx.compose.ui.graphics.drawscope {
 
-  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
+  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.compose.ui.unit.Density {
     ctor public DrawScope();
     method protected final void draw-7QIdRrY(androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public final void drawArc-BcZ8TnY(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -879,7 +879,7 @@
     method public final void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawCircle-NGaRamM(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine-1-s4MmQ(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawOval-0a6MmAQ(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -893,11 +893,11 @@
     method public final void drawRoundRect-S2ipBsc(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawRoundRect-jmXbwic(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final androidx.compose.ui.geometry.Offset getCenter();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final long getSize();
     method @kotlin.PublishedApi internal final void setSize-uvyYCjk(long size);
     property public final androidx.compose.ui.geometry.Offset center;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
     field @kotlin.PublishedApi internal androidx.compose.ui.graphics.Canvas canvas;
@@ -991,8 +991,8 @@
   }
 
   public final class ImagePainter extends androidx.compose.ui.graphics.painter.Painter {
-    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
-    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
+    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
+    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
     method public long getIntrinsicSize();
     method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
     property public long intrinsicSize;
@@ -1002,7 +1002,7 @@
     ctor public Painter();
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
-    method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
+    method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public final void draw-ty3CEPU(androidx.compose.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
diff --git a/ui/ui-graphics/api/restricted_current.txt b/ui/ui-graphics/api/restricted_current.txt
index e1bfcb6..a8964c4 100644
--- a/ui/ui-graphics/api/restricted_current.txt
+++ b/ui/ui-graphics/api/restricted_current.txt
@@ -13,7 +13,7 @@
     method public void drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize, androidx.ui.unit.IntOffset dstOffset, androidx.ui.unit.IntSize dstSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize, androidx.compose.ui.unit.IntOffset dstOffset, androidx.compose.ui.unit.IntSize dstSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
     method public void drawPath(androidx.compose.ui.graphics.Path path, androidx.compose.ui.graphics.Paint paint);
@@ -208,7 +208,7 @@
     method public default void drawArcRad(androidx.compose.ui.geometry.Rect rect, float startAngleRad, float sweepAngleRad, boolean useCenter, androidx.compose.ui.graphics.Paint paint);
     method public void drawCircle(androidx.compose.ui.geometry.Offset center, float radius, androidx.compose.ui.graphics.Paint paint);
     method public void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeftOffset, androidx.compose.ui.graphics.Paint paint);
-    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
+    method public void drawImageRect(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, androidx.compose.ui.graphics.Paint paint);
     method public void drawLine(androidx.compose.ui.geometry.Offset p1, androidx.compose.ui.geometry.Offset p2, androidx.compose.ui.graphics.Paint paint);
     method public default void drawOval(androidx.compose.ui.geometry.Rect rect, androidx.compose.ui.graphics.Paint paint);
     method public void drawOval(float left, float top, float right, float bottom, androidx.compose.ui.graphics.Paint paint);
@@ -629,7 +629,7 @@
   }
 
   @androidx.compose.Immutable public interface Shape {
-    method public androidx.compose.ui.graphics.Outline createOutline-6PvjmT0(long size, androidx.ui.unit.Density density);
+    method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
   public final class SolidColor extends androidx.compose.ui.graphics.Brush {
@@ -871,7 +871,7 @@
 
 package androidx.compose.ui.graphics.drawscope {
 
-  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.ui.unit.Density {
+  @androidx.compose.ui.graphics.drawscope.DrawScopeMarker public abstract class DrawScope implements androidx.compose.ui.unit.Density {
     ctor public DrawScope();
     method protected final void draw-7QIdRrY(androidx.compose.ui.graphics.Canvas canvas, long size, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> block);
     method public final void drawArc-BcZ8TnY(long color, float startAngle, float sweepAngle, boolean useCenter, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -879,7 +879,7 @@
     method public final void drawCircle(androidx.compose.ui.graphics.Brush brush, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawCircle-NGaRamM(long color, float radius = size.minDimension / 2.0, androidx.compose.ui.geometry.Offset center = this.center, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
-    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
+    method public final void drawImage(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize srcSize = IntSize(image.width, image.height), androidx.compose.ui.unit.IntOffset dstOffset = IntOffset.Origin, androidx.compose.ui.unit.IntSize dstSize = srcSize, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawLine-1-s4MmQ(long color, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, float strokeWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap cap = Stroke.DefaultCap, android.graphics.PathEffect? pathEffect = null, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawOval-0a6MmAQ(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
@@ -893,11 +893,11 @@
     method public final void drawRoundRect-S2ipBsc(long color, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final void drawRoundRect-jmXbwic(androidx.compose.ui.graphics.Brush brush, androidx.compose.ui.geometry.Offset topLeft = Offset.Zero, long size = this.size - topLeft, long radius = Radius.Zero, @FloatRange(from=0.0, to=1.0) float alpha = 1.0f, androidx.compose.ui.graphics.drawscope.DrawStyle style = Fill, androidx.compose.ui.graphics.ColorFilter? colorFilter = null, androidx.compose.ui.graphics.BlendMode blendMode = DefaultBlendMode);
     method public final androidx.compose.ui.geometry.Offset getCenter();
-    method public abstract androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public abstract androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public final long getSize();
     method @kotlin.PublishedApi internal final void setSize-uvyYCjk(long size);
     property public final androidx.compose.ui.geometry.Offset center;
-    property public abstract androidx.ui.core.LayoutDirection layoutDirection;
+    property public abstract androidx.compose.ui.unit.LayoutDirection layoutDirection;
     property public final long size;
     field public static final androidx.compose.ui.graphics.drawscope.DrawScope.Companion Companion;
     field @kotlin.PublishedApi internal androidx.compose.ui.graphics.Canvas canvas;
@@ -991,8 +991,8 @@
   }
 
   public final class ImagePainter extends androidx.compose.ui.graphics.painter.Painter {
-    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
-    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.ui.unit.IntOffset srcOffset, androidx.ui.unit.IntSize srcSize);
+    ctor public ImagePainter(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
+    method public androidx.compose.ui.graphics.painter.ImagePainter copy(androidx.compose.ui.graphics.ImageAsset image, androidx.compose.ui.unit.IntOffset srcOffset, androidx.compose.ui.unit.IntSize srcSize);
     method public long getIntrinsicSize();
     method protected void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
     property public long intrinsicSize;
@@ -1002,7 +1002,7 @@
     ctor public Painter();
     method protected boolean applyAlpha(float alpha);
     method protected boolean applyColorFilter(androidx.compose.ui.graphics.ColorFilter? colorFilter);
-    method protected boolean applyLayoutDirection(androidx.ui.core.LayoutDirection layoutDirection);
+    method protected boolean applyLayoutDirection(androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public final void draw-ty3CEPU(androidx.compose.ui.graphics.drawscope.DrawScope, long size, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
     method public abstract long getIntrinsicSize();
     method protected abstract void onDraw(androidx.compose.ui.graphics.drawscope.DrawScope);
diff --git a/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/DrawScopeSample.kt b/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/DrawScopeSample.kt
index a3932d2..257dae6 100644
--- a/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/DrawScopeSample.kt
+++ b/ui/ui-graphics/samples/src/main/java/androidx/compose/ui/graphics/samples/DrawScopeSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.ui.graphics.drawscope.rotate
 import androidx.compose.ui.graphics.drawscope.withTransform
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Sample showing how to use CanvasScope to issue drawing commands into
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt
index 64d80eb..b861284 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/RectangleShapeTest.kt
@@ -19,7 +19,7 @@
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.geometry.toRect
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/TestDrawScope.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/TestDrawScope.kt
index 312e81f..7c68803 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/TestDrawScope.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/drawscope/TestDrawScope.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics.drawscope
 
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.ColorFilter
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/ImagePainterTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/ImagePainterTest.kt
index 71093c2..4a04978 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/ImagePainterTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/ImagePainterTest.kt
@@ -28,8 +28,8 @@
 import androidx.compose.ui.graphics.compositeOver
 import androidx.compose.ui.graphics.drawscope.drawPainter
 import androidx.compose.ui.graphics.toPixelMap
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.fail
diff --git a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt
index 86f11ad..ea58fcb 100644
--- a/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt
+++ b/ui/ui-graphics/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/painter/PainterTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.graphics.painter
 
 import androidx.test.filters.SmallTest
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.BlendMode
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.kt
index 9350b15..5ec1948 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidCanvas.kt
@@ -22,8 +22,8 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.vectormath.Matrix4
 import androidx.compose.ui.graphics.vectormath.isIdentity
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.fastForEach
 
 actual typealias NativeCanvas = android.graphics.Canvas
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt
index c4958a7..6bf4303 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Canvas.kt
@@ -20,8 +20,8 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.vectormath.Matrix4
 import androidx.compose.ui.graphics.vectormath.degrees
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 
 /**
  * Create a new Canvas instance that targets its drawing commands
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/RectangleShape.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/RectangleShape.kt
index 553a940..8861c63 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/RectangleShape.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/RectangleShape.kt
@@ -19,7 +19,7 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.geometry.toRect
 import androidx.compose.Stable
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * A shape describing the rectangle.
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shape.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shape.kt
index 45c5571..f7f77ea4 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shape.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shape.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.ui.geometry.Size
 import androidx.compose.Immutable
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Defines a generic shape.
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
index 327a3f1..de8a055 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/drawscope/DrawScope.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics.drawscope
 
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Radius
 import androidx.compose.ui.geometry.Size
@@ -36,9 +36,9 @@
 import androidx.compose.ui.graphics.StrokeJoin
 import androidx.compose.ui.graphics.vectormath.Matrix4
 import androidx.compose.ui.graphics.vectormath.degrees
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.annotation.FloatRange
 
 /**
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/ImagePainter.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/ImagePainter.kt
index 54c8cf2..c398194 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/ImagePainter.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/ImagePainter.kt
@@ -20,9 +20,9 @@
 import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.graphics.ImageAsset
 import androidx.compose.ui.graphics.drawscope.DrawScope
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.toSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.toSize
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/Painter.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/Painter.kt
index 0281c0a..bcca043 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/Painter.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/painter/Painter.kt
@@ -15,7 +15,7 @@
  */
 package androidx.compose.ui.graphics.painter
 
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.ColorFilter
diff --git a/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt b/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt
index ac52b36..d610681 100644
--- a/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt
+++ b/ui/ui-internal-lint-checks/src/main/java/androidx/ui/lint/PackageNameMigrationDetector.kt
@@ -72,7 +72,8 @@
             "androidx.ui.input" to "androidx.compose.ui.text.input",
             "androidx.ui.intl" to "androidx.compose.ui.text.intl",
             "androidx.ui.geometry" to "androidx.compose.ui.geometry",
-            "androidx.ui.graphics" to "androidx.compose.ui.graphics"
+            "androidx.ui.graphics" to "androidx.compose.ui.graphics",
+            "androidx.ui.unit" to "androidx.compose.ui.unit"
         )
 
         val ISSUE = Issue.create(
diff --git a/ui/ui-layout/api/0.1.0-dev16.txt b/ui/ui-layout/api/0.1.0-dev16.txt
index 25a4a5a..6fb5e4d 100644
--- a/ui/ui-layout/api/0.1.0-dev16.txt
+++ b/ui/ui-layout/api/0.1.0-dev16.txt
@@ -6,38 +6,38 @@
   }
 
   public static final class AbsoluteArrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Center INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Left implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Left INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Right implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Right INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceAround INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceBetween INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceEvenly INSTANCE;
   }
 
   public final class AlignmentLineKt {
-    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-QVeNkNc(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-J8n-V1w(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
+    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-Dl0LqP8(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-ULCRNhA(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
   }
 
   @androidx.compose.Immutable public final class Arrangement {
@@ -50,40 +50,40 @@
   }
 
   public static final class Arrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.Center INSTANCE;
   }
 
   public static final class Arrangement.End implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.End INSTANCE;
   }
 
   public static interface Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public static final class Arrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceAround INSTANCE;
   }
 
   public static final class Arrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceBetween INSTANCE;
   }
 
   public static final class Arrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceEvenly INSTANCE;
   }
 
   public static final class Arrangement.Start implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.Start INSTANCE;
   }
 
@@ -138,9 +138,9 @@
     method public androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable getStart();
     method public androidx.compose.foundation.layout.ConstrainScope.HorizontalAnchorable getTop();
     method public androidx.compose.foundation.layout.Dimension getWidth();
-    method public void linkTo-G1ipIQs(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-TkcoPiE(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-xxHMemQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-6izaRyI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-KSLczBc(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
+    method public void linkTo-tOGOrBo(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
     method public void setHeight(androidx.compose.foundation.layout.Dimension value);
     method public void setWidth(androidx.compose.foundation.layout.Dimension value);
     property public final androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable absoluteLeft;
@@ -156,15 +156,15 @@
   }
 
   public final class ConstrainScope.BaselineAnchorable {
-    method public void linkTo-oVJf39w(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
+    method public void linkTo-CqewBRU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.HorizontalAnchorable {
-    method public void linkTo-9lY5dKQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-TilihPk(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.VerticalAnchorable {
-    method public void linkTo-EGV1AEI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-n6KZxjU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainedLayoutReference {
@@ -189,25 +189,25 @@
   public abstract class ConstraintLayoutBaseScope {
     ctor public ConstraintLayoutBaseScope();
     method public final void applyTo(androidx.compose.foundation.layout.State state);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-0680j_4(float offset);
     method public final void createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final void createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
     method protected final java.util.List<kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.State,kotlin.Unit>> getTasks();
     method public final void reset();
@@ -231,10 +231,10 @@
     method @androidx.compose.Composable public static void ConstraintLayout(androidx.compose.foundation.layout.ConstraintSet constraintSet, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @Deprecated public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetBuilderScope,kotlin.Unit> description);
     method public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet2(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetScope,kotlin.Unit> description);
-    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-vg8ks8g(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atMost-GXOViVg(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-wkvWzeM(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atMost-abS_yDw(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
     method public static androidx.compose.foundation.layout.Dimension.MaxCoercible getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
     method public static androidx.compose.foundation.layout.Dimension getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.MinCoercible);
     method public static androidx.compose.foundation.layout.Dimension.MinCoercible getAtMostWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
@@ -273,13 +273,13 @@
   @Deprecated public final class ConstraintSetBuilderScope {
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.BarrierAnchor createBottomBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalChain createHorizontalChain(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ConstraintSetBuilderScope.ChainStyle chainStyle = ChainStyle.Spread);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createLeftBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createRightBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
@@ -293,14 +293,14 @@
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getSpread();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible getWrap();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getWrapFixed();
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-FDSvgxs(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-_Goc9uA(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-k5LfrrM(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-DMYS00c(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension percent(float percent);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference tag(Object tag);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-ipo6vVg(float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-ipo6vVg(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-0680j_4(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible minWrap;
@@ -386,7 +386,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -396,7 +396,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -423,7 +423,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -433,7 +433,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -483,8 +483,8 @@
     method public androidx.compose.foundation.layout.Dimension.Coercible getPreferredWrapContent();
     method public androidx.compose.foundation.layout.Dimension getWrapContent();
     method public androidx.compose.foundation.layout.Dimension percent(float percent);
-    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-ipo6vVg(float dp);
-    method public androidx.compose.foundation.layout.Dimension value-ipo6vVg(float dp);
+    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-0680j_4(float dp);
+    method public androidx.compose.foundation.layout.Dimension value-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.Dimension fillToConstraints;
     property public final androidx.compose.foundation.layout.Dimension.Coercible preferredWrapContent;
     property public final androidx.compose.foundation.layout.Dimension wrapContent;
@@ -501,7 +501,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-rIHlIKc(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
@@ -510,14 +510,14 @@
   }
 
   public static final class DpConstraints.Companion {
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-98Cn76g(float width, float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-ipo6vVg(float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-ipo6vVg(float width);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(androidx.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.ui.unit.Density, androidx.ui.core.Constraints constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
     method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints enforce(androidx.compose.foundation.layout.DpConstraints, androidx.compose.foundation.layout.DpConstraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getHasBoundedWidth(androidx.compose.foundation.layout.DpConstraints);
@@ -525,7 +525,7 @@
     method public static boolean getHasFixedWidth(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getSatisfiable(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean isZero(androidx.compose.foundation.layout.DpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-H8zAE6E(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
   }
 
   @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayout {
@@ -540,8 +540,8 @@
   }
 
   public final class FlowKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public final class InnerPadding {
@@ -549,7 +549,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-rIHlIKc(float start, float top, float end, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
     method public float getBottom();
     method public float getEnd();
     method public float getStart();
@@ -582,42 +582,42 @@
   }
 
   public final class LayoutOffsetKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-qJOR85M(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-K6IzfrQ(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
     method public static androidx.ui.core.Modifier offsetPx(androidx.ui.core.Modifier, androidx.compose.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-AwkAAmk(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-2kLEG1s(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
     method public static androidx.ui.core.Modifier padding(androidx.ui.core.Modifier, androidx.compose.foundation.layout.InnerPadding padding);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-AwkAAmk(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-H3qe284(androidx.ui.core.Modifier, float all);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-qJOR85M(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-2kLEG1s(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-Zgi1SAs(androidx.ui.core.Modifier, float all);
   }
 
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
   public final class LayoutSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
@@ -671,16 +671,16 @@
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
-    ctor public State(androidx.ui.unit.Density density);
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.core.Constraints getRootIncomingConstraints();
-    method public void setLayoutDirection(androidx.ui.core.LayoutDirection p);
-    method public void setRootIncomingConstraints(androidx.ui.core.Constraints p);
-    property public final androidx.ui.core.LayoutDirection layoutDirection;
-    property public final androidx.ui.core.Constraints rootIncomingConstraints;
-    field public androidx.ui.core.LayoutDirection layoutDirection;
-    field public androidx.ui.core.Constraints rootIncomingConstraints;
+    ctor public State(androidx.compose.ui.unit.Density density);
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getRootIncomingConstraints();
+    method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection p);
+    method public void setRootIncomingConstraints(androidx.compose.ui.unit.Constraints p);
+    property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    property public final androidx.compose.ui.unit.Constraints rootIncomingConstraints;
+    field public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    field public androidx.compose.ui.unit.Constraints rootIncomingConstraints;
   }
 
 }
diff --git a/ui/ui-layout/api/api_lint.ignore b/ui/ui-layout/api/api_lint.ignore
index b06817a..4b72fc5 100644
--- a/ui/ui-layout/api/api_lint.ignore
+++ b/ui/ui-layout/api/api_lint.ignore
@@ -1,17 +1,17 @@
 // Baseline format: 1.0
-ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
+ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
-ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
+ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
-ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
+ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
-ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
+ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
 ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference[], androidx.compose.foundation.layout.ChainStyle) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
-ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
+ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
-ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
+ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference[], float) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
 ArrayReturn: androidx.compose.foundation.layout.ConstraintLayoutBaseScope#createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference[], androidx.compose.foundation.layout.ChainStyle) parameter #0:
     Method parameter should be Collection<ConstrainedLayoutReference> (or subclass) instead of raw array; was `androidx.compose.foundation.layout.ConstrainedLayoutReference[]`
diff --git a/ui/ui-layout/api/current.txt b/ui/ui-layout/api/current.txt
index 25a4a5a..6fb5e4d 100644
--- a/ui/ui-layout/api/current.txt
+++ b/ui/ui-layout/api/current.txt
@@ -6,38 +6,38 @@
   }
 
   public static final class AbsoluteArrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Center INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Left implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Left INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Right implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Right INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceAround INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceBetween INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceEvenly INSTANCE;
   }
 
   public final class AlignmentLineKt {
-    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-QVeNkNc(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-J8n-V1w(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
+    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-Dl0LqP8(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-ULCRNhA(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
   }
 
   @androidx.compose.Immutable public final class Arrangement {
@@ -50,40 +50,40 @@
   }
 
   public static final class Arrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.Center INSTANCE;
   }
 
   public static final class Arrangement.End implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.End INSTANCE;
   }
 
   public static interface Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public static final class Arrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceAround INSTANCE;
   }
 
   public static final class Arrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceBetween INSTANCE;
   }
 
   public static final class Arrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceEvenly INSTANCE;
   }
 
   public static final class Arrangement.Start implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.Start INSTANCE;
   }
 
@@ -138,9 +138,9 @@
     method public androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable getStart();
     method public androidx.compose.foundation.layout.ConstrainScope.HorizontalAnchorable getTop();
     method public androidx.compose.foundation.layout.Dimension getWidth();
-    method public void linkTo-G1ipIQs(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-TkcoPiE(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-xxHMemQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-6izaRyI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-KSLczBc(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
+    method public void linkTo-tOGOrBo(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
     method public void setHeight(androidx.compose.foundation.layout.Dimension value);
     method public void setWidth(androidx.compose.foundation.layout.Dimension value);
     property public final androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable absoluteLeft;
@@ -156,15 +156,15 @@
   }
 
   public final class ConstrainScope.BaselineAnchorable {
-    method public void linkTo-oVJf39w(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
+    method public void linkTo-CqewBRU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.HorizontalAnchorable {
-    method public void linkTo-9lY5dKQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-TilihPk(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.VerticalAnchorable {
-    method public void linkTo-EGV1AEI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-n6KZxjU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainedLayoutReference {
@@ -189,25 +189,25 @@
   public abstract class ConstraintLayoutBaseScope {
     ctor public ConstraintLayoutBaseScope();
     method public final void applyTo(androidx.compose.foundation.layout.State state);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-0680j_4(float offset);
     method public final void createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final void createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
     method protected final java.util.List<kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.State,kotlin.Unit>> getTasks();
     method public final void reset();
@@ -231,10 +231,10 @@
     method @androidx.compose.Composable public static void ConstraintLayout(androidx.compose.foundation.layout.ConstraintSet constraintSet, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @Deprecated public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetBuilderScope,kotlin.Unit> description);
     method public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet2(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetScope,kotlin.Unit> description);
-    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-vg8ks8g(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atMost-GXOViVg(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-wkvWzeM(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atMost-abS_yDw(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
     method public static androidx.compose.foundation.layout.Dimension.MaxCoercible getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
     method public static androidx.compose.foundation.layout.Dimension getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.MinCoercible);
     method public static androidx.compose.foundation.layout.Dimension.MinCoercible getAtMostWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
@@ -273,13 +273,13 @@
   @Deprecated public final class ConstraintSetBuilderScope {
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.BarrierAnchor createBottomBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalChain createHorizontalChain(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ConstraintSetBuilderScope.ChainStyle chainStyle = ChainStyle.Spread);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createLeftBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createRightBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
@@ -293,14 +293,14 @@
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getSpread();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible getWrap();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getWrapFixed();
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-FDSvgxs(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-_Goc9uA(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-k5LfrrM(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-DMYS00c(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension percent(float percent);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference tag(Object tag);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-ipo6vVg(float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-ipo6vVg(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-0680j_4(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible minWrap;
@@ -386,7 +386,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -396,7 +396,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -423,7 +423,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -433,7 +433,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -483,8 +483,8 @@
     method public androidx.compose.foundation.layout.Dimension.Coercible getPreferredWrapContent();
     method public androidx.compose.foundation.layout.Dimension getWrapContent();
     method public androidx.compose.foundation.layout.Dimension percent(float percent);
-    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-ipo6vVg(float dp);
-    method public androidx.compose.foundation.layout.Dimension value-ipo6vVg(float dp);
+    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-0680j_4(float dp);
+    method public androidx.compose.foundation.layout.Dimension value-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.Dimension fillToConstraints;
     property public final androidx.compose.foundation.layout.Dimension.Coercible preferredWrapContent;
     property public final androidx.compose.foundation.layout.Dimension wrapContent;
@@ -501,7 +501,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-rIHlIKc(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
@@ -510,14 +510,14 @@
   }
 
   public static final class DpConstraints.Companion {
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-98Cn76g(float width, float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-ipo6vVg(float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-ipo6vVg(float width);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(androidx.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.ui.unit.Density, androidx.ui.core.Constraints constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
     method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints enforce(androidx.compose.foundation.layout.DpConstraints, androidx.compose.foundation.layout.DpConstraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getHasBoundedWidth(androidx.compose.foundation.layout.DpConstraints);
@@ -525,7 +525,7 @@
     method public static boolean getHasFixedWidth(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getSatisfiable(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean isZero(androidx.compose.foundation.layout.DpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-H8zAE6E(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
   }
 
   @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayout {
@@ -540,8 +540,8 @@
   }
 
   public final class FlowKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public final class InnerPadding {
@@ -549,7 +549,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-rIHlIKc(float start, float top, float end, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
     method public float getBottom();
     method public float getEnd();
     method public float getStart();
@@ -582,42 +582,42 @@
   }
 
   public final class LayoutOffsetKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-qJOR85M(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-K6IzfrQ(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
     method public static androidx.ui.core.Modifier offsetPx(androidx.ui.core.Modifier, androidx.compose.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-AwkAAmk(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-2kLEG1s(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
     method public static androidx.ui.core.Modifier padding(androidx.ui.core.Modifier, androidx.compose.foundation.layout.InnerPadding padding);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-AwkAAmk(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-H3qe284(androidx.ui.core.Modifier, float all);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-qJOR85M(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-2kLEG1s(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-Zgi1SAs(androidx.ui.core.Modifier, float all);
   }
 
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
   public final class LayoutSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
@@ -671,16 +671,16 @@
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
-    ctor public State(androidx.ui.unit.Density density);
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.core.Constraints getRootIncomingConstraints();
-    method public void setLayoutDirection(androidx.ui.core.LayoutDirection p);
-    method public void setRootIncomingConstraints(androidx.ui.core.Constraints p);
-    property public final androidx.ui.core.LayoutDirection layoutDirection;
-    property public final androidx.ui.core.Constraints rootIncomingConstraints;
-    field public androidx.ui.core.LayoutDirection layoutDirection;
-    field public androidx.ui.core.Constraints rootIncomingConstraints;
+    ctor public State(androidx.compose.ui.unit.Density density);
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getRootIncomingConstraints();
+    method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection p);
+    method public void setRootIncomingConstraints(androidx.compose.ui.unit.Constraints p);
+    property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    property public final androidx.compose.ui.unit.Constraints rootIncomingConstraints;
+    field public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    field public androidx.compose.ui.unit.Constraints rootIncomingConstraints;
   }
 
 }
diff --git a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev16.txt
index 25a4a5a..6fb5e4d 100644
--- a/ui/ui-layout/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-layout/api/public_plus_experimental_0.1.0-dev16.txt
@@ -6,38 +6,38 @@
   }
 
   public static final class AbsoluteArrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Center INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Left implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Left INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Right implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Right INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceAround INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceBetween INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceEvenly INSTANCE;
   }
 
   public final class AlignmentLineKt {
-    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-QVeNkNc(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-J8n-V1w(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
+    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-Dl0LqP8(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-ULCRNhA(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
   }
 
   @androidx.compose.Immutable public final class Arrangement {
@@ -50,40 +50,40 @@
   }
 
   public static final class Arrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.Center INSTANCE;
   }
 
   public static final class Arrangement.End implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.End INSTANCE;
   }
 
   public static interface Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public static final class Arrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceAround INSTANCE;
   }
 
   public static final class Arrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceBetween INSTANCE;
   }
 
   public static final class Arrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceEvenly INSTANCE;
   }
 
   public static final class Arrangement.Start implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.Start INSTANCE;
   }
 
@@ -138,9 +138,9 @@
     method public androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable getStart();
     method public androidx.compose.foundation.layout.ConstrainScope.HorizontalAnchorable getTop();
     method public androidx.compose.foundation.layout.Dimension getWidth();
-    method public void linkTo-G1ipIQs(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-TkcoPiE(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-xxHMemQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-6izaRyI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-KSLczBc(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
+    method public void linkTo-tOGOrBo(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
     method public void setHeight(androidx.compose.foundation.layout.Dimension value);
     method public void setWidth(androidx.compose.foundation.layout.Dimension value);
     property public final androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable absoluteLeft;
@@ -156,15 +156,15 @@
   }
 
   public final class ConstrainScope.BaselineAnchorable {
-    method public void linkTo-oVJf39w(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
+    method public void linkTo-CqewBRU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.HorizontalAnchorable {
-    method public void linkTo-9lY5dKQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-TilihPk(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.VerticalAnchorable {
-    method public void linkTo-EGV1AEI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-n6KZxjU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainedLayoutReference {
@@ -189,25 +189,25 @@
   public abstract class ConstraintLayoutBaseScope {
     ctor public ConstraintLayoutBaseScope();
     method public final void applyTo(androidx.compose.foundation.layout.State state);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-0680j_4(float offset);
     method public final void createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final void createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
     method protected final java.util.List<kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.State,kotlin.Unit>> getTasks();
     method public final void reset();
@@ -231,10 +231,10 @@
     method @androidx.compose.Composable public static void ConstraintLayout(androidx.compose.foundation.layout.ConstraintSet constraintSet, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @Deprecated public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetBuilderScope,kotlin.Unit> description);
     method public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet2(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetScope,kotlin.Unit> description);
-    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-vg8ks8g(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atMost-GXOViVg(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-wkvWzeM(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atMost-abS_yDw(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
     method public static androidx.compose.foundation.layout.Dimension.MaxCoercible getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
     method public static androidx.compose.foundation.layout.Dimension getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.MinCoercible);
     method public static androidx.compose.foundation.layout.Dimension.MinCoercible getAtMostWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
@@ -273,13 +273,13 @@
   @Deprecated public final class ConstraintSetBuilderScope {
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.BarrierAnchor createBottomBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalChain createHorizontalChain(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ConstraintSetBuilderScope.ChainStyle chainStyle = ChainStyle.Spread);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createLeftBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createRightBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
@@ -293,14 +293,14 @@
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getSpread();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible getWrap();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getWrapFixed();
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-FDSvgxs(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-_Goc9uA(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-k5LfrrM(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-DMYS00c(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension percent(float percent);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference tag(Object tag);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-ipo6vVg(float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-ipo6vVg(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-0680j_4(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible minWrap;
@@ -386,7 +386,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -396,7 +396,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -423,7 +423,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -433,7 +433,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -483,8 +483,8 @@
     method public androidx.compose.foundation.layout.Dimension.Coercible getPreferredWrapContent();
     method public androidx.compose.foundation.layout.Dimension getWrapContent();
     method public androidx.compose.foundation.layout.Dimension percent(float percent);
-    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-ipo6vVg(float dp);
-    method public androidx.compose.foundation.layout.Dimension value-ipo6vVg(float dp);
+    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-0680j_4(float dp);
+    method public androidx.compose.foundation.layout.Dimension value-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.Dimension fillToConstraints;
     property public final androidx.compose.foundation.layout.Dimension.Coercible preferredWrapContent;
     property public final androidx.compose.foundation.layout.Dimension wrapContent;
@@ -501,7 +501,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-rIHlIKc(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
@@ -510,14 +510,14 @@
   }
 
   public static final class DpConstraints.Companion {
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-98Cn76g(float width, float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-ipo6vVg(float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-ipo6vVg(float width);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(androidx.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.ui.unit.Density, androidx.ui.core.Constraints constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
     method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints enforce(androidx.compose.foundation.layout.DpConstraints, androidx.compose.foundation.layout.DpConstraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getHasBoundedWidth(androidx.compose.foundation.layout.DpConstraints);
@@ -525,7 +525,7 @@
     method public static boolean getHasFixedWidth(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getSatisfiable(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean isZero(androidx.compose.foundation.layout.DpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-H8zAE6E(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
   }
 
   @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayout {
@@ -540,8 +540,8 @@
   }
 
   public final class FlowKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public final class InnerPadding {
@@ -549,7 +549,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-rIHlIKc(float start, float top, float end, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
     method public float getBottom();
     method public float getEnd();
     method public float getStart();
@@ -582,42 +582,42 @@
   }
 
   public final class LayoutOffsetKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-qJOR85M(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-K6IzfrQ(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
     method public static androidx.ui.core.Modifier offsetPx(androidx.ui.core.Modifier, androidx.compose.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-AwkAAmk(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-2kLEG1s(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
     method public static androidx.ui.core.Modifier padding(androidx.ui.core.Modifier, androidx.compose.foundation.layout.InnerPadding padding);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-AwkAAmk(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-H3qe284(androidx.ui.core.Modifier, float all);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-qJOR85M(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-2kLEG1s(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-Zgi1SAs(androidx.ui.core.Modifier, float all);
   }
 
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
   public final class LayoutSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
@@ -671,16 +671,16 @@
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
-    ctor public State(androidx.ui.unit.Density density);
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.core.Constraints getRootIncomingConstraints();
-    method public void setLayoutDirection(androidx.ui.core.LayoutDirection p);
-    method public void setRootIncomingConstraints(androidx.ui.core.Constraints p);
-    property public final androidx.ui.core.LayoutDirection layoutDirection;
-    property public final androidx.ui.core.Constraints rootIncomingConstraints;
-    field public androidx.ui.core.LayoutDirection layoutDirection;
-    field public androidx.ui.core.Constraints rootIncomingConstraints;
+    ctor public State(androidx.compose.ui.unit.Density density);
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getRootIncomingConstraints();
+    method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection p);
+    method public void setRootIncomingConstraints(androidx.compose.ui.unit.Constraints p);
+    property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    property public final androidx.compose.ui.unit.Constraints rootIncomingConstraints;
+    field public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    field public androidx.compose.ui.unit.Constraints rootIncomingConstraints;
   }
 
 }
diff --git a/ui/ui-layout/api/public_plus_experimental_current.txt b/ui/ui-layout/api/public_plus_experimental_current.txt
index 25a4a5a..6fb5e4d 100644
--- a/ui/ui-layout/api/public_plus_experimental_current.txt
+++ b/ui/ui-layout/api/public_plus_experimental_current.txt
@@ -6,38 +6,38 @@
   }
 
   public static final class AbsoluteArrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Center INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Left implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Left INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Right implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Right INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceAround INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceBetween INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceEvenly INSTANCE;
   }
 
   public final class AlignmentLineKt {
-    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-QVeNkNc(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-J8n-V1w(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
+    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-Dl0LqP8(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-ULCRNhA(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
   }
 
   @androidx.compose.Immutable public final class Arrangement {
@@ -50,40 +50,40 @@
   }
 
   public static final class Arrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.Center INSTANCE;
   }
 
   public static final class Arrangement.End implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.End INSTANCE;
   }
 
   public static interface Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public static final class Arrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceAround INSTANCE;
   }
 
   public static final class Arrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceBetween INSTANCE;
   }
 
   public static final class Arrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceEvenly INSTANCE;
   }
 
   public static final class Arrangement.Start implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.Start INSTANCE;
   }
 
@@ -138,9 +138,9 @@
     method public androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable getStart();
     method public androidx.compose.foundation.layout.ConstrainScope.HorizontalAnchorable getTop();
     method public androidx.compose.foundation.layout.Dimension getWidth();
-    method public void linkTo-G1ipIQs(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-TkcoPiE(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-xxHMemQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-6izaRyI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-KSLczBc(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
+    method public void linkTo-tOGOrBo(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
     method public void setHeight(androidx.compose.foundation.layout.Dimension value);
     method public void setWidth(androidx.compose.foundation.layout.Dimension value);
     property public final androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable absoluteLeft;
@@ -156,15 +156,15 @@
   }
 
   public final class ConstrainScope.BaselineAnchorable {
-    method public void linkTo-oVJf39w(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
+    method public void linkTo-CqewBRU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.HorizontalAnchorable {
-    method public void linkTo-9lY5dKQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-TilihPk(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.VerticalAnchorable {
-    method public void linkTo-EGV1AEI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-n6KZxjU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainedLayoutReference {
@@ -189,25 +189,25 @@
   public abstract class ConstraintLayoutBaseScope {
     ctor public ConstraintLayoutBaseScope();
     method public final void applyTo(androidx.compose.foundation.layout.State state);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-0680j_4(float offset);
     method public final void createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final void createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
     method protected final java.util.List<kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.State,kotlin.Unit>> getTasks();
     method public final void reset();
@@ -231,10 +231,10 @@
     method @androidx.compose.Composable public static void ConstraintLayout(androidx.compose.foundation.layout.ConstraintSet constraintSet, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @Deprecated public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetBuilderScope,kotlin.Unit> description);
     method public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet2(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetScope,kotlin.Unit> description);
-    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-vg8ks8g(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atMost-GXOViVg(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-wkvWzeM(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atMost-abS_yDw(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
     method public static androidx.compose.foundation.layout.Dimension.MaxCoercible getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
     method public static androidx.compose.foundation.layout.Dimension getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.MinCoercible);
     method public static androidx.compose.foundation.layout.Dimension.MinCoercible getAtMostWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
@@ -273,13 +273,13 @@
   @Deprecated public final class ConstraintSetBuilderScope {
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.BarrierAnchor createBottomBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalChain createHorizontalChain(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ConstraintSetBuilderScope.ChainStyle chainStyle = ChainStyle.Spread);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createLeftBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createRightBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
@@ -293,14 +293,14 @@
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getSpread();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible getWrap();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getWrapFixed();
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-FDSvgxs(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-_Goc9uA(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-k5LfrrM(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-DMYS00c(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension percent(float percent);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference tag(Object tag);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-ipo6vVg(float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-ipo6vVg(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-0680j_4(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible minWrap;
@@ -386,7 +386,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -396,7 +396,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -423,7 +423,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -433,7 +433,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -483,8 +483,8 @@
     method public androidx.compose.foundation.layout.Dimension.Coercible getPreferredWrapContent();
     method public androidx.compose.foundation.layout.Dimension getWrapContent();
     method public androidx.compose.foundation.layout.Dimension percent(float percent);
-    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-ipo6vVg(float dp);
-    method public androidx.compose.foundation.layout.Dimension value-ipo6vVg(float dp);
+    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-0680j_4(float dp);
+    method public androidx.compose.foundation.layout.Dimension value-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.Dimension fillToConstraints;
     property public final androidx.compose.foundation.layout.Dimension.Coercible preferredWrapContent;
     property public final androidx.compose.foundation.layout.Dimension wrapContent;
@@ -501,7 +501,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-rIHlIKc(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
@@ -510,14 +510,14 @@
   }
 
   public static final class DpConstraints.Companion {
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-98Cn76g(float width, float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-ipo6vVg(float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-ipo6vVg(float width);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(androidx.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.ui.unit.Density, androidx.ui.core.Constraints constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
     method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints enforce(androidx.compose.foundation.layout.DpConstraints, androidx.compose.foundation.layout.DpConstraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getHasBoundedWidth(androidx.compose.foundation.layout.DpConstraints);
@@ -525,7 +525,7 @@
     method public static boolean getHasFixedWidth(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getSatisfiable(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean isZero(androidx.compose.foundation.layout.DpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-H8zAE6E(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
   }
 
   @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayout {
@@ -540,8 +540,8 @@
   }
 
   public final class FlowKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public final class InnerPadding {
@@ -549,7 +549,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-rIHlIKc(float start, float top, float end, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
     method public float getBottom();
     method public float getEnd();
     method public float getStart();
@@ -582,42 +582,42 @@
   }
 
   public final class LayoutOffsetKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-qJOR85M(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-K6IzfrQ(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
     method public static androidx.ui.core.Modifier offsetPx(androidx.ui.core.Modifier, androidx.compose.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-AwkAAmk(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-2kLEG1s(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
     method public static androidx.ui.core.Modifier padding(androidx.ui.core.Modifier, androidx.compose.foundation.layout.InnerPadding padding);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-AwkAAmk(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-H3qe284(androidx.ui.core.Modifier, float all);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-qJOR85M(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-2kLEG1s(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-Zgi1SAs(androidx.ui.core.Modifier, float all);
   }
 
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
   public final class LayoutSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
@@ -671,16 +671,16 @@
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
-    ctor public State(androidx.ui.unit.Density density);
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.core.Constraints getRootIncomingConstraints();
-    method public void setLayoutDirection(androidx.ui.core.LayoutDirection p);
-    method public void setRootIncomingConstraints(androidx.ui.core.Constraints p);
-    property public final androidx.ui.core.LayoutDirection layoutDirection;
-    property public final androidx.ui.core.Constraints rootIncomingConstraints;
-    field public androidx.ui.core.LayoutDirection layoutDirection;
-    field public androidx.ui.core.Constraints rootIncomingConstraints;
+    ctor public State(androidx.compose.ui.unit.Density density);
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getRootIncomingConstraints();
+    method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection p);
+    method public void setRootIncomingConstraints(androidx.compose.ui.unit.Constraints p);
+    property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    property public final androidx.compose.ui.unit.Constraints rootIncomingConstraints;
+    field public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    field public androidx.compose.ui.unit.Constraints rootIncomingConstraints;
   }
 
 }
diff --git a/ui/ui-layout/api/restricted_0.1.0-dev16.txt b/ui/ui-layout/api/restricted_0.1.0-dev16.txt
index ad86b6c..e083d0c 100644
--- a/ui/ui-layout/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-layout/api/restricted_0.1.0-dev16.txt
@@ -6,38 +6,38 @@
   }
 
   public static final class AbsoluteArrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Center INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Left implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Left INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Right implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Right INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceAround INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceBetween INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceEvenly INSTANCE;
   }
 
   public final class AlignmentLineKt {
-    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-QVeNkNc(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-J8n-V1w(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
+    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-Dl0LqP8(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-ULCRNhA(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
   }
 
   @androidx.compose.Immutable public final class Arrangement {
@@ -50,40 +50,40 @@
   }
 
   public static final class Arrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.Center INSTANCE;
   }
 
   public static final class Arrangement.End implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.End INSTANCE;
   }
 
   public static interface Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public static final class Arrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceAround INSTANCE;
   }
 
   public static final class Arrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceBetween INSTANCE;
   }
 
   public static final class Arrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceEvenly INSTANCE;
   }
 
   public static final class Arrangement.Start implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.Start INSTANCE;
   }
 
@@ -140,9 +140,9 @@
     method public androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable getStart();
     method public androidx.compose.foundation.layout.ConstrainScope.HorizontalAnchorable getTop();
     method public androidx.compose.foundation.layout.Dimension getWidth();
-    method public void linkTo-G1ipIQs(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-TkcoPiE(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-xxHMemQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-6izaRyI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-KSLczBc(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
+    method public void linkTo-tOGOrBo(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
     method public void setHeight(androidx.compose.foundation.layout.Dimension value);
     method public void setWidth(androidx.compose.foundation.layout.Dimension value);
     property public final androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable absoluteLeft;
@@ -158,15 +158,15 @@
   }
 
   public final class ConstrainScope.BaselineAnchorable {
-    method public void linkTo-oVJf39w(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
+    method public void linkTo-CqewBRU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.HorizontalAnchorable {
-    method public void linkTo-9lY5dKQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-TilihPk(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.VerticalAnchorable {
-    method public void linkTo-EGV1AEI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-n6KZxjU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainedLayoutReference {
@@ -191,25 +191,25 @@
   public abstract class ConstraintLayoutBaseScope {
     ctor public ConstraintLayoutBaseScope();
     method public final void applyTo(androidx.compose.foundation.layout.State state);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-0680j_4(float offset);
     method public final void createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final void createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
     method protected final java.util.List<kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.State,kotlin.Unit>> getTasks();
     method public final void reset();
@@ -233,10 +233,10 @@
     method @androidx.compose.Composable public static void ConstraintLayout(androidx.compose.foundation.layout.ConstraintSet constraintSet, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @Deprecated public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetBuilderScope,kotlin.Unit> description);
     method public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet2(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetScope,kotlin.Unit> description);
-    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-vg8ks8g(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atMost-GXOViVg(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-wkvWzeM(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atMost-abS_yDw(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
     method public static androidx.compose.foundation.layout.Dimension.MaxCoercible getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
     method public static androidx.compose.foundation.layout.Dimension getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.MinCoercible);
     method public static androidx.compose.foundation.layout.Dimension.MinCoercible getAtMostWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
@@ -275,13 +275,13 @@
   @Deprecated public final class ConstraintSetBuilderScope {
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.BarrierAnchor createBottomBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalChain createHorizontalChain(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ConstraintSetBuilderScope.ChainStyle chainStyle = ChainStyle.Spread);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createLeftBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createRightBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
@@ -295,14 +295,14 @@
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getSpread();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible getWrap();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getWrapFixed();
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-FDSvgxs(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-_Goc9uA(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-k5LfrrM(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-DMYS00c(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension percent(float percent);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference tag(Object tag);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-ipo6vVg(float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-ipo6vVg(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-0680j_4(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible minWrap;
@@ -388,7 +388,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -398,7 +398,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -425,7 +425,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -435,7 +435,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -485,8 +485,8 @@
     method public androidx.compose.foundation.layout.Dimension.Coercible getPreferredWrapContent();
     method public androidx.compose.foundation.layout.Dimension getWrapContent();
     method public androidx.compose.foundation.layout.Dimension percent(float percent);
-    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-ipo6vVg(float dp);
-    method public androidx.compose.foundation.layout.Dimension value-ipo6vVg(float dp);
+    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-0680j_4(float dp);
+    method public androidx.compose.foundation.layout.Dimension value-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.Dimension fillToConstraints;
     property public final androidx.compose.foundation.layout.Dimension.Coercible preferredWrapContent;
     property public final androidx.compose.foundation.layout.Dimension wrapContent;
@@ -503,7 +503,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-rIHlIKc(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
@@ -512,14 +512,14 @@
   }
 
   public static final class DpConstraints.Companion {
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-98Cn76g(float width, float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-ipo6vVg(float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-ipo6vVg(float width);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(androidx.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.ui.unit.Density, androidx.ui.core.Constraints constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
     method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints enforce(androidx.compose.foundation.layout.DpConstraints, androidx.compose.foundation.layout.DpConstraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getHasBoundedWidth(androidx.compose.foundation.layout.DpConstraints);
@@ -527,7 +527,7 @@
     method public static boolean getHasFixedWidth(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getSatisfiable(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean isZero(androidx.compose.foundation.layout.DpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-H8zAE6E(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
   }
 
   @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayout {
@@ -542,8 +542,8 @@
   }
 
   public final class FlowKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public final class InnerPadding {
@@ -551,7 +551,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-rIHlIKc(float start, float top, float end, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
     method public float getBottom();
     method public float getEnd();
     method public float getStart();
@@ -584,42 +584,42 @@
   }
 
   public final class LayoutOffsetKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-qJOR85M(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-K6IzfrQ(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
     method public static androidx.ui.core.Modifier offsetPx(androidx.ui.core.Modifier, androidx.compose.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-AwkAAmk(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-2kLEG1s(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
     method public static androidx.ui.core.Modifier padding(androidx.ui.core.Modifier, androidx.compose.foundation.layout.InnerPadding padding);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-AwkAAmk(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-H3qe284(androidx.ui.core.Modifier, float all);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-qJOR85M(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-2kLEG1s(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-Zgi1SAs(androidx.ui.core.Modifier, float all);
   }
 
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
   public final class LayoutSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
@@ -637,7 +637,7 @@
   }
 
   public final class RowColumnImplKt {
-    method @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowColumnMeasureBlocks(androidx.compose.foundation.layout.LayoutOrientation orientation, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.util.List<java.lang.Integer>,? super androidx.ui.core.LayoutDirection,? extends java.util.List<java.lang.Integer>> arrangement, androidx.compose.foundation.layout.SizeMode crossAxisSize, androidx.compose.foundation.layout.CrossAxisAlignment crossAxisAlignment);
+    method @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowColumnMeasureBlocks(androidx.compose.foundation.layout.LayoutOrientation orientation, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.util.List<java.lang.Integer>,? super androidx.compose.ui.unit.LayoutDirection,? extends java.util.List<java.lang.Integer>> arrangement, androidx.compose.foundation.layout.SizeMode crossAxisSize, androidx.compose.foundation.layout.CrossAxisAlignment crossAxisAlignment);
   }
 
   public final class RowKt {
@@ -676,16 +676,16 @@
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
-    ctor public State(androidx.ui.unit.Density density);
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.core.Constraints getRootIncomingConstraints();
-    method public void setLayoutDirection(androidx.ui.core.LayoutDirection p);
-    method public void setRootIncomingConstraints(androidx.ui.core.Constraints p);
-    property public final androidx.ui.core.LayoutDirection layoutDirection;
-    property public final androidx.ui.core.Constraints rootIncomingConstraints;
-    field public androidx.ui.core.LayoutDirection layoutDirection;
-    field public androidx.ui.core.Constraints rootIncomingConstraints;
+    ctor public State(androidx.compose.ui.unit.Density density);
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getRootIncomingConstraints();
+    method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection p);
+    method public void setRootIncomingConstraints(androidx.compose.ui.unit.Constraints p);
+    property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    property public final androidx.compose.ui.unit.Constraints rootIncomingConstraints;
+    field public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    field public androidx.compose.ui.unit.Constraints rootIncomingConstraints;
   }
 
 }
diff --git a/ui/ui-layout/api/restricted_current.txt b/ui/ui-layout/api/restricted_current.txt
index ad86b6c..e083d0c 100644
--- a/ui/ui-layout/api/restricted_current.txt
+++ b/ui/ui-layout/api/restricted_current.txt
@@ -6,38 +6,38 @@
   }
 
   public static final class AbsoluteArrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Center INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Left implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Left INSTANCE;
   }
 
   public static final class AbsoluteArrangement.Right implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.Right INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceAround INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceBetween INSTANCE;
   }
 
   public static final class AbsoluteArrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement.SpaceEvenly INSTANCE;
   }
 
   public final class AlignmentLineKt {
-    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-QVeNkNc(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-J8n-V1w(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
+    method @Deprecated @androidx.compose.Composable public static void AlignmentLineOffset-Dl0LqP8(androidx.ui.core.AlignmentLine alignmentLine, androidx.ui.core.Modifier modifier = Modifier, float before = 0.dp, float after = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier relativePaddingFrom-ULCRNhA(androidx.ui.core.Modifier, androidx.ui.core.AlignmentLine alignmentLine, float before = 0.dp, float after = 0.dp);
   }
 
   @androidx.compose.Immutable public final class Arrangement {
@@ -50,40 +50,40 @@
   }
 
   public static final class Arrangement.Center implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.Center INSTANCE;
   }
 
   public static final class Arrangement.End implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.End INSTANCE;
   }
 
   public static interface Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
   }
 
   public static final class Arrangement.SpaceAround implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceAround INSTANCE;
   }
 
   public static final class Arrangement.SpaceBetween implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceBetween INSTANCE;
   }
 
   public static final class Arrangement.SpaceEvenly implements androidx.compose.foundation.layout.Arrangement.Horizontal androidx.compose.foundation.layout.Arrangement.Vertical {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size);
     field public static final androidx.compose.foundation.layout.Arrangement.SpaceEvenly INSTANCE;
   }
 
   public static final class Arrangement.Start implements androidx.compose.foundation.layout.Arrangement.Horizontal {
-    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.ui.core.LayoutDirection layoutDirection);
+    method public java.util.List<java.lang.Integer> arrange(int totalSize, java.util.List<java.lang.Integer> size, androidx.compose.ui.unit.LayoutDirection layoutDirection);
     field public static final androidx.compose.foundation.layout.Arrangement.Start INSTANCE;
   }
 
@@ -140,9 +140,9 @@
     method public androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable getStart();
     method public androidx.compose.foundation.layout.ConstrainScope.HorizontalAnchorable getTop();
     method public androidx.compose.foundation.layout.Dimension getWidth();
-    method public void linkTo-G1ipIQs(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-TkcoPiE(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
-    method public void linkTo-xxHMemQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-6izaRyI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float startMargin = 0.dp, float topMargin = 0.dp, float endMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float horizontalBias = 0.5f, @FloatRange(from=0.0, to=1.0) float verticalBias = 0.5f);
+    method public void linkTo-KSLczBc(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor top, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor bottom, float topMargin = 0.dp, float bottomMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
+    method public void linkTo-tOGOrBo(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor start, androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor end, float startMargin = 0.dp, float endMargin = 0.dp, @FloatRange(from=0.0, to=1.0) float bias = 0.5f);
     method public void setHeight(androidx.compose.foundation.layout.Dimension value);
     method public void setWidth(androidx.compose.foundation.layout.Dimension value);
     property public final androidx.compose.foundation.layout.ConstrainScope.VerticalAnchorable absoluteLeft;
@@ -158,15 +158,15 @@
   }
 
   public final class ConstrainScope.BaselineAnchorable {
-    method public void linkTo-oVJf39w(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
+    method public void linkTo-CqewBRU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.BaselineAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.HorizontalAnchorable {
-    method public void linkTo-9lY5dKQ(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-TilihPk(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainScope.VerticalAnchorable {
-    method public void linkTo-EGV1AEI(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
+    method public void linkTo-n6KZxjU(androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor anchor, float margin = 0.dp);
   }
 
   public final class ConstrainedLayoutReference {
@@ -191,25 +191,25 @@
   public abstract class ConstraintLayoutBaseScope {
     ctor public ConstraintLayoutBaseScope();
     method public final void applyTo(androidx.compose.foundation.layout.State state);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteLeftBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createAbsoluteRightBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createBottomBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createEndBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteLeft-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromAbsoluteRight-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromBottom-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromEnd-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createGuidelineFromStart-0680j_4(float offset);
     method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop(float fraction);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createGuidelineFromTop-0680j_4(float offset);
     method public final void createHorizontalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
-    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-AuEMxJ0(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.VerticalAnchor createStartBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
+    method public final androidx.compose.foundation.layout.ConstraintLayoutBaseScope.HorizontalAnchor createTopBarrier-GB4eHDc(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, float margin = 0.dp);
     method public final void createVerticalChain(androidx.compose.foundation.layout.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ChainStyle chainStyle = ChainStyle.Spread);
     method protected final java.util.List<kotlin.jvm.functions.Function1<androidx.compose.foundation.layout.State,kotlin.Unit>> getTasks();
     method public final void reset();
@@ -233,10 +233,10 @@
     method @androidx.compose.Composable public static void ConstraintLayout(androidx.compose.foundation.layout.ConstraintSet constraintSet, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> children);
     method @Deprecated public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetBuilderScope,kotlin.Unit> description);
     method public static androidx.compose.foundation.layout.ConstraintSet ConstraintSet2(kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintSetScope,kotlin.Unit> description);
-    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-vg8ks8g(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-FX2K-0s(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
-    method public static androidx.compose.foundation.layout.Dimension atMost-GXOViVg(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MaxCoercible atLeast-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atLeastWrapContent-wkvWzeM(androidx.compose.foundation.layout.Dimension.MinCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension atMost-abS_yDw(androidx.compose.foundation.layout.Dimension.MaxCoercible, float dp);
+    method public static androidx.compose.foundation.layout.Dimension.MinCoercible atMost-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
     method public static androidx.compose.foundation.layout.Dimension.MaxCoercible getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
     method public static androidx.compose.foundation.layout.Dimension getAtLeastWrapContent(androidx.compose.foundation.layout.Dimension.MinCoercible);
     method public static androidx.compose.foundation.layout.Dimension.MinCoercible getAtMostWrapContent(androidx.compose.foundation.layout.Dimension.Coercible);
@@ -275,13 +275,13 @@
   @Deprecated public final class ConstraintSetBuilderScope {
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.BarrierAnchor createBottomBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromBottom-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromLeft-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.GuidelineAnchor createGuidelineFromRight-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop(float percent);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-ipo6vVg(float offset);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalAnchor.GuidelineAnchor createGuidelineFromTop-0680j_4(float offset);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.HorizontalChain createHorizontalChain(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference![] elements, androidx.compose.foundation.layout.ConstraintSetBuilderScope.ChainStyle chainStyle = ChainStyle.Spread);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createLeftBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.VerticalAnchor.BarrierAnchor createRightBarrier(androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference... elements);
@@ -295,14 +295,14 @@
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getSpread();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible getWrap();
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension getWrapFixed();
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-FDSvgxs(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-SAszZ0E(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-_Goc9uA(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible max-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension max-k5LfrrM(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension min-DMYS00c(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible, float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible min-_bqzGEQ(androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible, float dp);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension percent(float percent);
     method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.ConstrainedLayoutReference tag(Object tag);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-ipo6vVg(float dp);
-    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-ipo6vVg(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.Coercible value-0680j_4(float dp);
+    method @Deprecated public androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension valueFixed-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MinCoercible maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension maxWrap;
     property public final androidx.compose.foundation.layout.ConstraintSetBuilderScope.Dimension.MaxCoercible minWrap;
@@ -388,7 +388,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -398,7 +398,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -425,7 +425,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
   }
 
@@ -435,7 +435,7 @@
     method @Deprecated public float getMargin();
     method @Deprecated public androidx.compose.foundation.layout.State getState$lintWithKotlin();
     method @Deprecated public Object getTag$lintWithKotlin();
-    method @Deprecated public void setMargin-ipo6vVg(float value);
+    method @Deprecated public void setMargin-0680j_4(float value);
     property public final float margin;
     property public Object tag;
   }
@@ -485,8 +485,8 @@
     method public androidx.compose.foundation.layout.Dimension.Coercible getPreferredWrapContent();
     method public androidx.compose.foundation.layout.Dimension getWrapContent();
     method public androidx.compose.foundation.layout.Dimension percent(float percent);
-    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-ipo6vVg(float dp);
-    method public androidx.compose.foundation.layout.Dimension value-ipo6vVg(float dp);
+    method public androidx.compose.foundation.layout.Dimension.Coercible preferredValue-0680j_4(float dp);
+    method public androidx.compose.foundation.layout.Dimension value-0680j_4(float dp);
     property public final androidx.compose.foundation.layout.Dimension fillToConstraints;
     property public final androidx.compose.foundation.layout.Dimension.Coercible preferredWrapContent;
     property public final androidx.compose.foundation.layout.Dimension wrapContent;
@@ -503,7 +503,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-rIHlIKc(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
     method public float getMaxHeight();
     method public float getMaxWidth();
     method public float getMinHeight();
@@ -512,14 +512,14 @@
   }
 
   public static final class DpConstraints.Companion {
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-98Cn76g(float width, float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-ipo6vVg(float height);
-    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-ipo6vVg(float width);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(androidx.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.ui.unit.Density, androidx.ui.core.Constraints constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
     method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints enforce(androidx.compose.foundation.layout.DpConstraints, androidx.compose.foundation.layout.DpConstraints otherConstraints);
     method public static boolean getHasBoundedHeight(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getHasBoundedWidth(androidx.compose.foundation.layout.DpConstraints);
@@ -527,7 +527,7 @@
     method public static boolean getHasFixedWidth(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean getSatisfiable(androidx.compose.foundation.layout.DpConstraints);
     method public static boolean isZero(androidx.compose.foundation.layout.DpConstraints);
-    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-H8zAE6E(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.compose.foundation.layout.DpConstraints offset-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
   }
 
   @kotlin.RequiresOptIn(message="The API of this layout is experimental and is likely to change in the future.") public @interface ExperimentalLayout {
@@ -542,8 +542,8 @@
   }
 
   public final class FlowKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-A2g23mI(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowColumn-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.Composable @androidx.compose.foundation.layout.ExperimentalLayout public static void FlowRow-4CIokMg(androidx.compose.foundation.layout.SizeMode mainAxisSize = androidx.compose.foundation.layout.SizeMode.Wrap, androidx.compose.foundation.layout.MainAxisAlignment mainAxisAlignment = androidx.compose.foundation.layout.MainAxisAlignment.Start, float mainAxisSpacing = 0.dp, androidx.compose.foundation.layout.FlowCrossAxisAlignment crossAxisAlignment = androidx.compose.foundation.layout.FlowCrossAxisAlignment.Start, float crossAxisSpacing = 0.dp, androidx.compose.foundation.layout.MainAxisAlignment lastLineMainAxisAlignment = mainAxisAlignment, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   @androidx.compose.Immutable public final class InnerPadding {
@@ -551,7 +551,7 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-rIHlIKc(float start, float top, float end, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
     method public float getBottom();
     method public float getEnd();
     method public float getStart();
@@ -584,42 +584,42 @@
   }
 
   public final class LayoutOffsetKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-qJOR85M(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier offset-K6IzfrQ(androidx.ui.core.Modifier, float x = 0.dp, float y = 0.dp);
     method public static androidx.ui.core.Modifier offsetPx(androidx.ui.core.Modifier, androidx.compose.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-AwkAAmk(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier absolutePadding-2kLEG1s(androidx.ui.core.Modifier, float left = 0.dp, float top = 0.dp, float right = 0.dp, float bottom = 0.dp);
     method public static androidx.ui.core.Modifier padding(androidx.ui.core.Modifier, androidx.compose.foundation.layout.InnerPadding padding);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-AwkAAmk(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-H3qe284(androidx.ui.core.Modifier, float all);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-qJOR85M(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-2kLEG1s(androidx.ui.core.Modifier, float start = 0.dp, float top = 0.dp, float end = 0.dp, float bottom = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier padding-Zgi1SAs(androidx.ui.core.Modifier, float all);
   }
 
   @kotlin.DslMarker public @interface LayoutScopeMarker {
   }
 
   public final class LayoutSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-H3qe284(androidx.ui.core.Modifier, float height);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-qJOR85M(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-H3qe284(androidx.ui.core.Modifier, float size);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-qJOR85M(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredSizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-AwkAAmk(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-H3qe284(androidx.ui.core.Modifier, float width);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-qJOR85M(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier sizeIn-2kLEG1s(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified, float maxWidth = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
     method @androidx.compose.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
@@ -637,7 +637,7 @@
   }
 
   public final class RowColumnImplKt {
-    method @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowColumnMeasureBlocks(androidx.compose.foundation.layout.LayoutOrientation orientation, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.util.List<java.lang.Integer>,? super androidx.ui.core.LayoutDirection,? extends java.util.List<java.lang.Integer>> arrangement, androidx.compose.foundation.layout.SizeMode crossAxisSize, androidx.compose.foundation.layout.CrossAxisAlignment crossAxisAlignment);
+    method @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowColumnMeasureBlocks(androidx.compose.foundation.layout.LayoutOrientation orientation, kotlin.jvm.functions.Function3<? super java.lang.Integer,? super java.util.List<java.lang.Integer>,? super androidx.compose.ui.unit.LayoutDirection,? extends java.util.List<java.lang.Integer>> arrangement, androidx.compose.foundation.layout.SizeMode crossAxisSize, androidx.compose.foundation.layout.CrossAxisAlignment crossAxisAlignment);
   }
 
   public final class RowKt {
@@ -676,16 +676,16 @@
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
-    ctor public State(androidx.ui.unit.Density density);
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
-    method public androidx.ui.core.Constraints getRootIncomingConstraints();
-    method public void setLayoutDirection(androidx.ui.core.LayoutDirection p);
-    method public void setRootIncomingConstraints(androidx.ui.core.Constraints p);
-    property public final androidx.ui.core.LayoutDirection layoutDirection;
-    property public final androidx.ui.core.Constraints rootIncomingConstraints;
-    field public androidx.ui.core.LayoutDirection layoutDirection;
-    field public androidx.ui.core.Constraints rootIncomingConstraints;
+    ctor public State(androidx.compose.ui.unit.Density density);
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.unit.Constraints getRootIncomingConstraints();
+    method public void setLayoutDirection(androidx.compose.ui.unit.LayoutDirection p);
+    method public void setRootIncomingConstraints(androidx.compose.ui.unit.Constraints p);
+    property public final androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    property public final androidx.compose.ui.unit.Constraints rootIncomingConstraints;
+    field public androidx.compose.ui.unit.LayoutDirection layoutDirection;
+    field public androidx.compose.ui.unit.Constraints rootIncomingConstraints;
   }
 
 }
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ComplexLayoutDemo.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ComplexLayoutDemo.kt
index a1401c7..7dacc13 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ComplexLayoutDemo.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ComplexLayoutDemo.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.rtl
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun ComplexLayoutDemo() {
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/RtlDemo.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/RtlDemo.kt
index 83e54ef..3a1aaa6 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/RtlDemo.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/RtlDemo.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.compose.foundation.Text
@@ -33,8 +33,8 @@
 import androidx.compose.foundation.layout.ltr
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.rtl
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.dp
 @Composable
 fun RtlDemo() {
     Column(verticalArrangement = Arrangement.SpaceEvenly) {
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/SimpleLayoutDemo.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/SimpleLayoutDemo.kt
index 26c7130..dfb3d86 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/SimpleLayoutDemo.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/SimpleLayoutDemo.kt
@@ -33,8 +33,8 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 
 @Composable
 fun SimpleLayoutDemo() {
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt
index 771bd31..16b9d7c 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/AspectRatioSample.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.aspectRatio
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt
index 251c479..cbad93cf 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ColumnSample.kt
@@ -29,8 +29,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.max
 import kotlin.math.min
 
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ConstraintLayoutSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ConstraintLayoutSample.kt
index c0519fd..10ad5c6 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ConstraintLayoutSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/ConstraintLayoutSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.foundation.layout.ConstraintSet2
 import androidx.compose.foundation.layout.Dimension
 import androidx.compose.foundation.layout.atMost
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/FlowSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/FlowSample.kt
index f4a50a4..5a96261 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/FlowSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/FlowSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.foundation.layout.FlowColumn
 import androidx.compose.foundation.layout.FlowRow
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 val sizes = listOf(
     50.dp, 50.dp, 50.dp, 30.dp, 40.dp, 110.dp, 100.dp, 40.dp, 30.dp,
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/IntrinsicSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/IntrinsicSample.kt
index 876cbf9..fc3be05 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/IntrinsicSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/IntrinsicSample.kt
@@ -33,7 +33,7 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutOffsetSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutOffsetSample.kt
index fb1de9c..b7237c8 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutOffsetSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutOffsetSample.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.layout.offset
 import androidx.compose.foundation.layout.offsetPx
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt
index 8f93e0f..f7e1aa0 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/LayoutPaddingSample.kt
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.layout.absolutePadding
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RelativePaddingFromSamples.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RelativePaddingFromSamples.kt
index f7770fe..fcb67ba 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RelativePaddingFromSamples.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RelativePaddingFromSamples.kt
@@ -22,7 +22,7 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.relativePaddingFrom
 import androidx.compose.foundation.text.FirstBaseline
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RowSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RowSample.kt
index d4e3f65..152f9d3 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RowSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/RowSample.kt
@@ -29,7 +29,7 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt
index eeaaada..dc9f2f6 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SizeModifierSample.kt
@@ -41,7 +41,7 @@
 import androidx.compose.foundation.layout.wrapContentHeight
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.foundation.layout.wrapContentWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt
index 82c8be3..3c536e7a 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/SpacerSample.kt
@@ -25,7 +25,7 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/StackSample.kt b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/StackSample.kt
index db5d401..b77d835 100644
--- a/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/StackSample.kt
+++ b/ui/ui-layout/samples/src/main/java/androidx/compose/foundation/layout/samples/StackSample.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
index c914b27..386a699 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/AlignmentLineTest.kt
@@ -26,8 +26,8 @@
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInRoot
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt
index 12cfddd..cbe2405 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ConstraintLayoutTest.kt
@@ -28,9 +28,9 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt
index 11d171f..41ae9bc 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/ContainerTest.kt
@@ -24,14 +24,14 @@
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInRoot
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt
index a98e394..b3fa0a2 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/FlowTest.kt
@@ -22,7 +22,7 @@
 import androidx.ui.core.Ref
 import androidx.ui.core.onPositioned
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntSize
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
index c13c2fc..4f1000d 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/IntrinsicTest.kt
@@ -23,13 +23,13 @@
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
 import androidx.ui.core.onChildPositioned
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt
index 1365639..fc8396a 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAlignTest.kt
@@ -19,17 +19,17 @@
 import androidx.compose.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
-import androidx.ui.core.enforce
+import androidx.compose.ui.unit.enforce
 import androidx.ui.core.onPositioned
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt
index 5b88089..439b6c38 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutAspectRatioTest.kt
@@ -18,13 +18,13 @@
 
 import androidx.compose.Composable
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutDirectionModifierTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutDirectionModifierTest.kt
index 00e2474..2ec890b 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutDirectionModifierTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutDirectionModifierTest.kt
@@ -21,7 +21,7 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.ConfigurationAmbient
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
 import androidx.ui.core.localeLayoutDirection
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutOffsetTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutOffsetTest.kt
index 14c88f0..86f4fd8 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutOffsetTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutOffsetTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Assume
 import org.junit.Before
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt
index 481bb20..5da9e79 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutPaddingTest.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
@@ -28,10 +28,10 @@
 import androidx.ui.core.onPositioned
 import androidx.ui.core.positionInRoot
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.toSize
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.toSize
 import org.junit.Assert
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt
index 2b66bf7..83061db 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutSizeTest.kt
@@ -20,7 +20,7 @@
 import androidx.compose.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
@@ -29,8 +29,8 @@
 import androidx.ui.core.onPositioned
 import androidx.compose.foundation.Box
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
index e79d5c3..25baf84 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/LayoutTest.kt
@@ -27,27 +27,27 @@
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
 import androidx.ui.core.AndroidOwner
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.Placeable
 import androidx.ui.core.Ref
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
-import androidx.ui.core.enforce
-import androidx.ui.core.hasFixedHeight
-import androidx.ui.core.hasFixedWidth
-import androidx.ui.core.offset
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
+import androidx.compose.ui.unit.enforce
+import androidx.compose.ui.unit.hasFixedHeight
+import androidx.compose.ui.unit.hasFixedWidth
+import androidx.compose.ui.unit.offset
 import androidx.ui.core.onPositioned
 import androidx.ui.core.setContent
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotNull
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt
index 9c4f5cf..1b0bc3c 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/OnPositionedTest.kt
@@ -32,9 +32,9 @@
 import androidx.ui.core.positionInParent
 import androidx.ui.core.positionInRoot
 import androidx.ui.core.setContent
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Assert
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
index b40636a..b43a20d 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/RowColumnTest.kt
@@ -20,7 +20,7 @@
 import androidx.compose.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.ui.core.HorizontalAlignmentLine
 import androidx.ui.core.Layout
@@ -32,9 +32,9 @@
 import androidx.ui.core.positionInRoot
 import androidx.ui.core.onPositioned
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotNull
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt
index b3a400b..01b140e 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/SpacerTest.kt
@@ -20,8 +20,8 @@
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
 import androidx.ui.core.onPositioned
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt
index 9d0e3ea..ded9845 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/StackTest.kt
@@ -19,14 +19,14 @@
 import androidx.compose.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
 import androidx.ui.core.onPositioned
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Test
diff --git a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt
index 802492b..0ee5172 100644
--- a/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt
+++ b/ui/ui-layout/src/androidAndroidTest/kotlin/androidx/compose/foundation/layout/TextLayoutDirectionModifierTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout
 
 import androidx.test.filters.SmallTest
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.AnnotatedString
diff --git a/ui/ui-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/ConstraintLayout.kt b/ui/ui-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/ConstraintLayout.kt
index 93bcad7..b9b92d9 100644
--- a/ui/ui-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/ConstraintLayout.kt
+++ b/ui/ui-layout/src/androidMain/kotlin/androidx/compose/foundation/layout/ConstraintLayout.kt
@@ -37,8 +37,8 @@
 import androidx.constraintlayout.core.widgets.Optimizer
 import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure
 import androidx.compose.Immutable
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
@@ -46,17 +46,17 @@
 import androidx.ui.core.MultiMeasureLayout
 import androidx.ui.core.ParentDataModifier
 import androidx.ui.core.Placeable
-import androidx.ui.core.hasFixedHeight
-import androidx.ui.core.hasFixedWidth
+import androidx.compose.ui.unit.hasFixedHeight
+import androidx.compose.ui.unit.hasFixedWidth
 import androidx.ui.core.id
 import androidx.compose.foundation.layout.ConstraintSetBuilderScope.Companion.baselineAnchorFunction
 import androidx.compose.foundation.layout.ConstraintSetBuilderScope.Companion.horizontalAnchorFunctions
 import androidx.compose.foundation.layout.ConstraintSetBuilderScope.Companion.verticalAnchorFunctions
 import androidx.compose.foundation.layout.ConstraintSetBuilderScope.Companion.verticalAnchorIndexToFunctionIndex
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.fastForEach
 
 /**
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt
index 7836805..dea6be1 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/AlignmentLine.kt
@@ -20,16 +20,16 @@
 import androidx.compose.Stable
 
 import androidx.ui.core.AlignmentLine
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.HorizontalAlignmentLine
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 /**
  * Note: This composable is on the deprecation path and will be soon replaced with a [Modifier].
  *
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/DpConstraints.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/DpConstraints.kt
index be13777..2563039 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/DpConstraints.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/DpConstraints.kt
@@ -18,13 +18,13 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.core.Constraints
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.coerceAtLeast
-import androidx.ui.unit.coerceIn
-import androidx.ui.unit.dp
-import androidx.ui.unit.isFinite
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.coerceAtLeast
+import androidx.compose.ui.unit.coerceIn
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.isFinite
 
 /**
  * Similar to [Constraints], but with constraint values expressed in [Dp].
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Flow.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Flow.kt
index e1f4117..4aa76e4 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Flow.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Flow.kt
@@ -18,12 +18,12 @@
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Placeable
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.fastForEachIndexed
 import kotlin.math.max
 
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt
index d19ba5a..5493ac5 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Intrinsic.kt
@@ -18,17 +18,17 @@
 
 import androidx.compose.Composable
 import androidx.compose.Stable
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
-import androidx.ui.core.enforce
-import androidx.ui.unit.IntOffset
+import androidx.compose.ui.unit.enforce
+import androidx.compose.ui.unit.IntOffset
 /**
  * Declare the preferred width of the content to be the same as the min or max intrinsic width of
  * the content. The incoming measurement [Constraints] may override this value, forcing the content
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutAspectRatio.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutAspectRatio.kt
index 858842f5..cebdcc7a 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutAspectRatio.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutAspectRatio.kt
@@ -17,16 +17,16 @@
 package androidx.compose.foundation.layout
 
 import androidx.compose.Stable
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
-import androidx.ui.core.satisfiedBy
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.satisfiedBy
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.annotation.FloatRange
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutDirections.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutDirections.kt
index 4a275ff..345257f 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutDirections.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutDirections.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutOffset.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutOffset.kt
index 2bdf3a1..cb8345e 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutOffset.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutOffset.kt
@@ -19,14 +19,14 @@
 import androidx.compose.Stable
 import androidx.compose.State
 import androidx.compose.mutableStateOf
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.roundToInt
 
 /**
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutPadding.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutPadding.kt
index a2791bd..bcff449 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutPadding.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutPadding.kt
@@ -18,17 +18,17 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
-import androidx.ui.core.offset
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
+import androidx.compose.ui.unit.offset
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Apply additional space along each edge of the content in [Dp]: [start], [top], [end] and
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutSize.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutSize.kt
index f67f65a..fff5f60 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutSize.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/LayoutSize.kt
@@ -18,21 +18,21 @@
 
 import androidx.compose.Stable
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
-import androidx.ui.core.constrainHeight
-import androidx.ui.core.constrainWidth
-import androidx.ui.core.enforce
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.constrainHeight
+import androidx.compose.ui.unit.constrainWidth
+import androidx.compose.ui.unit.enforce
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import kotlin.math.max
 
 /**
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/RowColumnImpl.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/RowColumnImpl.kt
index 7fe8e98..c06ed01 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/RowColumnImpl.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/RowColumnImpl.kt
@@ -20,11 +20,11 @@
 import androidx.compose.Stable
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureBlock2
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.Measured
 import androidx.ui.core.ParentDataModifier
@@ -32,7 +32,7 @@
 import androidx.ui.core.measureBlocksOf
 import androidx.compose.foundation.layout.LayoutOrientation.Horizontal
 import androidx.compose.foundation.layout.LayoutOrientation.Vertical
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.ui.util.fastForEach
 import kotlin.math.max
 import kotlin.math.roundToInt
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt
index 30c39d5..f814e0e 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Spacer.kt
@@ -20,8 +20,8 @@
 import androidx.compose.emptyContent
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
-import androidx.ui.core.hasFixedHeight
-import androidx.ui.core.hasFixedWidth
+import androidx.compose.ui.unit.hasFixedHeight
+import androidx.compose.ui.unit.hasFixedWidth
 
 /**
  * Component that represents an empty space layout, whose size can be defined using the [LayoutWidth],
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Stack.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Stack.kt
index a147306..0b75da3 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Stack.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Stack.kt
@@ -20,14 +20,14 @@
 import androidx.compose.Immutable
 import androidx.compose.Stable
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Measurable
 import androidx.ui.core.Modifier
 import androidx.ui.core.ParentDataModifier
 import androidx.ui.core.Placeable
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
 import kotlin.math.max
 
 /**
diff --git a/ui/ui-layout/src/test/java/androidx/compose/foundation/layout/DpConstraintsTest.kt b/ui/ui-layout/src/test/java/androidx/compose/foundation/layout/DpConstraintsTest.kt
index 3815d2c..0a54192 100644
--- a/ui/ui-layout/src/test/java/androidx/compose/foundation/layout/DpConstraintsTest.kt
+++ b/ui/ui-layout/src/test/java/androidx/compose/foundation/layout/DpConstraintsTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertTrue
 import org.junit.Assert.fail
diff --git a/ui/ui-material/api/0.1.0-dev16.txt b/ui/ui-material/api/0.1.0-dev16.txt
index 98569b4..3595e50 100644
--- a/ui/ui-material/api/0.1.0-dev16.txt
+++ b/ui/ui-material/api/0.1.0-dev16.txt
@@ -14,9 +14,9 @@
   }
 
   public final class AppBarKt {
-    method @androidx.compose.Composable public static void BottomAppBar-7OclJaA(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-YZF1GC0(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void BottomAppBar-gco4eK0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,7 +28,7 @@
   }
 
   public final class BottomNavigationKt {
-    method @androidx.compose.Composable public static void BottomNavigation-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.Composable public static void BottomNavigationItem-1vjpWM4(kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, boolean alwaysShowLabels = true, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
   }
 
@@ -51,13 +51,13 @@
   }
 
   public final class ButtonKt {
-    method @androidx.compose.Composable public static void Button-rDolNZ4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void OutlinedButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void TextButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Button-znV5w7E(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void OutlinedButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void TextButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public final class CardKt {
-    method @androidx.compose.Composable public static void Card-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Card-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class CheckboxKt {
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    method @androidx.compose.Composable public static void Divider-IEYXeDM(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
+    method @androidx.compose.Composable public static void Divider-CqAyCKU(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
   }
 
   public final class DrawerConstants {
@@ -112,8 +112,8 @@
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-J9mdHCo(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-4c9ukw8(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
   }
 
   public enum DrawerState {
@@ -145,8 +145,8 @@
   }
 
   public final class FloatingActionButtonKt {
-    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-rotnDhs(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
-    method @androidx.compose.Composable public static void FloatingActionButton-vshD7-g(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-Yr8yp1k(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
+    method @androidx.compose.Composable public static void FloatingActionButton-Ms14Iak(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class IconButtonKt {
@@ -174,7 +174,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.Composable public static void DropdownMenu-1DTJxuk(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.Composable public static void DropdownMenu-S__1Sro(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
@@ -190,8 +190,8 @@
   }
 
   public final class ProgressIndicatorKt {
-    method @androidx.compose.Composable public static void CircularProgressIndicator-Eddo0-U(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
-    method @androidx.compose.Composable public static void CircularProgressIndicator-xuG9KSo(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-UnDiuhg(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
     method @androidx.compose.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
     method @androidx.compose.Composable public static void LinearProgressIndicator-fcw6-cw(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
   }
@@ -227,7 +227,7 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-X_Qwa8I(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? topBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? bottomBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton = null, androidx.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
   }
@@ -269,12 +269,12 @@
   }
 
   public final class SnackbarKt {
-    method @androidx.compose.Composable public static void Snackbar-Ury2OFw(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
+    method @androidx.compose.Composable public static void Snackbar-vEhkUzU(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
     method public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    method @androidx.compose.Composable public static void Surface-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Surface-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method public static long getPrimarySurface(androidx.ui.material.ColorPalette);
   }
 
@@ -299,7 +299,7 @@
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-98Cn76g(float left, float width);
+    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -375,7 +375,7 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-or96JP8(boolean bounded = true, androidx.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index 98569b4..3595e50 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -14,9 +14,9 @@
   }
 
   public final class AppBarKt {
-    method @androidx.compose.Composable public static void BottomAppBar-7OclJaA(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-YZF1GC0(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void BottomAppBar-gco4eK0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,7 +28,7 @@
   }
 
   public final class BottomNavigationKt {
-    method @androidx.compose.Composable public static void BottomNavigation-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.Composable public static void BottomNavigationItem-1vjpWM4(kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, boolean alwaysShowLabels = true, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
   }
 
@@ -51,13 +51,13 @@
   }
 
   public final class ButtonKt {
-    method @androidx.compose.Composable public static void Button-rDolNZ4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void OutlinedButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void TextButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Button-znV5w7E(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void OutlinedButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void TextButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public final class CardKt {
-    method @androidx.compose.Composable public static void Card-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Card-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class CheckboxKt {
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    method @androidx.compose.Composable public static void Divider-IEYXeDM(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
+    method @androidx.compose.Composable public static void Divider-CqAyCKU(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
   }
 
   public final class DrawerConstants {
@@ -112,8 +112,8 @@
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-J9mdHCo(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-4c9ukw8(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
   }
 
   public enum DrawerState {
@@ -145,8 +145,8 @@
   }
 
   public final class FloatingActionButtonKt {
-    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-rotnDhs(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
-    method @androidx.compose.Composable public static void FloatingActionButton-vshD7-g(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-Yr8yp1k(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
+    method @androidx.compose.Composable public static void FloatingActionButton-Ms14Iak(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class IconButtonKt {
@@ -174,7 +174,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.Composable public static void DropdownMenu-1DTJxuk(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.Composable public static void DropdownMenu-S__1Sro(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
@@ -190,8 +190,8 @@
   }
 
   public final class ProgressIndicatorKt {
-    method @androidx.compose.Composable public static void CircularProgressIndicator-Eddo0-U(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
-    method @androidx.compose.Composable public static void CircularProgressIndicator-xuG9KSo(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-UnDiuhg(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
     method @androidx.compose.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
     method @androidx.compose.Composable public static void LinearProgressIndicator-fcw6-cw(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
   }
@@ -227,7 +227,7 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-X_Qwa8I(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? topBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? bottomBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton = null, androidx.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
   }
@@ -269,12 +269,12 @@
   }
 
   public final class SnackbarKt {
-    method @androidx.compose.Composable public static void Snackbar-Ury2OFw(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
+    method @androidx.compose.Composable public static void Snackbar-vEhkUzU(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
     method public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    method @androidx.compose.Composable public static void Surface-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Surface-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method public static long getPrimarySurface(androidx.ui.material.ColorPalette);
   }
 
@@ -299,7 +299,7 @@
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-98Cn76g(float left, float width);
+    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -375,7 +375,7 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-or96JP8(boolean bounded = true, androidx.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
diff --git a/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
index 98569b4..3595e50 100644
--- a/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-material/api/public_plus_experimental_0.1.0-dev16.txt
@@ -14,9 +14,9 @@
   }
 
   public final class AppBarKt {
-    method @androidx.compose.Composable public static void BottomAppBar-7OclJaA(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-YZF1GC0(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void BottomAppBar-gco4eK0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,7 +28,7 @@
   }
 
   public final class BottomNavigationKt {
-    method @androidx.compose.Composable public static void BottomNavigation-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.Composable public static void BottomNavigationItem-1vjpWM4(kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, boolean alwaysShowLabels = true, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
   }
 
@@ -51,13 +51,13 @@
   }
 
   public final class ButtonKt {
-    method @androidx.compose.Composable public static void Button-rDolNZ4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void OutlinedButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void TextButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Button-znV5w7E(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void OutlinedButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void TextButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public final class CardKt {
-    method @androidx.compose.Composable public static void Card-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Card-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class CheckboxKt {
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    method @androidx.compose.Composable public static void Divider-IEYXeDM(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
+    method @androidx.compose.Composable public static void Divider-CqAyCKU(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
   }
 
   public final class DrawerConstants {
@@ -112,8 +112,8 @@
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-J9mdHCo(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-4c9ukw8(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
   }
 
   public enum DrawerState {
@@ -145,8 +145,8 @@
   }
 
   public final class FloatingActionButtonKt {
-    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-rotnDhs(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
-    method @androidx.compose.Composable public static void FloatingActionButton-vshD7-g(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-Yr8yp1k(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
+    method @androidx.compose.Composable public static void FloatingActionButton-Ms14Iak(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class IconButtonKt {
@@ -174,7 +174,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.Composable public static void DropdownMenu-1DTJxuk(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.Composable public static void DropdownMenu-S__1Sro(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
@@ -190,8 +190,8 @@
   }
 
   public final class ProgressIndicatorKt {
-    method @androidx.compose.Composable public static void CircularProgressIndicator-Eddo0-U(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
-    method @androidx.compose.Composable public static void CircularProgressIndicator-xuG9KSo(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-UnDiuhg(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
     method @androidx.compose.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
     method @androidx.compose.Composable public static void LinearProgressIndicator-fcw6-cw(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
   }
@@ -227,7 +227,7 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-X_Qwa8I(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? topBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? bottomBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton = null, androidx.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
   }
@@ -269,12 +269,12 @@
   }
 
   public final class SnackbarKt {
-    method @androidx.compose.Composable public static void Snackbar-Ury2OFw(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
+    method @androidx.compose.Composable public static void Snackbar-vEhkUzU(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
     method public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    method @androidx.compose.Composable public static void Surface-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Surface-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method public static long getPrimarySurface(androidx.ui.material.ColorPalette);
   }
 
@@ -299,7 +299,7 @@
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-98Cn76g(float left, float width);
+    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -375,7 +375,7 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-or96JP8(boolean bounded = true, androidx.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index 98569b4..3595e50 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -14,9 +14,9 @@
   }
 
   public final class AppBarKt {
-    method @androidx.compose.Composable public static void BottomAppBar-7OclJaA(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-YZF1GC0(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void BottomAppBar-gco4eK0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,7 +28,7 @@
   }
 
   public final class BottomNavigationKt {
-    method @androidx.compose.Composable public static void BottomNavigation-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.Composable public static void BottomNavigationItem-1vjpWM4(kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, boolean alwaysShowLabels = true, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
   }
 
@@ -51,13 +51,13 @@
   }
 
   public final class ButtonKt {
-    method @androidx.compose.Composable public static void Button-rDolNZ4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void OutlinedButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void TextButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Button-znV5w7E(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void OutlinedButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void TextButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public final class CardKt {
-    method @androidx.compose.Composable public static void Card-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Card-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class CheckboxKt {
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    method @androidx.compose.Composable public static void Divider-IEYXeDM(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
+    method @androidx.compose.Composable public static void Divider-CqAyCKU(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
   }
 
   public final class DrawerConstants {
@@ -112,8 +112,8 @@
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-J9mdHCo(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-4c9ukw8(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
   }
 
   public enum DrawerState {
@@ -145,8 +145,8 @@
   }
 
   public final class FloatingActionButtonKt {
-    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-rotnDhs(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
-    method @androidx.compose.Composable public static void FloatingActionButton-vshD7-g(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-Yr8yp1k(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
+    method @androidx.compose.Composable public static void FloatingActionButton-Ms14Iak(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class IconButtonKt {
@@ -174,7 +174,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.Composable public static void DropdownMenu-1DTJxuk(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.Composable public static void DropdownMenu-S__1Sro(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
@@ -190,8 +190,8 @@
   }
 
   public final class ProgressIndicatorKt {
-    method @androidx.compose.Composable public static void CircularProgressIndicator-Eddo0-U(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
-    method @androidx.compose.Composable public static void CircularProgressIndicator-xuG9KSo(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-UnDiuhg(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
     method @androidx.compose.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
     method @androidx.compose.Composable public static void LinearProgressIndicator-fcw6-cw(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
   }
@@ -227,7 +227,7 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-X_Qwa8I(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? topBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? bottomBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton = null, androidx.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
   }
@@ -269,12 +269,12 @@
   }
 
   public final class SnackbarKt {
-    method @androidx.compose.Composable public static void Snackbar-Ury2OFw(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
+    method @androidx.compose.Composable public static void Snackbar-vEhkUzU(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
     method public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    method @androidx.compose.Composable public static void Surface-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Surface-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method public static long getPrimarySurface(androidx.ui.material.ColorPalette);
   }
 
@@ -299,7 +299,7 @@
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-98Cn76g(float left, float width);
+    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -375,7 +375,7 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-or96JP8(boolean bounded = true, androidx.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
diff --git a/ui/ui-material/api/restricted_0.1.0-dev16.txt b/ui/ui-material/api/restricted_0.1.0-dev16.txt
index 54cdb25..4b597bf 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev16.txt
@@ -14,9 +14,9 @@
   }
 
   public final class AppBarKt {
-    method @androidx.compose.Composable public static void BottomAppBar-7OclJaA(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-YZF1GC0(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void BottomAppBar-gco4eK0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,7 +28,7 @@
   }
 
   public final class BottomNavigationKt {
-    method @androidx.compose.Composable public static void BottomNavigation-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.Composable public static void BottomNavigationItem-1vjpWM4(kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, boolean alwaysShowLabels = true, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
   }
 
@@ -51,14 +51,14 @@
   }
 
   public final class ButtonKt {
-    method @androidx.compose.Composable public static void Button-rDolNZ4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void OutlinedButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void TextButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Button-znV5w7E(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void OutlinedButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void TextButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     field @kotlin.PublishedApi internal static final float OutlinedStrokeOpacity = 0.12f;
   }
 
   public final class CardKt {
-    method @androidx.compose.Composable public static void Card-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Card-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class CheckboxKt {
@@ -103,7 +103,7 @@
   }
 
   public final class DividerKt {
-    method @androidx.compose.Composable public static void Divider-IEYXeDM(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
+    method @androidx.compose.Composable public static void Divider-CqAyCKU(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
   }
 
   public final class DrawerConstants {
@@ -113,8 +113,8 @@
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-J9mdHCo(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-4c9ukw8(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
   }
 
   public enum DrawerState {
@@ -146,8 +146,8 @@
   }
 
   public final class FloatingActionButtonKt {
-    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-rotnDhs(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
-    method @androidx.compose.Composable public static void FloatingActionButton-vshD7-g(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-Yr8yp1k(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
+    method @androidx.compose.Composable public static void FloatingActionButton-Ms14Iak(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class IconButtonKt {
@@ -175,7 +175,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.Composable public static void DropdownMenu-1DTJxuk(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.Composable public static void DropdownMenu-S__1Sro(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
@@ -191,8 +191,8 @@
   }
 
   public final class ProgressIndicatorKt {
-    method @androidx.compose.Composable public static void CircularProgressIndicator-Eddo0-U(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
-    method @androidx.compose.Composable public static void CircularProgressIndicator-xuG9KSo(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-UnDiuhg(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
     method @androidx.compose.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
     method @androidx.compose.Composable public static void LinearProgressIndicator-fcw6-cw(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
   }
@@ -228,7 +228,7 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-X_Qwa8I(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? topBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? bottomBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton = null, androidx.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
   }
@@ -270,12 +270,12 @@
   }
 
   public final class SnackbarKt {
-    method @androidx.compose.Composable public static void Snackbar-Ury2OFw(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
+    method @androidx.compose.Composable public static void Snackbar-vEhkUzU(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
     method public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    method @androidx.compose.Composable public static void Surface-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Surface-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method public static long getPrimarySurface(androidx.ui.material.ColorPalette);
   }
 
@@ -300,7 +300,7 @@
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-98Cn76g(float left, float width);
+    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -376,7 +376,7 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-or96JP8(boolean bounded = true, androidx.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index 54cdb25..4b597bf 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -14,9 +14,9 @@
   }
 
   public final class AppBarKt {
-    method @androidx.compose.Composable public static void BottomAppBar-7OclJaA(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-YZF1GC0(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void BottomAppBar-gco4eK0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), androidx.compose.ui.graphics.Shape? cutoutShape = null, float elevation = androidx.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,7 +28,7 @@
   }
 
   public final class BottomNavigationKt {
-    method @androidx.compose.Composable public static void BottomNavigation-8IlvPxM(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     method @androidx.compose.Composable public static void BottomNavigationItem-1vjpWM4(kotlin.jvm.functions.Function0<kotlin.Unit> icon, kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, boolean alwaysShowLabels = true, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
   }
 
@@ -51,14 +51,14 @@
   }
 
   public final class ButtonKt {
-    method @androidx.compose.Composable public static void Button-rDolNZ4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void OutlinedButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static inline void TextButton-XhwkDF4(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Button-znV5w7E(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 2.dp, float disabledElevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = MaterialTheme.colors.primary, long disabledBackgroundColor = ButtonConstants.defaultDisabledBackgroundColor, long contentColor = contentColorFor(backgroundColor), long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void OutlinedButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = Border(1.dp, MaterialTheme.colors.onSurface.copy(OutlinedStrokeOpacity)), long backgroundColor = MaterialTheme.colors.surface, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = ButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static inline void TextButton-q8Za-04(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, float elevation = 0.dp, androidx.compose.ui.graphics.Shape shape = small, androidx.compose.foundation.Border? border = null, long backgroundColor = Color.Transparent, long contentColor = MaterialTheme.colors.primary, long disabledContentColor = ButtonConstants.defaultDisabledContentColor, androidx.compose.foundation.layout.InnerPadding padding = TextButtonConstants.DefaultInnerPadding, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
     field @kotlin.PublishedApi internal static final float OutlinedStrokeOpacity = 0.12f;
   }
 
   public final class CardKt {
-    method @androidx.compose.Composable public static void Card-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Card-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = medium, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 1.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class CheckboxKt {
@@ -103,7 +103,7 @@
   }
 
   public final class DividerKt {
-    method @androidx.compose.Composable public static void Divider-IEYXeDM(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
+    method @androidx.compose.Composable public static void Divider-CqAyCKU(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.onSurface.copy(DividerAlpha), float thickness = 1.dp, float startIndent = 0.dp);
   }
 
   public final class DrawerConstants {
@@ -113,8 +113,8 @@
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-J9mdHCo(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-4c9ukw8(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
   }
 
   public enum DrawerState {
@@ -146,8 +146,8 @@
   }
 
   public final class FloatingActionButtonKt {
-    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-rotnDhs(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
-    method @androidx.compose.Composable public static void FloatingActionButton-vshD7-g(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.Composable public static void ExtendedFloatingActionButton-Yr8yp1k(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp);
+    method @androidx.compose.Composable public static void FloatingActionButton-Ms14Iak(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(CornerSize(50)), long backgroundColor = MaterialTheme.colors.secondary, long contentColor = contentColorFor(backgroundColor), float elevation = 6.dp, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class IconButtonKt {
@@ -175,7 +175,7 @@
   }
 
   public final class MenuKt {
-    method @androidx.compose.Composable public static void DropdownMenu-1DTJxuk(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
+    method @androidx.compose.Composable public static void DropdownMenu-S__1Sro(kotlin.jvm.functions.Function0<kotlin.Unit> toggle, boolean expanded, kotlin.jvm.functions.Function0<kotlin.Unit> onDismissRequest, androidx.ui.core.Modifier toggleModifier = Modifier, long dropdownOffset = Position(0.dp, 0.dp), androidx.ui.core.Modifier dropdownModifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> dropdownContent);
     method @androidx.compose.Composable public static void DropdownMenuItem(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
@@ -191,8 +191,8 @@
   }
 
   public final class ProgressIndicatorKt {
-    method @androidx.compose.Composable public static void CircularProgressIndicator-Eddo0-U(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
-    method @androidx.compose.Composable public static void CircularProgressIndicator-xuG9KSo(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.Composable public static void CircularProgressIndicator-UnDiuhg(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
     method @androidx.compose.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
     method @androidx.compose.Composable public static void LinearProgressIndicator-fcw6-cw(@FloatRange(from=0.0, to=1.0) float progress, androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
   }
@@ -228,7 +228,7 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-X_Qwa8I(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
     return <init>()
 }), kotlin.jvm.functions.Function0<kotlin.Unit>? topBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? bottomBar = null, kotlin.jvm.functions.Function0<kotlin.Unit>? floatingActionButton = null, androidx.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
   }
@@ -270,12 +270,12 @@
   }
 
   public final class SnackbarKt {
-    method @androidx.compose.Composable public static void Snackbar-Ury2OFw(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
+    method @androidx.compose.Composable public static void Snackbar-vEhkUzU(kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit>? action = null, androidx.ui.core.Modifier modifier = Modifier, boolean actionOnNewLine = false, androidx.compose.ui.graphics.Shape shape = small, float elevation = 6.dp);
     method public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    method @androidx.compose.Composable public static void Surface-jzKzB-4(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.Composable public static void Surface-ZULhI0g(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, long color = MaterialTheme.colors.surface, long contentColor = contentColorFor(color), androidx.compose.foundation.Border? border = null, float elevation = 0.dp, kotlin.jvm.functions.Function0<kotlin.Unit> content);
     method public static long getPrimarySurface(androidx.ui.material.ColorPalette);
   }
 
@@ -300,7 +300,7 @@
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-98Cn76g(float left, float width);
+    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -376,7 +376,7 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-or96JP8(boolean bounded = true, androidx.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
diff --git a/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt b/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
index 714e91f..926a8a4 100644
--- a/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
+++ b/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
@@ -24,7 +24,7 @@
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.ui.graphics.vector.VectorAssetBuilder
 import androidx.compose.ui.graphics.vector.path
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Entry point for using [Material Icons](https://material.io/resources/icons) in Compose.
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt
index 6258cc4..77d98ad 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt
@@ -35,7 +35,7 @@
 import androidx.ui.material.RadioButton
 import androidx.ui.material.samples.BottomNavigationSample
 import androidx.ui.material.samples.BottomNavigationWithOnlySelectedLabelsSample
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun BottomNavigationDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
index bba4440..1574dda 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
@@ -44,7 +44,7 @@
 import androidx.ui.material.samples.SimpleExtendedFabWithIcon
 import androidx.ui.material.samples.SimpleFab
 import androidx.ui.material.samples.TextButtonSample
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 private val DefaultSpace = 20.dp
 
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
index 95d9112..8f1ca2a 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
@@ -68,8 +68,8 @@
 import androidx.ui.material.Surface
 import androidx.ui.material.TopAppBar
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import java.util.Locale
 
 /**
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
index 638af7d..4f24d99 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
@@ -46,7 +46,7 @@
 import androidx.ui.material.Scaffold
 import androidx.ui.material.TopAppBar
 import androidx.ui.material.lightColorPalette
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.round
 
 /**
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt
index 19733ff..3a49254 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt
@@ -34,8 +34,8 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.ui.material.Card
 import androidx.ui.material.MaterialTheme
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun ElevationDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
index 7db2ea2..221cad8 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
@@ -55,7 +55,7 @@
 import androidx.ui.material.samples.TextFieldWithHelperMessage
 import androidx.ui.material.samples.TextFieldWithHideKeyboardOnImeAction
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun TextFieldsDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt
index 31bd3cf..919a53b 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.ltr
 import androidx.ui.material.DropdownMenu
@@ -34,10 +34,10 @@
 import androidx.ui.material.IconButton
 import androidx.ui.material.icons.Icons
 import androidx.ui.material.icons.filled.MoreVert
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Position
-import androidx.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.dp
 import kotlin.math.roundToInt
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt
index 40f7b7d..24e0e56 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt
@@ -29,7 +29,7 @@
 import androidx.ui.material.samples.RadioGroupSample
 import androidx.ui.material.samples.SwitchSample
 import androidx.ui.material.samples.TriStateCheckboxSample
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun SelectionControlsDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt
index 15521ef..f25bd16 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt
@@ -26,7 +26,7 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.samples.SliderSample
 import androidx.ui.material.samples.StepsSliderSample
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun SliderDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt
index bb7af35..7b22750 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt
@@ -27,7 +27,7 @@
 import androidx.ui.material.TextButton
 import androidx.ui.material.samples.SimpleSnackbar
 import androidx.ui.material.snackbarPrimaryColorFor
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun SnackbarDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt
index a53693b..618ea16 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt
@@ -35,7 +35,7 @@
 import androidx.ui.material.samples.ScrollingTextTabs
 import androidx.ui.material.samples.TextAndIconTabs
 import androidx.ui.material.samples.TextTabs
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun TabDemo() {
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt
index e6ccf50..ec30260 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.ui.material.Card
 import androidx.ui.material.MaterialTheme
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * The Accounts screen.
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt
index cc641b6..413affc 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt
@@ -30,7 +30,7 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.ui.material.Card
 import androidx.ui.material.MaterialTheme
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * The Bills screen.
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt
index 9849da0..acb3d7a 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt
@@ -33,7 +33,7 @@
 import androidx.ui.material.Divider
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.icons.Icons
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import java.text.DecimalFormat
 
 /**
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt
index 863791b..f2946bf 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt
@@ -28,8 +28,8 @@
 import androidx.ui.material.icons.Icons
 import androidx.ui.material.icons.lazyMaterialIcon
 import androidx.ui.material.icons.materialPath
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * 24x24dp icon from a resource id.
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt
index 757a33d..8c65ff4 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt
@@ -39,7 +39,7 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.TextButton
 import androidx.ui.material.icons.Icons
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import java.util.Locale
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
index 5dd1b42..317391e 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
@@ -28,7 +28,7 @@
 import androidx.ui.material.Divider
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.TextButton
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun RallyAlertDialog(
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
index 9c656e1..f631ef1 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
@@ -30,7 +30,7 @@
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.drawscope.Stroke
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 private const val DividerLengthInDegrees = 1.8f
 private val AngleOffset = FloatPropKey()
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
index 502b099..430ef03 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
@@ -24,8 +24,8 @@
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.FontWeight
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 
 val rallyGreen = Color(0xFF1EB980)
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt
index 582e7c0..f8c4ea4 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt
@@ -37,7 +37,7 @@
 import androidx.ui.material.MaterialTheme
 import androidx.ui.material.Surface
 import androidx.ui.material.ripple.RippleIndication
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import java.util.Locale
 
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
index d20b16f..1dc90c2 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
@@ -29,7 +29,7 @@
 import androidx.ui.material.AlertDialogButtonLayout
 import androidx.ui.material.Button
 import androidx.ui.material.TextButton
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
index 64b8ca6..a61cb5c 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
@@ -33,7 +33,7 @@
 import androidx.ui.material.Button
 import androidx.ui.material.DrawerState
 import androidx.ui.material.ModalDrawerLayout
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt
index 25bfde8..a7bb160 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt
@@ -41,7 +41,7 @@
 import androidx.ui.material.TopAppBar
 import androidx.ui.material.icons.Icons
 import androidx.ui.material.icons.filled.Menu
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.abs
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
index 8ac0f1c..d60d78b 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
@@ -38,7 +38,7 @@
 import androidx.ui.material.RadioButton
 import androidx.ui.material.Switch
 import androidx.ui.material.TriStateCheckbox
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
index f162821..97748b7 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
@@ -54,7 +54,7 @@
 import androidx.ui.material.TabRow
 import androidx.ui.material.icons.Icons
 import androidx.ui.material.icons.filled.Favorite
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
index 997703a..149e073 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
@@ -38,7 +38,7 @@
 import androidx.ui.material.icons.filled.Info
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.ui.text.TextRange
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
index 3190f7c..7da7dc9 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
@@ -33,7 +33,7 @@
 import androidx.ui.material.lightColorPalette
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.FontWeight
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
index 23e6798..dc84456 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
@@ -35,10 +35,10 @@
 import androidx.ui.test.onNodeWithText
 import androidx.ui.test.getBoundsInRoot
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
index a2adcda..ead9562 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
@@ -42,9 +42,9 @@
 import androidx.ui.test.onNodeWithText
 import androidx.ui.test.getBoundsInRoot
 import androidx.ui.test.isInMutuallyExclusiveGroup
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
index ced4dc4..1f613b1 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
@@ -31,7 +31,7 @@
 import androidx.ui.test.performPartialGesture
 import androidx.ui.test.onNode
 import androidx.ui.test.onNodeWithText
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.test.hasClickAction
 import androidx.ui.test.down
 import androidx.ui.test.onRoot
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
index 8d8a33f..b044532 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
@@ -70,13 +70,13 @@
 import androidx.ui.test.onNodeWithText
 import androidx.ui.test.hasClickAction
 import androidx.ui.test.runOnIdle
-import androidx.ui.unit.Dp
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.center
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.sp
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.center
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.sp
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
index be17107..6caa46e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
@@ -32,7 +32,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
index 57149a4..71b362d 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
@@ -33,7 +33,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performClick
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
index 02c81e8..fe3df3d 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
@@ -19,7 +19,7 @@
 import androidx.test.filters.MediumTest
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.createComposeRule
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
index 5356be2..313c599 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
@@ -31,7 +31,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
index 6065364..68d84d0 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
@@ -50,9 +50,9 @@
 import androidx.ui.test.swipeLeft
 import androidx.ui.test.swipeRight
 import androidx.ui.test.swipeUp
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth.assertThat
 import org.junit.Ignore
 import org.junit.Rule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
index 5917c16..ff09fc6 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
@@ -28,9 +28,9 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
index 314b61e..9d3ab5e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
@@ -48,11 +48,11 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.onNodeWithText
 import androidx.ui.test.runOnIdle
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.center
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.center
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
index 679dd3f..3f18b2f 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.test.onNode
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.isToggleable
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
index 5603816..e70ad22 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
@@ -28,7 +28,7 @@
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertWidthIsEqualTo
 import androidx.ui.test.createComposeRule
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
index 3906115..76b3d5c 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
@@ -29,9 +29,9 @@
 import androidx.compose.ui.graphics.ImageAsset
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.createComposeRule
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
index 3130aa7..cbf8e02 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
@@ -35,10 +35,10 @@
 import androidx.ui.test.runOnIdle
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.width
 
 fun ComposeTestRule.setMaterialContent(
     modifier: Modifier = Modifier,
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
index f1a9f4b..5c2333c 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
@@ -21,7 +21,7 @@
 import androidx.compose.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.core.DensityAmbient
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
 import androidx.compose.foundation.Box
@@ -41,12 +41,12 @@
 import androidx.ui.test.isPopup
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntBounds
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Position
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntBounds
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
index 7cdc17a..1e3df05 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
@@ -29,7 +29,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnUiThread
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
index f1875ad..cd4518d 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
@@ -30,7 +30,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.performClick
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
index 8db57e5..2564f81 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
@@ -52,10 +52,10 @@
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.swipeLeft
 import androidx.ui.test.swipeRight
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.toSize
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.toSize
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth.assertThat
 import org.junit.Ignore
 import org.junit.Rule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
index 4715193..4a318b4 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
@@ -48,7 +48,7 @@
 import androidx.ui.test.down
 import androidx.ui.test.moveBy
 import androidx.ui.test.up
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertNotEquals
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
index 373a939..ae7b3e2 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
@@ -44,10 +44,10 @@
 import androidx.ui.test.getBoundsInRoot
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.sp
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.sp
+import androidx.compose.ui.unit.width
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
index 9597b1b..6de1309 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
index 73d375c..1f103f5 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
@@ -39,7 +39,7 @@
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.swipeLeft
 import androidx.ui.test.swipeRight
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
index 19cdfc3..e0d5013 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
@@ -45,9 +45,9 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.getBoundsInRoot
 import androidx.ui.test.isInMutuallyExclusiveGroup
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
index 0fb63d1..4b3f082 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
@@ -55,7 +55,7 @@
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
index 7bd1f6a..44d4cf5 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
@@ -64,9 +64,9 @@
 import androidx.ui.test.waitForIdle
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.ui.text.SoftwareKeyboardController
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.atLeastOnce
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
index 94cd864..202e85e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
@@ -58,8 +58,8 @@
 import androidx.ui.test.performImeAction
 import androidx.ui.test.waitForIdle
 import androidx.compose.ui.text.SoftwareKeyboardController
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.atLeastOnce
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
index bce73fd..354ecde 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
@@ -41,8 +41,8 @@
 import androidx.ui.test.runOnIdle
 import androidx.ui.test.swipeDown
 import androidx.ui.test.swipeUp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
index d18ae5e..52abcb4 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
@@ -34,7 +34,7 @@
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.ui.material.AlertDialogButtonLayout.SideBySide
 import androidx.ui.material.AlertDialogButtonLayout.Stacked
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Alert dialog is a [Dialog] which interrupts the user with urgent information, details or actions.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
index e129b95..d31927f 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
@@ -40,12 +40,12 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import kotlin.math.sqrt
 
 /**
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
index e44a4d1..ab7d02f 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
@@ -23,7 +23,7 @@
 import androidx.compose.Providers
 import androidx.compose.emptyContent
 import androidx.compose.animation.animate
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.MeasureScope
 import androidx.ui.core.Modifier
@@ -46,8 +46,8 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.text.LastBaseline
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.annotation.FloatRange
 import kotlin.math.max
 import kotlin.math.roundToInt
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
index ebc365d..99c506d 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
@@ -38,8 +38,8 @@
 import androidx.compose.foundation.layout.RowScope
 import androidx.compose.foundation.layout.defaultMinSizeConstraints
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Material Design implementation of a
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
index 25262d8..d100ebc 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
@@ -21,8 +21,8 @@
 import androidx.compose.foundation.Border
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shape
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Cards are [Surface]s that display content and actions on a single topic.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
index ca48f5f..aa71f1a 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
@@ -46,7 +46,7 @@
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.material.ripple.RippleIndication
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.lerp
 
 /**
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
index 62da9a4..c3ba91d 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
@@ -24,8 +24,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * A divider is a thin line that groups content in lists and layouts
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
index a29662f..3e034cd 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
@@ -21,7 +21,7 @@
 import androidx.compose.State
 import androidx.compose.state
 import androidx.ui.core.DensityAmbient
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
@@ -37,8 +37,8 @@
 import androidx.compose.foundation.layout.preferredSizeIn
 import androidx.ui.material.internal.fixedThresholds
 import androidx.ui.material.internal.stateDraggable
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.lerp
 
 /**
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
index c2868cb..51932bb 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
@@ -37,8 +37,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSizeIn
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * A floating action button (FAB) is a button that represents the primary action of a screen.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
index 246a25c..8f92cf5 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.selection.toggleable
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.material.ripple.RippleIndication
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * IconButton is a clickable icon, used to represent actions. An IconButton has an overall minimum
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
index 80c889a..351a465 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
@@ -19,7 +19,7 @@
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
@@ -39,9 +39,9 @@
 import androidx.compose.foundation.text.LastBaseline
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.fastForEachIndexed
 import kotlin.math.max
 
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
index cccbf97..478e733 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
@@ -29,7 +29,7 @@
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.DrawLayerModifier
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.Popup
 import androidx.ui.core.PopupPositionProvider
@@ -47,14 +47,14 @@
 import androidx.compose.foundation.layout.preferredSizeIn
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.ui.material.ripple.RippleIndication
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntBounds
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Position
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntBounds
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Position
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import kotlin.math.max
 import kotlin.math.min
 
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
index de27cae..e907524 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
@@ -27,9 +27,9 @@
 import androidx.compose.setValue
 import androidx.compose.state
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.Placeable
 import androidx.ui.core.drawBehind
@@ -38,7 +38,7 @@
 import androidx.ui.core.focus.focusState
 import androidx.ui.core.id
 import androidx.ui.core.layoutId
-import androidx.ui.core.offset
+import androidx.compose.ui.unit.offset
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.currentTextStyle
@@ -55,8 +55,8 @@
 import androidx.compose.ui.text.SoftwareKeyboardController
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.constrain
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.max
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
index 9261fb0..106e03c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
@@ -28,7 +28,7 @@
 import androidx.compose.Composable
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
 import androidx.compose.foundation.Canvas
@@ -44,8 +44,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.semantics.accessibilityValue
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.annotation.FloatRange
 import kotlin.math.abs
 import kotlin.math.max
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
index 818be78a..736f1a55 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
@@ -42,8 +42,8 @@
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.ui.material.ripple.RippleIndication
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Components for creating mutually exclusive set of [RadioButton]s.
@@ -123,7 +123,7 @@
         "androidx.compose.foundation.layout.Column",
         "androidx.compose.foundation.layout.fillMaxWidth",
         "androidx.ui.core.Modifier",
-        "androidx.ui.unit.dp",
+        "androidx.compose.ui.unit.dp",
         "androidx.compose.foundation.selection.selectable"
     )
 )
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
index 9f9dcba..ea0fbf4 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
@@ -42,12 +42,12 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.ui.material.Scaffold.FabPosition
-import androidx.ui.unit.Dp
-import androidx.ui.unit.PxBounds
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.PxBounds
 import androidx.compose.ui.geometry.Size
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.toSize
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.toSize
 
 /**
  * State for [Scaffold] composable component.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
index 2c2de1f..07447c6 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
@@ -19,7 +19,7 @@
 import androidx.compose.staticAmbientOf
 import androidx.compose.foundation.shape.corner.CornerBasedShape
 import androidx.compose.foundation.shape.corner.RoundedCornerShape
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * Components are grouped into shape categories based on their size. These categories provide a
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
index 0838c2f..696f0bc 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
@@ -27,7 +27,7 @@
 import androidx.ui.core.Alignment
 import androidx.ui.core.AnimationClockAmbient
 import androidx.ui.core.DensityAmbient
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
@@ -63,7 +63,7 @@
 import androidx.ui.semantics.scrollBackward
 import androidx.ui.semantics.scrollForward
 import androidx.ui.semantics.setProgress
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.format
 import androidx.ui.util.lerp
 import androidx.ui.util.annotation.IntRange
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
index 68a8e0e..6802415 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
@@ -34,8 +34,8 @@
 import androidx.compose.foundation.layout.relativePaddingFrom
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.max
 
 /**
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
index ddc7597..4b7bfe0 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
@@ -35,8 +35,8 @@
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.graphics.compositeOver
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.ln
 
 /**
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
index e45d045..0ae74e4 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
@@ -23,7 +23,7 @@
 import androidx.compose.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
@@ -51,7 +51,7 @@
 import androidx.ui.material.SwitchDefaults.uncheckedTrackColor
 import androidx.ui.material.internal.stateDraggable
 import androidx.ui.material.ripple.RippleIndication
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 /**
  * A Switch is a two state toggleable component that provides on/off like options
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
index aaccde8..2241f01 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
@@ -32,7 +32,7 @@
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
 import androidx.ui.core.Alignment
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
@@ -63,10 +63,10 @@
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 import androidx.ui.util.fastFirstOrNull
 import androidx.ui.util.fastForEach
 import androidx.ui.util.fastForEachIndexed
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
index 9660a68..866c46b 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.drawBehind
 import androidx.ui.core.id
 import androidx.ui.core.layoutId
-import androidx.ui.core.offset
+import androidx.compose.ui.unit.offset
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
@@ -47,9 +47,9 @@
 import androidx.compose.ui.text.SoftwareKeyboardController
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.constrain
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.dp
 import kotlin.math.max
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
index aaef65a..a434e42 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
@@ -35,9 +35,9 @@
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
 import androidx.ui.core.Measurable
 import androidx.ui.core.MeasureScope
@@ -45,12 +45,12 @@
 import androidx.ui.core.Placeable
 import androidx.ui.core.Ref
 import androidx.ui.core.clipToBounds
-import androidx.ui.core.constrainWidth
+import androidx.compose.ui.unit.constrainWidth
 import androidx.ui.core.focus.FocusModifier
 import androidx.ui.core.focus.FocusState
 import androidx.ui.core.focus.focusState
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
-import androidx.ui.core.offset
+import androidx.compose.ui.unit.offset
 import androidx.compose.foundation.ContentColorAmbient
 import androidx.compose.foundation.ProvideTextStyle
 import androidx.compose.foundation.BaseTextField
@@ -72,8 +72,8 @@
 import androidx.compose.ui.text.SoftwareKeyboardController
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.lerp
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.util.annotation.VisibleForTesting
 import kotlin.math.min
 import kotlin.math.roundToInt
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
index 35bcec7..23cd196 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
@@ -21,7 +21,7 @@
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.FontWeight
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 /**
  * Class holding typography definitions as defined by the [Material typography specification](https://material.io/design/typography/the-type-system.html#type-scale).
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
index f951613..90bf63a 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
@@ -34,10 +34,10 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.clipRect
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import kotlin.math.max
 
 /**
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
index 6494336..b776fd8 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
@@ -43,7 +43,7 @@
 import androidx.compose.ui.graphics.useOrElse
 import androidx.ui.material.ExperimentalMaterialApi
 import androidx.ui.material.MaterialTheme
-import androidx.ui.unit.Dp
+import androidx.compose.ui.unit.Dp
 import androidx.ui.util.fastForEach
 import androidx.ui.util.nativeClass
 
diff --git a/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt b/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
index e548f06..e63d65fd 100644
--- a/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
+++ b/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
@@ -16,8 +16,8 @@
 package androidx.ui.material.ripple
 
 import androidx.compose.ui.geometry.Size
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-test/api/0.1.0-dev16.txt b/ui/ui-test/api/0.1.0-dev16.txt
index fd6956a..85bf33d 100644
--- a/ui/ui-test/api/0.1.0-dev16.txt
+++ b/ui/ui-test/api/0.1.0-dev16.txt
@@ -59,26 +59,26 @@
 
   public final class BitmapHelpersKt {
     method public static void assertPixelColor-eWrXCG0(android.graphics.Bitmap, long expected, int x, int y, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.String> error = { color -> return "Pixel(" + x + ", " + y + ") expected to be " + expected + ", but was " + color });
-    method public static void assertPixels(android.graphics.Bitmap, androidx.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
-    method public static void assertShape-ozjeA3I(android.graphics.Bitmap, androidx.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
-    method public static void assertShape-xgsQ8N8(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertPixels(android.graphics.Bitmap, androidx.compose.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
+    method public static void assertShape-LBqplUo(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertShape-WOPiG5A(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
     method public static boolean contains(androidx.compose.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
-    method public static void assertIsEqualTo-552lcfo(float, float expected, String subject = "", float tolerance = null(0.5));
-    method public static void assertIsNotEqualTo-552lcfo(float, float unexpected, String subject = "", float tolerance = null(0.5));
-    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-jINh5Q8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
+    method public static void assertIsEqualTo-nR2IGDg(float, float expected, String subject = "", float tolerance = null(0.5));
+    method public static void assertIsNotEqualTo-nR2IGDg(float, float unexpected, String subject = "", float tolerance = null(0.5));
+    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-cUvJKr8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
     method public static float getAlignmentLinePosition(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.AlignmentLine line);
-    method public static androidx.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.compose.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
   }
 
   public interface ComposeBenchmarkScope<T> extends androidx.ui.test.ComposeExecutionControl {
@@ -137,11 +137,11 @@
   public interface ComposeTestRule extends org.junit.rules.TestRule {
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public abstract androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract android.util.DisplayMetrics displayMetrics;
   }
 
@@ -230,7 +230,7 @@
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
     method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
@@ -245,14 +245,14 @@
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
     method public static inline float getLeft(androidx.ui.test.BaseGestureScope);
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
@@ -261,32 +261,32 @@
     method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
@@ -415,11 +415,11 @@
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public androidx.ui.unit.Density density;
+    property public androidx.compose.ui.unit.Density density;
     property public android.util.DisplayMetrics displayMetrics;
   }
 
diff --git a/ui/ui-test/api/current.txt b/ui/ui-test/api/current.txt
index fd6956a..85bf33d 100644
--- a/ui/ui-test/api/current.txt
+++ b/ui/ui-test/api/current.txt
@@ -59,26 +59,26 @@
 
   public final class BitmapHelpersKt {
     method public static void assertPixelColor-eWrXCG0(android.graphics.Bitmap, long expected, int x, int y, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.String> error = { color -> return "Pixel(" + x + ", " + y + ") expected to be " + expected + ", but was " + color });
-    method public static void assertPixels(android.graphics.Bitmap, androidx.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
-    method public static void assertShape-ozjeA3I(android.graphics.Bitmap, androidx.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
-    method public static void assertShape-xgsQ8N8(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertPixels(android.graphics.Bitmap, androidx.compose.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
+    method public static void assertShape-LBqplUo(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertShape-WOPiG5A(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
     method public static boolean contains(androidx.compose.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
-    method public static void assertIsEqualTo-552lcfo(float, float expected, String subject = "", float tolerance = null(0.5));
-    method public static void assertIsNotEqualTo-552lcfo(float, float unexpected, String subject = "", float tolerance = null(0.5));
-    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-jINh5Q8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
+    method public static void assertIsEqualTo-nR2IGDg(float, float expected, String subject = "", float tolerance = null(0.5));
+    method public static void assertIsNotEqualTo-nR2IGDg(float, float unexpected, String subject = "", float tolerance = null(0.5));
+    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-cUvJKr8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
     method public static float getAlignmentLinePosition(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.AlignmentLine line);
-    method public static androidx.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.compose.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
   }
 
   public interface ComposeBenchmarkScope<T> extends androidx.ui.test.ComposeExecutionControl {
@@ -137,11 +137,11 @@
   public interface ComposeTestRule extends org.junit.rules.TestRule {
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public abstract androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract android.util.DisplayMetrics displayMetrics;
   }
 
@@ -230,7 +230,7 @@
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
     method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
@@ -245,14 +245,14 @@
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
     method public static inline float getLeft(androidx.ui.test.BaseGestureScope);
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
@@ -261,32 +261,32 @@
     method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
@@ -415,11 +415,11 @@
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public androidx.ui.unit.Density density;
+    property public androidx.compose.ui.unit.Density density;
     property public android.util.DisplayMetrics displayMetrics;
   }
 
diff --git a/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt
index fd6956a..85bf33d 100644
--- a/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-test/api/public_plus_experimental_0.1.0-dev16.txt
@@ -59,26 +59,26 @@
 
   public final class BitmapHelpersKt {
     method public static void assertPixelColor-eWrXCG0(android.graphics.Bitmap, long expected, int x, int y, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.String> error = { color -> return "Pixel(" + x + ", " + y + ") expected to be " + expected + ", but was " + color });
-    method public static void assertPixels(android.graphics.Bitmap, androidx.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
-    method public static void assertShape-ozjeA3I(android.graphics.Bitmap, androidx.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
-    method public static void assertShape-xgsQ8N8(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertPixels(android.graphics.Bitmap, androidx.compose.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
+    method public static void assertShape-LBqplUo(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertShape-WOPiG5A(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
     method public static boolean contains(androidx.compose.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
-    method public static void assertIsEqualTo-552lcfo(float, float expected, String subject = "", float tolerance = null(0.5));
-    method public static void assertIsNotEqualTo-552lcfo(float, float unexpected, String subject = "", float tolerance = null(0.5));
-    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-jINh5Q8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
+    method public static void assertIsEqualTo-nR2IGDg(float, float expected, String subject = "", float tolerance = null(0.5));
+    method public static void assertIsNotEqualTo-nR2IGDg(float, float unexpected, String subject = "", float tolerance = null(0.5));
+    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-cUvJKr8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
     method public static float getAlignmentLinePosition(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.AlignmentLine line);
-    method public static androidx.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.compose.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
   }
 
   public interface ComposeBenchmarkScope<T> extends androidx.ui.test.ComposeExecutionControl {
@@ -137,11 +137,11 @@
   public interface ComposeTestRule extends org.junit.rules.TestRule {
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public abstract androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract android.util.DisplayMetrics displayMetrics;
   }
 
@@ -230,7 +230,7 @@
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
     method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
@@ -245,14 +245,14 @@
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
     method public static inline float getLeft(androidx.ui.test.BaseGestureScope);
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
@@ -261,32 +261,32 @@
     method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
@@ -415,11 +415,11 @@
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public androidx.ui.unit.Density density;
+    property public androidx.compose.ui.unit.Density density;
     property public android.util.DisplayMetrics displayMetrics;
   }
 
diff --git a/ui/ui-test/api/public_plus_experimental_current.txt b/ui/ui-test/api/public_plus_experimental_current.txt
index fd6956a..85bf33d 100644
--- a/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/ui/ui-test/api/public_plus_experimental_current.txt
@@ -59,26 +59,26 @@
 
   public final class BitmapHelpersKt {
     method public static void assertPixelColor-eWrXCG0(android.graphics.Bitmap, long expected, int x, int y, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.String> error = { color -> return "Pixel(" + x + ", " + y + ") expected to be " + expected + ", but was " + color });
-    method public static void assertPixels(android.graphics.Bitmap, androidx.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
-    method public static void assertShape-ozjeA3I(android.graphics.Bitmap, androidx.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
-    method public static void assertShape-xgsQ8N8(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertPixels(android.graphics.Bitmap, androidx.compose.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
+    method public static void assertShape-LBqplUo(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertShape-WOPiG5A(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
     method public static boolean contains(androidx.compose.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
-    method public static void assertIsEqualTo-552lcfo(float, float expected, String subject = "", float tolerance = null(0.5));
-    method public static void assertIsNotEqualTo-552lcfo(float, float unexpected, String subject = "", float tolerance = null(0.5));
-    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-jINh5Q8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
+    method public static void assertIsEqualTo-nR2IGDg(float, float expected, String subject = "", float tolerance = null(0.5));
+    method public static void assertIsNotEqualTo-nR2IGDg(float, float unexpected, String subject = "", float tolerance = null(0.5));
+    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-cUvJKr8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
     method public static float getAlignmentLinePosition(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.AlignmentLine line);
-    method public static androidx.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.compose.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
   }
 
   public interface ComposeBenchmarkScope<T> extends androidx.ui.test.ComposeExecutionControl {
@@ -137,11 +137,11 @@
   public interface ComposeTestRule extends org.junit.rules.TestRule {
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public abstract androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract android.util.DisplayMetrics displayMetrics;
   }
 
@@ -230,7 +230,7 @@
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
     method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
@@ -245,14 +245,14 @@
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
     method public static inline float getLeft(androidx.ui.test.BaseGestureScope);
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
@@ -261,32 +261,32 @@
     method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
@@ -415,11 +415,11 @@
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public androidx.ui.unit.Density density;
+    property public androidx.compose.ui.unit.Density density;
     property public android.util.DisplayMetrics displayMetrics;
   }
 
diff --git a/ui/ui-test/api/restricted_0.1.0-dev16.txt b/ui/ui-test/api/restricted_0.1.0-dev16.txt
index fd6956a..85bf33d 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev16.txt
@@ -59,26 +59,26 @@
 
   public final class BitmapHelpersKt {
     method public static void assertPixelColor-eWrXCG0(android.graphics.Bitmap, long expected, int x, int y, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.String> error = { color -> return "Pixel(" + x + ", " + y + ") expected to be " + expected + ", but was " + color });
-    method public static void assertPixels(android.graphics.Bitmap, androidx.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
-    method public static void assertShape-ozjeA3I(android.graphics.Bitmap, androidx.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
-    method public static void assertShape-xgsQ8N8(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertPixels(android.graphics.Bitmap, androidx.compose.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
+    method public static void assertShape-LBqplUo(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertShape-WOPiG5A(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
     method public static boolean contains(androidx.compose.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
-    method public static void assertIsEqualTo-552lcfo(float, float expected, String subject = "", float tolerance = null(0.5));
-    method public static void assertIsNotEqualTo-552lcfo(float, float unexpected, String subject = "", float tolerance = null(0.5));
-    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-jINh5Q8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
+    method public static void assertIsEqualTo-nR2IGDg(float, float expected, String subject = "", float tolerance = null(0.5));
+    method public static void assertIsNotEqualTo-nR2IGDg(float, float unexpected, String subject = "", float tolerance = null(0.5));
+    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-cUvJKr8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
     method public static float getAlignmentLinePosition(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.AlignmentLine line);
-    method public static androidx.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.compose.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
   }
 
   public interface ComposeBenchmarkScope<T> extends androidx.ui.test.ComposeExecutionControl {
@@ -137,11 +137,11 @@
   public interface ComposeTestRule extends org.junit.rules.TestRule {
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public abstract androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract android.util.DisplayMetrics displayMetrics;
   }
 
@@ -230,7 +230,7 @@
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
     method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
@@ -245,14 +245,14 @@
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
     method public static inline float getLeft(androidx.ui.test.BaseGestureScope);
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
@@ -261,32 +261,32 @@
     method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
@@ -415,11 +415,11 @@
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public androidx.ui.unit.Density density;
+    property public androidx.compose.ui.unit.Density density;
     property public android.util.DisplayMetrics displayMetrics;
   }
 
diff --git a/ui/ui-test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
index fd6956a..85bf33d 100644
--- a/ui/ui-test/api/restricted_current.txt
+++ b/ui/ui-test/api/restricted_current.txt
@@ -59,26 +59,26 @@
 
   public final class BitmapHelpersKt {
     method public static void assertPixelColor-eWrXCG0(android.graphics.Bitmap, long expected, int x, int y, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.Color,java.lang.String> error = { color -> return "Pixel(" + x + ", " + y + ") expected to be " + expected + ", but was " + color });
-    method public static void assertPixels(android.graphics.Bitmap, androidx.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
-    method public static void assertShape-ozjeA3I(android.graphics.Bitmap, androidx.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
-    method public static void assertShape-xgsQ8N8(android.graphics.Bitmap, androidx.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertPixels(android.graphics.Bitmap, androidx.compose.ui.unit.IntSize? expectedSize = null, kotlin.jvm.functions.Function1<? super androidx.compose.ui.unit.IntOffset,androidx.compose.ui.graphics.Color> expectedColorProvider);
+    method public static void assertShape-LBqplUo(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, androidx.compose.ui.graphics.Shape shape, long shapeColor, long backgroundColor, androidx.compose.ui.graphics.Shape backgroundShape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float sizeX = width.toFloat(), float sizeY = height.toFloat(), float shapeSizeX = sizeX, float shapeSizeY = sizeY, float centerX = width / 2.0, float centerY = height / 2.0, float shapeOverlapPixelCount = 1.0f);
+    method public static void assertShape-WOPiG5A(android.graphics.Bitmap, androidx.compose.ui.unit.Density density, float horizontalPadding, float verticalPadding, long backgroundColor, long shapeColor, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, float shapeOverlapPixelCount = 1.0f);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(androidx.ui.test.SemanticsNodeInteraction);
     method @RequiresApi(android.os.Build.VERSION_CODES.O) public static android.graphics.Bitmap captureToBitmap(android.view.View);
     method public static boolean contains(androidx.compose.ui.graphics.Path, androidx.compose.ui.geometry.Offset offset);
   }
 
   public final class BoundsAssertionsKt {
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
-    method public static void assertIsEqualTo-552lcfo(float, float expected, String subject = "", float tolerance = null(0.5));
-    method public static void assertIsNotEqualTo-552lcfo(float, float unexpected, String subject = "", float tolerance = null(0.5));
-    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-jINh5Q8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
-    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-Gf70O4E(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinHeight);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertHeightIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedHeight);
+    method public static void assertIsEqualTo-nR2IGDg(float, float expected, String subject = "", float tolerance = null(0.5));
+    method public static void assertIsNotEqualTo-nR2IGDg(float, float unexpected, String subject = "", float tolerance = null(0.5));
+    method public static androidx.ui.test.SemanticsNodeInteraction assertLeftPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertPositionInRootIsEqualTo-cUvJKr8(androidx.ui.test.SemanticsNodeInteraction, float expectedLeft, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertTopPositionInRootIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedTop);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsAtLeast-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedMinWidth);
+    method public static androidx.ui.test.SemanticsNodeInteraction assertWidthIsEqualTo-7iZCdLk(androidx.ui.test.SemanticsNodeInteraction, float expectedWidth);
     method public static float getAlignmentLinePosition(androidx.ui.test.SemanticsNodeInteraction, androidx.ui.core.AlignmentLine line);
-    method public static androidx.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
+    method public static androidx.compose.ui.unit.Bounds getBoundsInRoot(androidx.ui.test.SemanticsNodeInteraction);
   }
 
   public interface ComposeBenchmarkScope<T> extends androidx.ui.test.ComposeExecutionControl {
@@ -137,11 +137,11 @@
   public interface ComposeTestRule extends org.junit.rules.TestRule {
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public abstract androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public abstract androidx.ui.unit.Density density;
+    property public abstract androidx.compose.ui.unit.Density density;
     property public abstract android.util.DisplayMetrics displayMetrics;
   }
 
@@ -230,7 +230,7 @@
   public final class GestureScopeKt {
     method public static void cancel(androidx.ui.test.PartialGestureScope);
     method public static void click(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method public static void doubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method public static void down(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void down(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static inline float getBottom(androidx.ui.test.BaseGestureScope);
@@ -245,14 +245,14 @@
     method public static inline int getHeight(androidx.ui.test.BaseGestureScope);
     method public static inline float getLeft(androidx.ui.test.BaseGestureScope);
     method public static inline float getRight(androidx.ui.test.BaseGestureScope);
-    method public static androidx.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
+    method public static androidx.compose.ui.unit.IntSize getSize(androidx.ui.test.BaseGestureScope);
     method public static inline float getTop(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopCenter(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopLeft(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset getTopRight(androidx.ui.test.BaseGestureScope);
     method public static inline int getWidth(androidx.ui.test.BaseGestureScope);
     method public static androidx.compose.ui.geometry.Offset localToGlobal(androidx.ui.test.BaseGestureScope, androidx.compose.ui.geometry.Offset position);
-    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method public static void longClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method public static void move(androidx.ui.test.PartialGestureScope);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method public static void moveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
@@ -261,32 +261,32 @@
     method public static void moveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method public static void moveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
     method public static androidx.compose.ui.geometry.Offset percentOffset(androidx.ui.test.BaseGestureScope, @FloatRange(from=-1.0, to=1.0) float x = 0f, @FloatRange(from=-1.0, to=1.0) float y = 0f);
-    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
+    method public static void pinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
     method @Deprecated public static void sendCancel(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center);
-    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
+    method @Deprecated public static void sendDoubleClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration delay = androidx.ui.test.GestureScopeKt.doubleClickDelay);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendDown(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
+    method @Deprecated public static void sendLongClick(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset position = center, androidx.compose.ui.unit.Duration duration = androidx.ui.core.gesture.ConstantsKt.LongPressTimeout + 100.milliseconds);
     method @Deprecated public static void sendMove(androidx.ui.test.PartialGestureScope);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveBy(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset delta);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, int pointerId, androidx.compose.ui.geometry.Offset position);
     method @Deprecated public static void sendMoveTo(androidx.ui.test.PartialGestureScope, androidx.compose.ui.geometry.Offset position);
-    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.ui.unit.Duration duration = 400.milliseconds);
-    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendPinch(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start0, androidx.compose.ui.geometry.Offset end0, androidx.compose.ui.geometry.Offset start1, androidx.compose.ui.geometry.Offset end1, androidx.compose.ui.unit.Duration duration = 400.milliseconds);
+    method @Deprecated public static void sendSwipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendSwipeDown(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeLeft(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeRight(androidx.ui.test.GestureScope);
     method @Deprecated public static void sendSwipeUp(androidx.ui.test.GestureScope);
-    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method @Deprecated public static void sendSwipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method @Deprecated public static void sendUp(androidx.ui.test.PartialGestureScope, int pointerId = 0);
-    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipe(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void swipeDown(androidx.ui.test.GestureScope);
     method public static void swipeLeft(androidx.ui.test.GestureScope);
     method public static void swipeRight(androidx.ui.test.GestureScope);
     method public static void swipeUp(androidx.ui.test.GestureScope);
-    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.ui.unit.Duration duration = 200.milliseconds);
+    method public static void swipeWithVelocity(androidx.ui.test.GestureScope, androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset end, @FloatRange(from=0.0) float endVelocity, androidx.compose.ui.unit.Duration duration = 200.milliseconds);
     method public static void up(androidx.ui.test.PartialGestureScope, int pointerId = 0);
   }
 
@@ -415,11 +415,11 @@
     method @androidx.ui.test.ExperimentalTesting public androidx.ui.test.ComposeTestCaseSetup forGivenTestCase(androidx.ui.test.ComposeTestCase testCase);
     method public androidx.test.ext.junit.rules.ActivityScenarioRule<T> getActivityRule();
     method public androidx.ui.test.AnimationClockTestRule getClockTestRule();
-    method public androidx.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.Density getDensity();
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> composable);
     property public androidx.ui.test.AnimationClockTestRule clockTestRule;
-    property public androidx.ui.unit.Density density;
+    property public androidx.compose.ui.unit.Density density;
     property public android.util.DisplayMetrics displayMetrics;
   }
 
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/BitmapCapturingTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/BitmapCapturingTest.kt
index be8fcee..b7b4e2a 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/BitmapCapturingTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/BitmapCapturingTest.kt
@@ -32,8 +32,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.test.android.AndroidComposeTestRule
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTest.kt
index 7f6063e..182dbca 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/IsDisplayedTest.kt
@@ -48,8 +48,8 @@
 import androidx.compose.foundation.layout.width
 import androidx.ui.test.android.AndroidComposeTestRule
 import androidx.ui.test.util.BoundaryNode
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import org.hamcrest.CoreMatchers.allOf
 import org.hamcrest.CoreMatchers.not
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt
index 87b57a8..b0a3a205 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/LayoutCoordinatesHelperTest.kt
@@ -28,7 +28,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
index 668f889..19a57a3 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ScrollToTest.kt
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
 import androidx.ui.semantics.scrollBy
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth
 import org.junit.Assert
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/assertions/BoundsAssertionsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/assertions/BoundsAssertionsTest.kt
index ec85669..4100f46 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/assertions/BoundsAssertionsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/assertions/BoundsAssertionsTest.kt
@@ -42,7 +42,7 @@
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
 import androidx.ui.test.util.expectError
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt
index 6427813..cbe3b6c 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendDoubleClickTest.kt
@@ -32,8 +32,8 @@
 import androidx.ui.test.util.SinglePointerInputRecorder
 import androidx.ui.test.util.recordedDuration
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.Duration
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt
index 6510fec9..643c85a 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendLongClickTest.kt
@@ -35,8 +35,8 @@
 import androidx.ui.test.util.isAlmostEqualTo
 import androidx.ui.test.util.recordedDuration
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.Duration
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt
index a182049..61b2f89 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendPinchTest.kt
@@ -31,8 +31,8 @@
 import androidx.ui.test.util.MultiPointerInputRecorder
 import androidx.ui.test.util.assertTimestampsAreIncreasing
 import androidx.ui.test.util.isMonotonicBetween
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt
index 3911be3..53712a7 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeTest.kt
@@ -43,7 +43,7 @@
 import androidx.ui.test.util.assertSame
 import androidx.ui.test.util.assertTimestampsAreIncreasing
 import androidx.ui.test.util.verify
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt
index a412965..79f0959 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendSwipeVelocityTest.kt
@@ -37,8 +37,8 @@
 import androidx.ui.test.util.isAlmostEqualTo
 import androidx.ui.test.util.isMonotonicBetween
 import androidx.ui.test.util.recordedDuration
-import androidx.ui.unit.Duration
-import androidx.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.inMilliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt
index 3c09151..ea42808 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/DelayTest.kt
@@ -24,9 +24,9 @@
 import androidx.ui.test.InputDispatcher.InputDispatcherTestRule
 import androidx.ui.test.android.AndroidInputDispatcher
 import androidx.ui.test.util.MotionEventRecorder
-import androidx.ui.unit.Duration
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt
index f84e706..59b0f07 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeLineTest.kt
@@ -27,7 +27,7 @@
 import androidx.ui.test.util.moveEvents
 import androidx.ui.test.util.splitsDurationEquallyInto
 import androidx.ui.test.util.verify
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt
index 99b7a09..71132a4 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithDurationTest.kt
@@ -26,9 +26,9 @@
 import androidx.ui.test.util.MotionEventRecorder
 import androidx.ui.test.util.assertHasValidEventTimes
 import androidx.ui.test.util.verify
-import androidx.ui.unit.Duration
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt
index 99c97b2..f68f4c6 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesAndEventPeriodTest.kt
@@ -30,8 +30,8 @@
 import androidx.ui.test.util.relativeTime
 import androidx.ui.test.util.splitsDurationEquallyInto
 import androidx.ui.test.util.verify
-import androidx.ui.unit.Duration
-import androidx.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.inMilliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt
index ecabcac..94b79a5 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/inputdispatcher/SendSwipeWithKeyTimesTest.kt
@@ -25,9 +25,9 @@
 import androidx.ui.test.util.MotionEventRecorder
 import androidx.ui.test.util.assertHasValidEventTimes
 import androidx.ui.test.util.verify
-import androidx.ui.unit.Duration
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt
index 4636ca7..763f77e 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveByTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.test.util.assertTimestampsAreIncreasing
 import androidx.ui.test.util.expectError
 import androidx.ui.test.util.verify
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt
index b1a73c3..999c700 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/partialgesturescope/SendMoveToTest.kt
@@ -34,7 +34,7 @@
 import androidx.ui.test.util.assertTimestampsAreIncreasing
 import androidx.ui.test.util.expectError
 import androidx.ui.test.util.verify
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.milliseconds
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Rule
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt
index ac30f9d..e14d0e7 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/PointerInputs.kt
@@ -24,9 +24,9 @@
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.Duration
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.Uptime
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.Uptime
 import com.google.common.truth.Truth.assertThat
 
 data class DataPoint(val id: PointerId, val data: PointerInputData) {
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
index 4ab61cd..2c235db 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Assertions.kt
@@ -26,9 +26,9 @@
 import androidx.compose.ui.geometry.Rect
 import androidx.ui.semantics.AccessibilityRangeInfo
 import androidx.ui.semantics.SemanticsProperties
-import androidx.ui.unit.height
-import androidx.ui.unit.toRect
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.toRect
+import androidx.compose.ui.unit.width
 
 /**
  * Asserts that the current semantics node has hidden property set to true.
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt b/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt
index b53d6ee..9c76ff3 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/BitmapHelpers.kt
@@ -32,12 +32,12 @@
 import androidx.compose.ui.graphics.addOutline
 import androidx.compose.ui.graphics.asAndroidPath
 import androidx.ui.test.android.captureRegionToBitmap
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.IntOffset
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.IntOffset
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
 import kotlin.math.roundToInt
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/BoundsAssertions.kt b/ui/ui-test/src/main/java/androidx/ui/test/BoundsAssertions.kt
index 27fa5a9..8ae8372 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/BoundsAssertions.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/BoundsAssertions.kt
@@ -20,13 +20,13 @@
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.semantics.SemanticsNode
-import androidx.ui.unit.Bounds
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.height
-import androidx.ui.unit.toSize
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.Bounds
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.toSize
+import androidx.compose.ui.unit.width
 import kotlin.math.absoluteValue
 
 private const val floatTolerance = 0.5f
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
index b9e7874..4779f3d 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestRule.kt
@@ -20,7 +20,7 @@
 import androidx.activity.ComponentActivity
 import androidx.compose.Composable
 import androidx.ui.test.android.createAndroidComposeRule
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import org.junit.rules.TestRule
 
 /**
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt b/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt
index c940d75..62ed962 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/GestureScope.kt
@@ -24,10 +24,10 @@
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.lerp
 import androidx.ui.test.InputDispatcher.Companion.eventPeriod
-import androidx.ui.unit.Duration
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import androidx.ui.util.lerp
 import kotlin.math.atan2
 import kotlin.math.ceil
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt b/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt
index 3a45f97..5a9fbca 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/InputDispatcher.kt
@@ -23,9 +23,9 @@
 import androidx.compose.ui.geometry.lerp
 import androidx.ui.test.android.AndroidInputDispatcher
 import androidx.ui.test.android.AndroidOwnerRegistry
-import androidx.ui.unit.Duration
-import androidx.ui.unit.inMilliseconds
-import androidx.ui.unit.milliseconds
+import androidx.compose.ui.unit.Duration
+import androidx.compose.ui.unit.inMilliseconds
+import androidx.compose.ui.unit.milliseconds
 import org.junit.rules.TestRule
 import org.junit.runner.Description
 import org.junit.runners.model.Statement
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/Output.kt b/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
index 88be6de..21a8417 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/Output.kt
@@ -22,8 +22,8 @@
 import androidx.ui.core.semantics.SemanticsNode
 import androidx.ui.semantics.SemanticsProperties
 import androidx.compose.ui.text.AnnotatedString
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.toSize
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.toSize
 
 /**
  * Prints all the semantics nodes information it holds into string.
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
index 25660e88..8a5f5b7 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestRule.kt
@@ -38,7 +38,7 @@
 import androidx.ui.test.isOnUiThread
 import androidx.ui.test.runOnUiThread
 import androidx.ui.test.waitForIdle
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import org.junit.runner.Description
 import org.junit.runners.model.Statement
 
diff --git a/ui/ui-text-core/api/0.1.0-dev16.txt b/ui/ui-text-core/api/0.1.0-dev16.txt
index 1f80a33..97ba324 100644
--- a/ui/ui-text-core/api/0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/0.1.0-dev16.txt
@@ -73,7 +73,7 @@
 
   public final class MultiParagraph {
     ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -118,7 +118,7 @@
   }
 
   public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
@@ -190,11 +190,11 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
@@ -203,7 +203,7 @@
     method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
     method public androidx.compose.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-QrGfzA0(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
     method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
@@ -220,7 +220,7 @@
     method public long component1();
     method public long component2();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
@@ -260,7 +260,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-JWzHW74(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-D5kMcog(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -298,21 +298,21 @@
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
     method public androidx.compose.ui.text.AnnotatedString component1();
-    method public androidx.ui.core.Constraints component10();
+    method public androidx.compose.ui.unit.Constraints component10();
     method public androidx.compose.ui.text.TextStyle component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
     method public androidx.compose.ui.text.style.TextOverflow component6();
-    method public androidx.ui.unit.Density component7();
-    method public androidx.ui.core.LayoutDirection component8();
+    method public androidx.compose.ui.unit.Density component7();
+    method public androidx.compose.ui.unit.LayoutDirection component8();
     method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
     method public androidx.compose.ui.text.style.TextOverflow getOverflow();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
@@ -324,8 +324,8 @@
 
   public final class TextLayoutResult {
     method public androidx.compose.ui.text.TextLayoutInput component1();
-    method public androidx.ui.unit.IntSize component3();
-    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.unit.IntSize component3();
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.compose.ui.unit.IntSize size);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -349,7 +349,7 @@
     method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
@@ -417,7 +417,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-Ph_hb9A(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-4skVB9c(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -454,7 +454,7 @@
 
   public final class TextStyleKt {
     method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
-    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
   }
 
   public interface Typeface {
@@ -911,8 +911,8 @@
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.compose.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.compose.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
@@ -1039,7 +1039,7 @@
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-8E83U4Q(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
     field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
diff --git a/ui/ui-text-core/api/current.txt b/ui/ui-text-core/api/current.txt
index 1f80a33..97ba324 100644
--- a/ui/ui-text-core/api/current.txt
+++ b/ui/ui-text-core/api/current.txt
@@ -73,7 +73,7 @@
 
   public final class MultiParagraph {
     ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -118,7 +118,7 @@
   }
 
   public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
@@ -190,11 +190,11 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
@@ -203,7 +203,7 @@
     method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
     method public androidx.compose.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-QrGfzA0(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
     method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
@@ -220,7 +220,7 @@
     method public long component1();
     method public long component2();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
@@ -260,7 +260,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-JWzHW74(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-D5kMcog(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -298,21 +298,21 @@
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
     method public androidx.compose.ui.text.AnnotatedString component1();
-    method public androidx.ui.core.Constraints component10();
+    method public androidx.compose.ui.unit.Constraints component10();
     method public androidx.compose.ui.text.TextStyle component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
     method public androidx.compose.ui.text.style.TextOverflow component6();
-    method public androidx.ui.unit.Density component7();
-    method public androidx.ui.core.LayoutDirection component8();
+    method public androidx.compose.ui.unit.Density component7();
+    method public androidx.compose.ui.unit.LayoutDirection component8();
     method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
     method public androidx.compose.ui.text.style.TextOverflow getOverflow();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
@@ -324,8 +324,8 @@
 
   public final class TextLayoutResult {
     method public androidx.compose.ui.text.TextLayoutInput component1();
-    method public androidx.ui.unit.IntSize component3();
-    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.unit.IntSize component3();
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.compose.ui.unit.IntSize size);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -349,7 +349,7 @@
     method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
@@ -417,7 +417,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-Ph_hb9A(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-4skVB9c(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -454,7 +454,7 @@
 
   public final class TextStyleKt {
     method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
-    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
   }
 
   public interface Typeface {
@@ -911,8 +911,8 @@
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.compose.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.compose.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
@@ -1039,7 +1039,7 @@
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-8E83U4Q(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
     field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
diff --git a/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt
index 1f80a33..97ba324 100644
--- a/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -73,7 +73,7 @@
 
   public final class MultiParagraph {
     ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -118,7 +118,7 @@
   }
 
   public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
@@ -190,11 +190,11 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
@@ -203,7 +203,7 @@
     method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
     method public androidx.compose.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-QrGfzA0(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
     method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
@@ -220,7 +220,7 @@
     method public long component1();
     method public long component2();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
@@ -260,7 +260,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-JWzHW74(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-D5kMcog(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -298,21 +298,21 @@
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
     method public androidx.compose.ui.text.AnnotatedString component1();
-    method public androidx.ui.core.Constraints component10();
+    method public androidx.compose.ui.unit.Constraints component10();
     method public androidx.compose.ui.text.TextStyle component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
     method public androidx.compose.ui.text.style.TextOverflow component6();
-    method public androidx.ui.unit.Density component7();
-    method public androidx.ui.core.LayoutDirection component8();
+    method public androidx.compose.ui.unit.Density component7();
+    method public androidx.compose.ui.unit.LayoutDirection component8();
     method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
     method public androidx.compose.ui.text.style.TextOverflow getOverflow();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
@@ -324,8 +324,8 @@
 
   public final class TextLayoutResult {
     method public androidx.compose.ui.text.TextLayoutInput component1();
-    method public androidx.ui.unit.IntSize component3();
-    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.unit.IntSize component3();
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.compose.ui.unit.IntSize size);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -349,7 +349,7 @@
     method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
@@ -417,7 +417,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-Ph_hb9A(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-4skVB9c(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -454,7 +454,7 @@
 
   public final class TextStyleKt {
     method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
-    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
   }
 
   public interface Typeface {
@@ -911,8 +911,8 @@
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.compose.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.compose.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
@@ -1039,7 +1039,7 @@
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-8E83U4Q(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
     field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
diff --git a/ui/ui-text-core/api/public_plus_experimental_current.txt b/ui/ui-text-core/api/public_plus_experimental_current.txt
index 1f80a33..97ba324 100644
--- a/ui/ui-text-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-text-core/api/public_plus_experimental_current.txt
@@ -73,7 +73,7 @@
 
   public final class MultiParagraph {
     ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -118,7 +118,7 @@
   }
 
   public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
@@ -190,11 +190,11 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
@@ -203,7 +203,7 @@
     method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
     method public androidx.compose.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-QrGfzA0(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
     method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
@@ -220,7 +220,7 @@
     method public long component1();
     method public long component2();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
@@ -260,7 +260,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-JWzHW74(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-D5kMcog(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -298,21 +298,21 @@
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
     method public androidx.compose.ui.text.AnnotatedString component1();
-    method public androidx.ui.core.Constraints component10();
+    method public androidx.compose.ui.unit.Constraints component10();
     method public androidx.compose.ui.text.TextStyle component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
     method public androidx.compose.ui.text.style.TextOverflow component6();
-    method public androidx.ui.unit.Density component7();
-    method public androidx.ui.core.LayoutDirection component8();
+    method public androidx.compose.ui.unit.Density component7();
+    method public androidx.compose.ui.unit.LayoutDirection component8();
     method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
     method public androidx.compose.ui.text.style.TextOverflow getOverflow();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
@@ -324,8 +324,8 @@
 
   public final class TextLayoutResult {
     method public androidx.compose.ui.text.TextLayoutInput component1();
-    method public androidx.ui.unit.IntSize component3();
-    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.unit.IntSize component3();
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.compose.ui.unit.IntSize size);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -349,7 +349,7 @@
     method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
@@ -417,7 +417,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-Ph_hb9A(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-4skVB9c(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -454,7 +454,7 @@
 
   public final class TextStyleKt {
     method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
-    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
   }
 
   public interface Typeface {
@@ -911,8 +911,8 @@
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.compose.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.compose.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
@@ -1039,7 +1039,7 @@
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-8E83U4Q(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
     field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
diff --git a/ui/ui-text-core/api/restricted_0.1.0-dev16.txt b/ui/ui-text-core/api/restricted_0.1.0-dev16.txt
index 1f80a33..97ba324 100644
--- a/ui/ui-text-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/restricted_0.1.0-dev16.txt
@@ -73,7 +73,7 @@
 
   public final class MultiParagraph {
     ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -118,7 +118,7 @@
   }
 
   public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
@@ -190,11 +190,11 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
@@ -203,7 +203,7 @@
     method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
     method public androidx.compose.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-QrGfzA0(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
     method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
@@ -220,7 +220,7 @@
     method public long component1();
     method public long component2();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
@@ -260,7 +260,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-JWzHW74(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-D5kMcog(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -298,21 +298,21 @@
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
     method public androidx.compose.ui.text.AnnotatedString component1();
-    method public androidx.ui.core.Constraints component10();
+    method public androidx.compose.ui.unit.Constraints component10();
     method public androidx.compose.ui.text.TextStyle component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
     method public androidx.compose.ui.text.style.TextOverflow component6();
-    method public androidx.ui.unit.Density component7();
-    method public androidx.ui.core.LayoutDirection component8();
+    method public androidx.compose.ui.unit.Density component7();
+    method public androidx.compose.ui.unit.LayoutDirection component8();
     method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
     method public androidx.compose.ui.text.style.TextOverflow getOverflow();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
@@ -324,8 +324,8 @@
 
   public final class TextLayoutResult {
     method public androidx.compose.ui.text.TextLayoutInput component1();
-    method public androidx.ui.unit.IntSize component3();
-    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.unit.IntSize component3();
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.compose.ui.unit.IntSize size);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -349,7 +349,7 @@
     method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
@@ -417,7 +417,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-Ph_hb9A(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-4skVB9c(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -454,7 +454,7 @@
 
   public final class TextStyleKt {
     method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
-    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
   }
 
   public interface Typeface {
@@ -911,8 +911,8 @@
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.compose.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.compose.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
@@ -1039,7 +1039,7 @@
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-8E83U4Q(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
     field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
diff --git a/ui/ui-text-core/api/restricted_current.txt b/ui/ui-text-core/api/restricted_current.txt
index 1f80a33..97ba324 100644
--- a/ui/ui-text-core/api/restricted_current.txt
+++ b/ui/ui-text-core/api/restricted_current.txt
@@ -73,7 +73,7 @@
 
   public final class MultiParagraph {
     ctor public MultiParagraph(androidx.compose.ui.text.MultiParagraphIntrinsics intrinsics, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints);
-    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraph(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean ellipsis, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -118,7 +118,7 @@
   }
 
   public final class MultiParagraphIntrinsics implements androidx.compose.ui.text.ParagraphIntrinsics {
-    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    ctor public MultiParagraphIntrinsics(androidx.compose.ui.text.AnnotatedString annotatedString, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public androidx.compose.ui.text.AnnotatedString getAnnotatedString();
     method public float getMaxIntrinsicWidth();
     method public float getMinIntrinsicWidth();
@@ -190,11 +190,11 @@
   }
 
   public final class ParagraphIntrinsicsKt {
-    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.ParagraphIntrinsics ParagraphIntrinsics(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
   }
 
   public final class ParagraphKt {
-    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
+    method public static androidx.compose.ui.text.Paragraph Paragraph(String text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles = listOf(), java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders = listOf(), int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints, androidx.compose.ui.unit.Density density, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader);
     method public static androidx.compose.ui.text.Paragraph Paragraph(androidx.compose.ui.text.ParagraphIntrinsics paragraphIntrinsics, int maxLines = 2147483647, boolean ellipsis = false, androidx.compose.ui.text.ParagraphConstraints constraints);
   }
 
@@ -203,7 +203,7 @@
     method public androidx.compose.ui.text.style.TextDirection? component2();
     method public long component3();
     method public androidx.compose.ui.text.style.TextIndent? component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-yfYFPjM(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.ParagraphStyle copy-QrGfzA0(androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getLineHeight();
     method public androidx.compose.ui.text.style.TextAlign? getTextAlign();
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
@@ -220,7 +220,7 @@
     method public long component1();
     method public long component2();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-LxtbTAo(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.Placeholder copy-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
     method public long getHeight();
     method public androidx.compose.ui.text.PlaceholderVerticalAlign getPlaceholderVerticalAlign();
     method public long getWidth();
@@ -260,7 +260,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-JWzHW74(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.SpanStyle copy-D5kMcog(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -298,21 +298,21 @@
   }
 
   public final class TextLayoutInput {
-    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
+    ctor public TextLayoutInput(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
     method public androidx.compose.ui.text.AnnotatedString component1();
-    method public androidx.ui.core.Constraints component10();
+    method public androidx.compose.ui.unit.Constraints component10();
     method public androidx.compose.ui.text.TextStyle component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> component3();
     method public int component4();
     method public boolean component5();
     method public androidx.compose.ui.text.style.TextOverflow component6();
-    method public androidx.ui.unit.Density component7();
-    method public androidx.ui.core.LayoutDirection component8();
+    method public androidx.compose.ui.unit.Density component7();
+    method public androidx.compose.ui.unit.LayoutDirection component8();
     method public androidx.compose.ui.text.font.Font.ResourceLoader component9();
-    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.ui.unit.Density density, androidx.ui.core.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.ui.core.Constraints constraints);
-    method public androidx.ui.core.Constraints getConstraints();
-    method public androidx.ui.unit.Density getDensity();
-    method public androidx.ui.core.LayoutDirection getLayoutDirection();
+    method public androidx.compose.ui.text.TextLayoutInput copy(androidx.compose.ui.text.AnnotatedString text, androidx.compose.ui.text.TextStyle style, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> placeholders, int maxLines, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, androidx.compose.ui.unit.Density density, androidx.compose.ui.unit.LayoutDirection layoutDirection, androidx.compose.ui.text.font.Font.ResourceLoader resourceLoader, androidx.compose.ui.unit.Constraints constraints);
+    method public androidx.compose.ui.unit.Constraints getConstraints();
+    method public androidx.compose.ui.unit.Density getDensity();
+    method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public int getMaxLines();
     method public androidx.compose.ui.text.style.TextOverflow getOverflow();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>> getPlaceholders();
@@ -324,8 +324,8 @@
 
   public final class TextLayoutResult {
     method public androidx.compose.ui.text.TextLayoutInput component1();
-    method public androidx.ui.unit.IntSize component3();
-    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.ui.unit.IntSize size);
+    method public androidx.compose.ui.unit.IntSize component3();
+    method public androidx.compose.ui.text.TextLayoutResult copy(androidx.compose.ui.text.TextLayoutInput layoutInput, androidx.compose.ui.text.MultiParagraph multiParagraph, androidx.compose.ui.unit.IntSize size);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getBidiRunDirection(int offset);
     method public androidx.compose.ui.geometry.Rect getBoundingBox(int offset);
     method public androidx.compose.ui.geometry.Rect getCursorRect(int offset);
@@ -349,7 +349,7 @@
     method public androidx.compose.ui.text.style.ResolvedTextDirection getParagraphDirection(int offset);
     method public androidx.compose.ui.graphics.Path getPathForRange(int start, int end);
     method public java.util.List<androidx.compose.ui.geometry.Rect> getPlaceholderRects();
-    method public androidx.ui.unit.IntSize getSize();
+    method public androidx.compose.ui.unit.IntSize getSize();
     method public androidx.compose.ui.text.TextRange getWordBoundary(int offset);
     property public final boolean didOverflowHeight;
     property public final boolean didOverflowWidth;
@@ -417,7 +417,7 @@
     method public String? component7();
     method public long component8();
     method public androidx.compose.ui.text.style.BaselineShift? component9();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-Ph_hb9A(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.TextStyle copy-4skVB9c(long color, long fontSize, androidx.compose.ui.text.font.FontWeight? fontWeight, androidx.compose.ui.text.font.FontStyle? fontStyle, androidx.compose.ui.text.font.FontSynthesis? fontSynthesis, androidx.compose.ui.text.font.FontFamily? fontFamily, String? fontFeatureSettings, long letterSpacing, androidx.compose.ui.text.style.BaselineShift? baselineShift, androidx.compose.ui.text.style.TextGeometricTransform? textGeometricTransform, androidx.compose.ui.text.intl.LocaleList? localeList, long background, androidx.compose.ui.text.style.TextDecoration? textDecoration, androidx.compose.ui.graphics.Shadow? shadow, androidx.compose.ui.text.style.TextAlign? textAlign, androidx.compose.ui.text.style.TextDirection? textDirection, long lineHeight, androidx.compose.ui.text.style.TextIndent? textIndent);
     method public long getBackground();
     method public androidx.compose.ui.text.style.BaselineShift? getBaselineShift();
     method public long getColor();
@@ -454,7 +454,7 @@
 
   public final class TextStyleKt {
     method public static androidx.compose.ui.text.TextStyle lerp(androidx.compose.ui.text.TextStyle start, androidx.compose.ui.text.TextStyle stop, float fraction);
-    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.ui.core.LayoutDirection direction);
+    method public static androidx.compose.ui.text.TextStyle resolveDefaults(androidx.compose.ui.text.TextStyle style, androidx.compose.ui.unit.LayoutDirection direction);
   }
 
   public interface Typeface {
@@ -911,8 +911,8 @@
   }
 
   public final class AndroidParagraphIntrinsicsKt {
-    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
-    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
+    method @Deprecated public static kotlin.jvm.functions.Function6<java.lang.String,androidx.compose.ui.text.TextStyle,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,androidx.compose.ui.unit.Density,androidx.compose.ui.text.font.Font.ResourceLoader,androidx.compose.ui.text.ParagraphIntrinsics> getParagraphIntrinsicsActualFactory();
+    method @Deprecated public static void setParagraphIntrinsicsActualFactory(kotlin.jvm.functions.Function6<? super java.lang.String,? super androidx.compose.ui.text.TextStyle,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>>,? super java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.Placeholder>>,? super androidx.compose.ui.unit.Density,? super androidx.compose.ui.text.font.Font.ResourceLoader,? extends androidx.compose.ui.text.ParagraphIntrinsics> p);
   }
 
   public final class AndroidParagraphKt {
@@ -1039,7 +1039,7 @@
   @androidx.compose.Immutable public final class TextIndent {
     method public long component1();
     method public long component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-gL_aCS0(long firstLine, long restLine);
+    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextIndent copy-8E83U4Q(long firstLine, long restLine);
     method public long getFirstLine();
     method public long getRestLine();
     field public static final androidx.compose.ui.text.style.TextIndent.Companion Companion;
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt
index c0cc043..67777b3 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/AnnotatedStringBuilderSamples.kt
@@ -26,7 +26,7 @@
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextIndent
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Sampled
 fun AnnotatedStringConstructorSample() {
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
index 9f1f9c2..a48ab71 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.ui.text.style.BaselineShift
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Sampled
 @Composable
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt
index b37cec7..4ac3070 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/ParagraphStyleSamples.kt
@@ -24,7 +24,7 @@
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Sampled
 @Composable
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt
index 75ec618..728b40d 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/SpanStyleSamples.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Sampled
 @Composable
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt
index b62f75c..1f11713 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextStyleSamples.kt
@@ -25,8 +25,8 @@
 import androidx.compose.ui.text.font.FontStyle
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextDecoration
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 
 @Sampled
 @Composable
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
index b5ea5ce..796ee0e 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTest.kt
@@ -30,10 +30,10 @@
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Test
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
index e71ea3e..ac650f0 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/MultiParagraphIntegrationTextDirectionTest.kt
@@ -22,9 +22,9 @@
 import androidx.compose.ui.text.font.asFontFamily
 import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.compose.ui.text.style.TextDirection
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
index 3bf564c..cf0b519 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTest.kt
@@ -40,10 +40,10 @@
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.geometry.Offset
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Test
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
index 1cde843..dfb4539 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntegrationTextDirectionTest.kt
@@ -20,7 +20,7 @@
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import org.junit.After
 import org.junit.Before
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
index 59cc6bc..c4add0d 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphIntrinsicIntegrationTest.kt
@@ -19,9 +19,9 @@
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.compose.ui.text.font.asFontFamily
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt
index ace7224..383f1ce 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/ParagraphPlaceholderIntegrationTest.kt
@@ -18,10 +18,10 @@
 
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.compose.ui.text.font.asFontFamily
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
index 2903164..593f032 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextDelegateIntegrationTest.kt
@@ -19,8 +19,8 @@
 import android.graphics.Bitmap
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Color
@@ -28,8 +28,8 @@
 import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.compose.ui.text.font.asFontFamily
 import androidx.compose.ui.text.matchers.assertThat
-import androidx.ui.unit.Density
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
index 52e33d7..b9ebb6a 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/TextLayoutResultIntegrationTest.kt
@@ -18,15 +18,15 @@
 
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.text.FontTestData.Companion.BASIC_MEASURE_FONT
 import androidx.compose.ui.text.font.asFontFamily
 import androidx.compose.ui.text.matchers.isZero
-import androidx.ui.unit.Density
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
index 72c5c0a..7667ee8 100644
--- a/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
+++ b/ui/ui-text-core/src/androidAndroidTest/kotlin/androidx/compose/ui/text/platform/AndroidParagraphTest.kt
@@ -44,9 +44,9 @@
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.Density
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.atLeastOnce
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
index f3b8b85..ced321b 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraph.kt
@@ -46,7 +46,7 @@
 import androidx.compose.ui.text.android.style.PlaceholderSpan
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.util.annotation.VisibleForTesting
 import java.util.Locale as JavaLocale
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt
index 0dabd95..fc43bf2 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphHelper.kt
@@ -26,8 +26,8 @@
 import androidx.compose.ui.text.platform.extensions.setSpanStyles
 import androidx.compose.ui.text.platform.extensions.setTextIndent
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
 
 @OptIn(InternalPlatformTextApi::class)
 internal fun createCharSequence(
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt
index c38778a..76b3b00 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/AndroidParagraphIntrinsics.kt
@@ -33,7 +33,7 @@
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.platform.extensions.applySpanStyle
 import androidx.compose.ui.text.style.TextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import java.util.Locale
 
 @OptIn(InternalPlatformTextApi::class)
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt
index 191691c..3c92d6e 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/PlaceholderExtensions.kt
@@ -22,9 +22,9 @@
 import androidx.compose.ui.text.PlaceholderVerticalAlign
 import androidx.compose.ui.text.android.InternalPlatformTextApi
 import androidx.compose.ui.text.android.style.PlaceholderSpan
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.TextUnitType
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnitType
 import androidx.ui.util.fastForEach
 
 internal fun Spannable.setPlaceholders(
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt
index 2b43f3e..e9aec9a 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/SpannableExtensions.kt
@@ -57,10 +57,10 @@
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.TextUnitType
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnitType
+import androidx.compose.ui.unit.sp
 import androidx.ui.util.fastForEach
 import kotlin.math.ceil
 import kotlin.math.roundToInt
diff --git a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt
index 0afab5c..69c7fd8 100644
--- a/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt
+++ b/ui/ui-text-core/src/androidMain/kotlin/androidx/compose/ui/text/platform/extensions/TextPaintExtensions.kt
@@ -34,9 +34,9 @@
 import androidx.compose.ui.text.style.BaselineShift
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.TextUnitType
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnitType
 
 internal fun TextPaint.applySpanStyle(
     style: SpanStyle,
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt
index 16e4427..310023d 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/AnnotatedString.kt
@@ -60,7 +60,7 @@
      * @param spanStyles a list of [Range]s that specifies [SpanStyle]s on certain portion of the
      * text. These styles will be applied in the order of the list. And the [SpanStyle]s applied
      * later can override the former styles. Notice that [SpanStyle] attributes which are null or
-     * [androidx.ui.unit.TextUnit.Inherit] won't change the current ones.
+     * [androidx.compose.ui.unit.TextUnit.Inherit] won't change the current ones.
      * @param paragraphStyles a list of [Range]s that specifies [ParagraphStyle]s on certain
      * portion of the text. Each [ParagraphStyle] with a [Range] defines a paragraph of text.
      * It's required that [Range]s of paragraphs don't overlap with each other. If there are gaps
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
index 5699f19..dceb931 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraph.kt
@@ -21,7 +21,7 @@
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.geometry.Offset
 import androidx.ui.util.fastForEach
 import kotlin.math.max
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt
index 5e75b7f..0f1e350 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/MultiParagraphIntrinsics.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.TextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Calculates and provides the intrinsic width and height of text that contains [ParagraphStyle].
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
index bbc0420..26c7ec3 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Paragraph.kt
@@ -21,7 +21,7 @@
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.platform.ActualParagraph
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.geometry.Offset
 
 internal const val DefaultMaxLines = Int.MAX_VALUE
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt
index 5878b1d..cc80f39 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphIntrinsics.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.platform.ActualParagraphIntrinsics
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Calculates and presents the intrinsic width and height of text.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
index f251871b..e6fc119 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/ParagraphStyle.kt
@@ -22,7 +22,7 @@
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextIndent
 import androidx.compose.ui.text.style.lerp
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnit
 
 /**
  * Paragraph styling configuration for a paragraph. The difference between [SpanStyle] and
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt
index b9112d2..3c725f3 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/Placeholder.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text
 
 import androidx.compose.Immutable
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnit
 
 /**
  * A placeholder is a rectangle box inserted into text, which tells the text processor to leave an
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
index 863cd97..bfa98ca 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/SpanStyle.kt
@@ -32,8 +32,8 @@
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.lerp
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.lerp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.lerp
 
 /**
  * Styling configuration for a text span. This configuration only allows character level styling,
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt
index 1a25e78..c97c3d2 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextDelegate.kt
@@ -16,17 +16,17 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
-import androidx.ui.core.constrain
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.constrain
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Paint
 import androidx.compose.ui.text.TextDelegate.Companion.paint
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
 import androidx.ui.util.annotation.VisibleForTesting
 import kotlin.math.ceil
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt
index 5dffdb5..401562c 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutHelper.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 /**
  * Returns true if the this TextLayoutResult can be reused for given parameters.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
index 3f402bc4..62fb7ba 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextLayoutResult.kt
@@ -16,16 +16,16 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Path
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
 
 /**
  * The data class which holds the set of parameters of the text layout computation.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
index 3a37763..7cdfff2 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextStyle.kt
@@ -18,7 +18,7 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.graphics.useOrElse
@@ -33,8 +33,8 @@
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
 import androidx.ui.util.annotation.VisibleForTesting
 
 /** The default font size if none is specified. */
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt
index b7b46b5..8c0e2f0 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/platform/PlatformParagraph.kt
@@ -23,7 +23,7 @@
 import androidx.compose.ui.text.Placeholder
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 
 // TODO(b/157854677): remove after fixing.
 internal expect fun ActualParagraph(
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt
index 41b0cea..55c2345 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDirection.kt
@@ -35,10 +35,11 @@
     /**
      * This value indicates that the text direction depends on the first strong directional
      * character in the text according to the Unicode Bidirectional Algorithm.
-     * * If no strong directional character is present, then [androidx.ui.core.LayoutDirection]
-     * is used to resolve the final TextDirection.
+     * If no strong directional character is present, then
+     * [androidx.compose.ui.unit.LayoutDirection] is used to resolve the final TextDirection.
      * * if used while creating a Paragraph object, [androidx.compose.ui.text.intl.LocaleList] will
-     * be used to resolve the direction as a fallback instead of [androidx.ui.core.LayoutDirection].
+     * be used to resolve the direction as a fallback instead of
+     * [androidx.compose.ui.unit.LayoutDirection].
      */
     Content,
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt
index 9299bac..5a819df9 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextIndent.kt
@@ -18,8 +18,8 @@
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
 import androidx.compose.ui.text.lerpTextUnitInheritable
 
 /**
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt
index 94542d8..58224e3 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringBuilderTest.kt
@@ -20,9 +20,9 @@
 import androidx.compose.ui.text.font.FontStyle
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt
index 95e7d8f..909a52e 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTest.kt
@@ -19,7 +19,7 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.AnnotatedString.Range
 import androidx.compose.ui.text.style.TextAlign
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
index e040811..92eac99 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/AnnotatedStringTransformTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text
 
 import androidx.compose.ui.text.intl.LocaleList
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 import org.junit.Assert.assertEquals
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
index abc5710..1224284c 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/ParagraphStyleTest.kt
@@ -20,9 +20,9 @@
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextIndent
 import androidx.compose.ui.text.style.lerp
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.lerp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.lerp
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt
index 0c30a03..4a74b89 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/PlaceholderTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
 import org.junit.Test
 import org.junit.runner.RunWith
 import org.junit.runners.JUnit4
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
index 9a5e6e1..aa1a11e 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/SpanStyleTest.kt
@@ -28,9 +28,9 @@
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.lerp
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt
index e8a55ad..9d0f00c 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextDelegateTest.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import org.junit.Test
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt
index 501a6a9..034f553 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextLayoutHelperTest.kt
@@ -16,13 +16,13 @@
 
 package androidx.compose.ui.text
 
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
-import androidx.ui.unit.em
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
+import androidx.compose.ui.unit.em
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import org.junit.Before
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt
index 1f54d59..e21a7d1 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleResolveDefaultsTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text
 
 import androidx.compose.ui.text.intl.LocaleList
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
 import androidx.compose.ui.text.font.FontFamily
@@ -30,9 +30,9 @@
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
index ee562ba..b3cb8dc 100644
--- a/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
+++ b/ui/ui-text-core/src/test/java/androidx/compose/ui/text/TextStyleTest.kt
@@ -33,9 +33,9 @@
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
 import androidx.compose.ui.text.style.lerp
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -954,7 +954,7 @@
         val newStyle = lerp(start = style1, stop = style2, fraction = fraction)
 
         assertThat(newStyle.lineHeight).isEqualTo(
-            androidx.ui.unit.lerp(style1.lineHeight, style2.lineHeight, fraction)
+            androidx.compose.ui.unit.lerp(style1.lineHeight, style2.lineHeight, fraction)
         )
     }
 
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt
index 69f5328..ee01b61 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldFocusTransition.kt
@@ -27,7 +27,7 @@
 import androidx.compose.ui.text.input.ImeAction
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Composable
 fun TextFieldFocusTransition() {
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt
index 43e5d69..b36a537 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputFieldTrickyUseCase.kt
@@ -24,7 +24,7 @@
 import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 @Composable
 fun InputFieldTrickyUseCase() {
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt
index cdf1fb5..cd087a0 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeMultiParagraph.kt
@@ -26,7 +26,7 @@
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextIndent
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 
 val lorem = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas fermentum non" +
         " diam sed pretium."
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt
index bc091a47..f928d82 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeText.kt
@@ -47,8 +47,8 @@
 import androidx.compose.ui.text.samples.TextStyleSample
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 
 const val displayText = "Text Demo"
 const val displayTextChinese = "文本演示"
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt
index 4ad4edb..a1db9d5 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelectionSample.kt
@@ -33,8 +33,8 @@
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.ui.text.withStyle
-import androidx.ui.unit.dp
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
 
 val commonStyle = TextStyle(fontSize = 16.sp, color = Color(0xFF9e9e9e), lineHeight = 22.sp)
 val header = TextStyle(fontSize = 22.sp, color = Color(0xFF707070), lineHeight = 36.sp)
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt
index 001a860..a4fcc9e 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeVariousInputField.kt
@@ -20,7 +20,7 @@
 import androidx.compose.emptyContent
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.state
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.id
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt
index c8aea8f..fdc7f9a 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TailFollowingTextField.kt
@@ -25,15 +25,15 @@
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.clipToBounds
-import androidx.ui.core.constrainWidth
+import androidx.compose.ui.unit.constrainWidth
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.ui.text.TextStyle
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.min
 
 @Composable
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt
index 819fd48..27d6378 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/TextFieldWIthScroller.kt
@@ -24,7 +24,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Composable
 @OptIn(ExperimentalFoundationApi::class)
diff --git a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt
index 4768b8e..d76189a 100644
--- a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt
+++ b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/InlineTextContentSample.kt
@@ -29,7 +29,7 @@
 import androidx.compose.ui.text.PlaceholderVerticalAlign
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.foundation.text.appendInlineContent
-import androidx.ui.unit.em
+import androidx.compose.ui.unit.em
 
 @Sampled
 @Composable
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt
index 5490f25..4b7c8b2 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextFieldDelegateIntegrationTest.kt
@@ -21,8 +21,8 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.graphics.Canvas
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Paint
@@ -37,7 +37,7 @@
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.font.ResourceFont
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt
index c0843b2..93f091a 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/TextLayoutTest.kt
@@ -20,7 +20,7 @@
 import androidx.compose.Composable
 import androidx.compose.remember
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
@@ -35,8 +35,8 @@
 import androidx.compose.ui.text.font.font
 import androidx.compose.ui.text.font.test.R
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.mock
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
index 7b4a57756..31a1f20 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/MultiWidgetSelectionDelegateTest.kt
@@ -22,9 +22,9 @@
 import androidx.core.content.res.ResourcesCompat
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.selection.Selectable
 import androidx.ui.core.selection.Selection
 import androidx.ui.test.android.createAndroidComposeRule
@@ -41,11 +41,11 @@
 import androidx.compose.ui.text.font.font
 import androidx.compose.ui.text.font.test.R
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.text.InternalTextApi
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.whenever
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
index 610c2d1..162e0d1 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/SelectionContainerTest.kt
@@ -42,7 +42,7 @@
 import androidx.compose.ui.text.font.asFontFamily
 import androidx.compose.ui.text.font.test.R
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.mock
 import com.nhaarman.mockitokotlin2.times
diff --git a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt
index eb3a5c7..cbe1f54 100644
--- a/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt
+++ b/ui/ui-text/src/androidAndroidTest/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionDelegateTest.kt
@@ -19,8 +19,8 @@
 import androidx.activity.ComponentActivity
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.test.android.createAndroidComposeRule
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.InternalTextApi
@@ -30,9 +30,9 @@
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.asFontFamily
-import androidx.ui.unit.Density
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt
index c25eb91..522a23f 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreText.kt
@@ -23,7 +23,7 @@
 import androidx.compose.remember
 import androidx.compose.setValue
 import androidx.compose.structuralEqualityPolicy
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.FontLoaderAmbient
 import androidx.ui.core.HorizontalAlignmentLine
@@ -55,7 +55,7 @@
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.text.subSequence
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import androidx.ui.util.fastForEach
 import kotlin.math.floor
 import kotlin.math.max
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt
index 343f014..8dd5109 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/InlineTextContent.kt
@@ -53,7 +53,7 @@
  * space. In this [placeholder], the size of the content and how it will be aligned within the
  * text line is defined. When the children composable is measured, its size given in
  * [Placeholder.width] and [Placeholder.height] will be converted into
- * [androidx.ui.core.Constraints] and passed through [androidx.ui.core.Layout].
+ * [androidx.compose.ui.unit.Constraints] and passed through [androidx.ui.core.Layout].
  *
  * @sample androidx.compose.foundation.text.samples.InlineTextContentSample
  * @see CoreText
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
index cc84d01..148a237 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/TextFieldDelegate.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.text
 
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.core.LayoutDirection
-import androidx.ui.core.constrainHeight
+import androidx.compose.ui.unit.LayoutDirection
+import androidx.compose.ui.unit.constrainHeight
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Canvas
@@ -49,7 +49,7 @@
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.Font
 import androidx.compose.ui.text.style.TextDecoration
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import kotlin.jvm.JvmStatic
 import kotlin.math.ceil
 import kotlin.math.roundToInt
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt
index daa8648..7e2a87d 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManager.kt
@@ -41,7 +41,7 @@
 import androidx.compose.foundation.text.TextFieldState
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.style.ResolvedTextDirection
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import kotlin.math.max
 import kotlin.math.min
 
diff --git a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
index 23ed94d..5c35876 100644
--- a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
+++ b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/TextFieldDelegateTest.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation.text
 
-import androidx.ui.core.Constraints
+import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.LayoutCoordinates
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.Canvas
@@ -44,8 +44,8 @@
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.style.TextDecoration
-import androidx.ui.unit.Density
-import androidx.ui.unit.IntSize
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.IntSize
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.argumentCaptor
diff --git a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
index 940059d..5f7b491 100644
--- a/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
+++ b/ui/ui-text/src/test/kotlin/androidx/compose/foundation/text/selection/TextFieldSelectionManagerTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.text.selection
 
 import androidx.test.filters.SmallTest
-import androidx.ui.core.Constraints
-import androidx.ui.core.LayoutDirection
+import androidx.compose.ui.unit.Constraints
+import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.clipboard.ClipboardManager
 import androidx.ui.core.hapticfeedback.HapticFeedback
 import androidx.ui.core.hapticfeedback.HapticFeedbackType
@@ -34,7 +34,7 @@
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.style.ResolvedTextDirection
 import androidx.compose.ui.text.style.TextOverflow
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import com.google.common.truth.Truth.assertThat
 import com.nhaarman.mockitokotlin2.any
 import com.nhaarman.mockitokotlin2.isNull
diff --git a/ui/ui-tooling/api/0.1.0-dev16.txt b/ui/ui-tooling/api/0.1.0-dev16.txt
index dcc2ed8..63d42d5 100644
--- a/ui/ui-tooling/api/0.1.0-dev16.txt
+++ b/ui/ui-tooling/api/0.1.0-dev16.txt
@@ -2,11 +2,11 @@
 package androidx.ui.tooling {
 
   public final class CallGroup extends androidx.ui.tooling.Group {
-    ctor public CallGroup(Object? key, String? name, androidx.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
   }
 
   public abstract sealed class Group {
-    method public final androidx.ui.unit.IntBounds getBox();
+    method public final androidx.compose.ui.unit.IntBounds getBox();
     method public final java.util.Collection<androidx.ui.tooling.Group> getChildren();
     method public final java.util.Collection<java.lang.Object> getData();
     method public final Object? getKey();
@@ -32,7 +32,7 @@
   }
 
   public final class NodeGroup extends androidx.ui.tooling.Group {
-    ctor public NodeGroup(Object? key, Object node, androidx.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
     method public Object getNode();
   }
 
diff --git a/ui/ui-tooling/api/current.txt b/ui/ui-tooling/api/current.txt
index dcc2ed8..63d42d5 100644
--- a/ui/ui-tooling/api/current.txt
+++ b/ui/ui-tooling/api/current.txt
@@ -2,11 +2,11 @@
 package androidx.ui.tooling {
 
   public final class CallGroup extends androidx.ui.tooling.Group {
-    ctor public CallGroup(Object? key, String? name, androidx.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
   }
 
   public abstract sealed class Group {
-    method public final androidx.ui.unit.IntBounds getBox();
+    method public final androidx.compose.ui.unit.IntBounds getBox();
     method public final java.util.Collection<androidx.ui.tooling.Group> getChildren();
     method public final java.util.Collection<java.lang.Object> getData();
     method public final Object? getKey();
@@ -32,7 +32,7 @@
   }
 
   public final class NodeGroup extends androidx.ui.tooling.Group {
-    ctor public NodeGroup(Object? key, Object node, androidx.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
     method public Object getNode();
   }
 
diff --git a/ui/ui-tooling/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-tooling/api/public_plus_experimental_0.1.0-dev16.txt
index dcc2ed8..63d42d5 100644
--- a/ui/ui-tooling/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-tooling/api/public_plus_experimental_0.1.0-dev16.txt
@@ -2,11 +2,11 @@
 package androidx.ui.tooling {
 
   public final class CallGroup extends androidx.ui.tooling.Group {
-    ctor public CallGroup(Object? key, String? name, androidx.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
   }
 
   public abstract sealed class Group {
-    method public final androidx.ui.unit.IntBounds getBox();
+    method public final androidx.compose.ui.unit.IntBounds getBox();
     method public final java.util.Collection<androidx.ui.tooling.Group> getChildren();
     method public final java.util.Collection<java.lang.Object> getData();
     method public final Object? getKey();
@@ -32,7 +32,7 @@
   }
 
   public final class NodeGroup extends androidx.ui.tooling.Group {
-    ctor public NodeGroup(Object? key, Object node, androidx.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
     method public Object getNode();
   }
 
diff --git a/ui/ui-tooling/api/public_plus_experimental_current.txt b/ui/ui-tooling/api/public_plus_experimental_current.txt
index dcc2ed8..63d42d5 100644
--- a/ui/ui-tooling/api/public_plus_experimental_current.txt
+++ b/ui/ui-tooling/api/public_plus_experimental_current.txt
@@ -2,11 +2,11 @@
 package androidx.ui.tooling {
 
   public final class CallGroup extends androidx.ui.tooling.Group {
-    ctor public CallGroup(Object? key, String? name, androidx.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
   }
 
   public abstract sealed class Group {
-    method public final androidx.ui.unit.IntBounds getBox();
+    method public final androidx.compose.ui.unit.IntBounds getBox();
     method public final java.util.Collection<androidx.ui.tooling.Group> getChildren();
     method public final java.util.Collection<java.lang.Object> getData();
     method public final Object? getKey();
@@ -32,7 +32,7 @@
   }
 
   public final class NodeGroup extends androidx.ui.tooling.Group {
-    ctor public NodeGroup(Object? key, Object node, androidx.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
     method public Object getNode();
   }
 
diff --git a/ui/ui-tooling/api/restricted_0.1.0-dev16.txt b/ui/ui-tooling/api/restricted_0.1.0-dev16.txt
index dcc2ed8..63d42d5 100644
--- a/ui/ui-tooling/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-tooling/api/restricted_0.1.0-dev16.txt
@@ -2,11 +2,11 @@
 package androidx.ui.tooling {
 
   public final class CallGroup extends androidx.ui.tooling.Group {
-    ctor public CallGroup(Object? key, String? name, androidx.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
   }
 
   public abstract sealed class Group {
-    method public final androidx.ui.unit.IntBounds getBox();
+    method public final androidx.compose.ui.unit.IntBounds getBox();
     method public final java.util.Collection<androidx.ui.tooling.Group> getChildren();
     method public final java.util.Collection<java.lang.Object> getData();
     method public final Object? getKey();
@@ -32,7 +32,7 @@
   }
 
   public final class NodeGroup extends androidx.ui.tooling.Group {
-    ctor public NodeGroup(Object? key, Object node, androidx.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
     method public Object getNode();
   }
 
diff --git a/ui/ui-tooling/api/restricted_current.txt b/ui/ui-tooling/api/restricted_current.txt
index dcc2ed8..63d42d5 100644
--- a/ui/ui-tooling/api/restricted_current.txt
+++ b/ui/ui-tooling/api/restricted_current.txt
@@ -2,11 +2,11 @@
 package androidx.ui.tooling {
 
   public final class CallGroup extends androidx.ui.tooling.Group {
-    ctor public CallGroup(Object? key, String? name, androidx.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public CallGroup(Object? key, String? name, androidx.compose.ui.unit.IntBounds box, androidx.ui.tooling.SourceLocation? location, java.util.List<androidx.ui.tooling.ParameterInformation> parameters, java.util.Collection<?> data, java.util.Collection<? extends androidx.ui.tooling.Group> children);
   }
 
   public abstract sealed class Group {
-    method public final androidx.ui.unit.IntBounds getBox();
+    method public final androidx.compose.ui.unit.IntBounds getBox();
     method public final java.util.Collection<androidx.ui.tooling.Group> getChildren();
     method public final java.util.Collection<java.lang.Object> getData();
     method public final Object? getKey();
@@ -32,7 +32,7 @@
   }
 
   public final class NodeGroup extends androidx.ui.tooling.Group {
-    ctor public NodeGroup(Object? key, Object node, androidx.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
+    ctor public NodeGroup(Object? key, Object node, androidx.compose.ui.unit.IntBounds box, java.util.Collection<?> data, java.util.List<androidx.ui.core.ModifierInfo> modifierInfo, java.util.Collection<? extends androidx.ui.tooling.Group> children);
     method public Object getNode();
   }
 
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/BoundsTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/BoundsTest.kt
index 7146f9d..d503014 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/BoundsTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/BoundsTest.kt
@@ -29,8 +29,8 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.padding
-import androidx.ui.unit.Density
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.dp
 import org.junit.Assert
 import org.junit.Before
 import org.junit.Test
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt
index 906b29b..bb047ad 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/InspectableTests.kt
@@ -26,9 +26,9 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.unit.dp
-import androidx.ui.unit.height
-import androidx.ui.unit.width
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.height
+import androidx.compose.ui.unit.width
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
 import org.junit.Assert.assertNotEquals
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt
index 80ccbd7..3cf1f6d 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt
@@ -27,8 +27,8 @@
 import androidx.ui.tooling.ToolingTest
 import androidx.ui.tooling.asTree
 import androidx.ui.tooling.position
-import androidx.ui.unit.Dp
-import androidx.ui.unit.TextUnit
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/LayoutInspectorTreeTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/LayoutInspectorTreeTest.kt
index a05328f..8ce7662 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/LayoutInspectorTreeTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/LayoutInspectorTreeTest.kt
@@ -34,9 +34,9 @@
 import androidx.ui.tooling.ToolingTest
 import androidx.ui.tooling.asTree
 import androidx.ui.tooling.position
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import com.google.common.truth.Truth.assertThat
 import org.junit.Before
 import org.junit.Ignore
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt
index 2e43fa6..1e52110 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/ParameterFactoryTest.kt
@@ -48,12 +48,12 @@
 import androidx.compose.ui.text.style.TextDecoration
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.dp
-import androidx.ui.unit.em
-import androidx.ui.unit.sp
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.em
+import androidx.compose.ui.unit.sp
 import com.google.common.truth.Truth.assertThat
 import com.google.common.truth.Truth.assertWithMessage
 import org.junit.Before
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/SlotTree.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/SlotTree.kt
index 204cccdc..7e0306c 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/SlotTree.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/SlotTree.kt
@@ -28,7 +28,7 @@
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.ModifierInfo
 import androidx.ui.core.globalPosition
-import androidx.ui.unit.IntBounds
+import androidx.compose.ui.unit.IntBounds
 import java.lang.Exception
 import java.lang.reflect.Field
 import kotlin.math.max
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/LayoutInspectorTree.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/LayoutInspectorTree.kt
index 42e70fc..7ff681e 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/LayoutInspectorTree.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/LayoutInspectorTree.kt
@@ -23,7 +23,7 @@
 import androidx.ui.tooling.ParameterInformation
 import androidx.ui.tooling.R
 import androidx.ui.tooling.asTree
-import androidx.ui.unit.Density
+import androidx.compose.ui.unit.Density
 import java.util.ArrayDeque
 import kotlin.math.absoluteValue
 
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt
index acec820..4ddf89a4 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/inspector/ParameterFactory.kt
@@ -46,10 +46,10 @@
 import androidx.compose.ui.text.style.TextGeometricTransform
 import androidx.compose.ui.text.style.TextIndent
 import androidx.ui.tooling.inspector.ParameterType.DimensionDp
-import androidx.ui.unit.Density
-import androidx.ui.unit.Dp
-import androidx.ui.unit.TextUnit
-import androidx.ui.unit.TextUnitType
+import androidx.compose.ui.unit.Density
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.TextUnitType
 import java.lang.reflect.Modifier
 import kotlin.math.abs
 
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/ComposeViewAdapter.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/ComposeViewAdapter.kt
index c1fb20c..15075e1 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/ComposeViewAdapter.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/ComposeViewAdapter.kt
@@ -48,9 +48,9 @@
 import androidx.ui.tooling.SourceLocation
 import androidx.ui.tooling.asTree
 import androidx.ui.tooling.preview.animation.PreviewAnimationClock
-import androidx.ui.unit.IntBounds
-import androidx.ui.unit.PxBounds
-import androidx.ui.unit.toRect
+import androidx.compose.ui.unit.IntBounds
+import androidx.compose.ui.unit.PxBounds
+import androidx.compose.ui.unit.toRect
 import kotlin.reflect.KClass
 
 const val TOOLS_NS_URI = "http://schemas.android.com/tools"
diff --git a/ui/ui-unit/api/0.1.0-dev16.txt b/ui/ui-unit/api/0.1.0-dev16.txt
index cc44971..9d3db16 100644
--- a/ui/ui-unit/api/0.1.0-dev16.txt
+++ b/ui/ui-unit/api/0.1.0-dev16.txt
@@ -1,10 +1,26 @@
 // Signature format: 3.0
-package androidx.ui.core {
+package androidx.compose.ui.unit {
+
+  public final class AndroidDensityKt {
+    method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+  }
+
+  @androidx.compose.Immutable public final class Bounds {
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Bounds copy-ZmiikuI(float left, float top, float right, float bottom);
+    method public float getBottom();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+  }
 
   @androidx.compose.Immutable public final class Constraints {
     ctor public Constraints(internal long value);
-    method public androidx.ui.core.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy(long value);
+    method public androidx.compose.ui.unit.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -17,54 +33,27 @@
     property public final int maxWidth;
     property public final int minHeight;
     property public final int minWidth;
-    field public static final androidx.ui.core.Constraints.Companion Companion;
+    field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
     field public static final int Infinity = 2147483647; // 0x7fffffff
   }
 
   public static final class Constraints.Companion {
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed(int width, int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight(int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth(int width);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static int constrainHeight(androidx.ui.core.Constraints, int height);
-    method @androidx.compose.Stable public static int constrainWidth(androidx.ui.core.Constraints, int width);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
-    method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
-    method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
-    method public static boolean isZero(androidx.ui.core.Constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, int horizontal = 0, int vertical = 0);
-    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-  }
-
-  public enum LayoutDirection {
-    method public static androidx.ui.core.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.LayoutDirection[] values();
-    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
-    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
-  }
-
-}
-
-package androidx.ui.unit {
-
-  public final class AndroidDensityKt {
-    method public static androidx.ui.unit.Density Density(android.content.Context context);
-  }
-
-  @androidx.compose.Immutable public final class Bounds {
-    method public float component1();
-    method public float component2();
-    method public float component3();
-    method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
-    method public float getBottom();
-    method public float getLeft();
-    method public float getRight();
-    method public float getTop();
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints enforce(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.Constraints otherConstraints);
+    method public static boolean getHasFixedHeight(androidx.compose.ui.unit.Constraints);
+    method public static boolean getHasFixedWidth(androidx.compose.ui.unit.Constraints);
+    method public static boolean isZero(androidx.compose.ui.unit.Constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
   @androidx.compose.Immutable public interface Density {
@@ -72,45 +61,45 @@
     method public float getFontScale();
     method @androidx.compose.Stable public default float toDp(int);
     method @androidx.compose.Stable public default float toDp(float);
-    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
-    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default long toSp-0680j_4(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
     ctor public Dp();
-    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
     method public static float constructor-impl(float value);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
     method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
-    field public static final androidx.ui.unit.Dp.Companion Companion;
+    field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
   public static final class Dp.Companion {
@@ -122,135 +111,135 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
-    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
-    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
-    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.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);
-    method public static inline float getHeight(androidx.ui.unit.Bounds);
-    method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
-    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
+    method public static inline float getHeight(androidx.compose.ui.unit.Bounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
-    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
-    field public static final androidx.ui.unit.Duration.Companion Companion;
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
+    field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
   public static final class Duration.Companion {
-    method public androidx.ui.unit.Duration getZero();
-    property public final androidx.ui.unit.Duration Zero;
+    method public androidx.compose.ui.unit.Duration getZero();
+    property public final androidx.compose.ui.unit.Duration Zero;
   }
 
   public final class Durations {
-    method public static androidx.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
-    method public static androidx.ui.unit.Duration getDays(long);
-    method public static androidx.ui.unit.Duration getDays(int);
-    method public static androidx.ui.unit.Duration getHours(long);
-    method public static androidx.ui.unit.Duration getHours(int);
-    method public static androidx.ui.unit.Duration getMicroseconds(long);
-    method public static androidx.ui.unit.Duration getMicroseconds(int);
-    method public static androidx.ui.unit.Duration getMilliseconds(long);
-    method public static androidx.ui.unit.Duration getMilliseconds(int);
-    method public static androidx.ui.unit.Duration getMinutes(long);
-    method public static androidx.ui.unit.Duration getMinutes(int);
-    method public static androidx.ui.unit.Duration getNanoseconds(long);
-    method public static androidx.ui.unit.Duration getNanoseconds(int);
+    method public static androidx.compose.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.compose.ui.unit.Duration getDays(long);
+    method public static androidx.compose.ui.unit.Duration getDays(int);
+    method public static androidx.compose.ui.unit.Duration getHours(long);
+    method public static androidx.compose.ui.unit.Duration getHours(int);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMinutes(long);
+    method public static androidx.compose.ui.unit.Duration getMinutes(int);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(long);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(int);
     method public static long getNanosecondsPerDay();
     method public static long getNanosecondsPerHour();
     method public static long getNanosecondsPerMillisecond();
     method public static long getNanosecondsPerMinute();
     method public static long getNanosecondsPerSecond();
-    method public static androidx.ui.unit.Duration getSeconds(long);
-    method public static androidx.ui.unit.Duration getSeconds(int);
-    method public static long inDays(androidx.ui.unit.Duration);
-    method public static long inHours(androidx.ui.unit.Duration);
-    method public static long inMicroseconds(androidx.ui.unit.Duration);
-    method public static long inMilliseconds(androidx.ui.unit.Duration);
-    method public static long inMinutes(androidx.ui.unit.Duration);
-    method public static long inSeconds(androidx.ui.unit.Duration);
+    method public static androidx.compose.ui.unit.Duration getSeconds(long);
+    method public static androidx.compose.ui.unit.Duration getSeconds(int);
+    method public static long inDays(androidx.compose.ui.unit.Duration);
+    method public static long inHours(androidx.compose.ui.unit.Duration);
+    method public static long inMicroseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMilliseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMinutes(androidx.compose.ui.unit.Duration);
+    method public static long inSeconds(androidx.compose.ui.unit.Duration);
     field public static final long HoursPerDay = 24L; // 0x18L
     field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
     field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
@@ -265,7 +254,7 @@
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -273,13 +262,13 @@
   }
 
   public final class IntBoundsKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntBounds IntBounds(androidx.ui.unit.IntOffset topLeft, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset center(androidx.ui.unit.IntBounds);
-    method public static inline int getHeight(androidx.ui.unit.IntBounds);
-    method public static inline int getWidth(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntBounds IntBounds(androidx.compose.ui.unit.IntOffset topLeft, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset center(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getHeight(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getWidth(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
   @androidx.compose.Immutable public final class IntOffset {
@@ -288,65 +277,72 @@
     method @androidx.compose.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset minus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset plus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset unaryMinus();
     property public final int x;
     property public final int y;
-    field public static final androidx.ui.unit.IntOffset.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
   }
 
   public static final class IntOffset.Companion {
-    method public androidx.ui.unit.IntOffset getOrigin();
-    property public final androidx.ui.unit.IntOffset Origin;
+    method public androidx.compose.ui.unit.IntOffset getOrigin();
+    property public final androidx.compose.ui.unit.IntOffset Origin;
   }
 
   public final class IntOffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntOffset lerp(androidx.compose.ui.unit.IntOffset start, androidx.compose.ui.unit.IntOffset stop, float fraction);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
     ctor public IntSize(internal long packedValue);
     method @androidx.compose.Stable public inline operator int component1();
     method @androidx.compose.Stable public inline operator int component2();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize div(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize div(int other);
     method public int getHeight();
     method public int getWidth();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize times(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize times(int other);
     property public final int height;
     property public final int width;
-    field public static final androidx.ui.unit.IntSize.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
   }
 
   public static final class IntSize.Companion {
-    method public androidx.ui.unit.IntSize getZero();
-    property public final androidx.ui.unit.IntSize Zero;
+    method public androidx.compose.ui.unit.IntSize getZero();
+    property public final androidx.compose.ui.unit.IntSize Zero;
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize IntSize(int width, int height);
-    method public static androidx.ui.unit.IntOffset getCenter(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static operator androidx.ui.unit.IntSize times(int, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method public static androidx.compose.ui.unit.IntOffset getCenter(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
+  }
+
+  public enum LayoutDirection {
+    method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.LayoutDirection[] values();
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
   @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
-    method public static long copy-98Cn76g(long $this, float x = this.x, float y = this.y);
+    method public static long copy-ioHfwGI(long $this, float x = this.x, float y = this.y);
     method @androidx.compose.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-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
-    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-IsWn59c(long $this, long other);
     method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
@@ -356,102 +352,102 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
-    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
     method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
-    method public static inline float getHeight(androidx.ui.unit.PxBounds);
-    method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
+    method public static inline float getHeight(androidx.compose.ui.unit.PxBounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
-    method public static inline operator int compareTo-vVlMl6k(long $this, long other);
+    method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
+    method public static inline operator float div--R2X_6o(long $this, long other);
     method public static inline operator long div-impl(long $this, float other);
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
-    method public static inline operator float div-vVlMl6k(long $this, long other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
-    method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
+    method public static androidx.compose.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
-    method public static inline operator long minus-vVlMl6k(long $this, long other);
-    method public static inline operator long plus-vVlMl6k(long $this, long other);
+    method public static inline operator long minus--R2X_6o(long $this, long other);
+    method public static inline operator long plus--R2X_6o(long $this, long other);
     method public static inline operator long times-impl(long $this, float other);
     method public static inline operator long times-impl(long $this, double other);
     method public static inline operator long times-impl(long $this, int other);
     method public static String toString-impl(long $this);
     method public static inline operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.unit.TextUnit.Companion Companion;
+    field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
   }
 
   public static final class TextUnit.Companion {
@@ -466,69 +462,69 @@
   }
 
   public final class TextUnitKt {
-    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-HxQ2Pkc(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
-    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
-    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
-    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
-    method public static androidx.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.unit.TextUnitType[] values();
-    enum_constant public static final androidx.ui.unit.TextUnitType Em;
-    enum_constant public static final androidx.ui.unit.TextUnitType Inherit;
-    enum_constant public static final androidx.ui.unit.TextUnitType Sp;
+    method public static androidx.compose.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.TextUnitType[] values();
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Em;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Inherit;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Uptime other);
+    method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
-    method public operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration duration);
-    field public static final androidx.ui.unit.Uptime.Companion Companion;
+    method public operator androidx.compose.ui.unit.Uptime minus(androidx.compose.ui.unit.Duration duration);
+    method public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Uptime other);
+    method public operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration duration);
+    field public static final androidx.compose.ui.unit.Uptime.Companion Companion;
   }
 
   public static final class Uptime.Companion {
-    method public androidx.ui.unit.Uptime getBoot();
-    property public final androidx.ui.unit.Uptime Boot;
+    method public androidx.compose.ui.unit.Uptime getBoot();
+    property public final androidx.compose.ui.unit.Uptime Boot;
   }
 
   public final class UptimeKt {
-    method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
+    method public static operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration, androidx.compose.ui.unit.Uptime uptime);
   }
 
   @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
-    method public operator androidx.ui.unit.Velocity unaryMinus();
-    field public static final androidx.ui.unit.Velocity.Companion Companion;
+    method public operator androidx.compose.ui.unit.Velocity unaryMinus();
+    field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
   }
 
   public static final class Velocity.Companion {
-    method public androidx.ui.unit.Velocity getZero();
-    property public final androidx.ui.unit.Velocity Zero;
+    method public androidx.compose.ui.unit.Velocity getZero();
+    property public final androidx.compose.ui.unit.Velocity Zero;
   }
 
   public final class VelocityKt {
-    method public static operator androidx.ui.unit.Velocity minus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
-    method public static operator androidx.ui.unit.Velocity plus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity minus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity plus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
   }
 
 }
diff --git a/ui/ui-unit/api/api_lint.ignore b/ui/ui-unit/api/api_lint.ignore
index 319f1ff..83a9a70 100644
--- a/ui/ui-unit/api/api_lint.ignore
+++ b/ui/ui-unit/api/api_lint.ignore
@@ -1,3 +1,3 @@
 // Baseline format: 1.0
-MethodNameUnits: androidx.ui.unit.Durations#inSeconds(androidx.ui.unit.Duration):
+MethodNameUnits: androidx.compose.ui.unit.Durations#inSeconds(androidx.compose.ui.unit.Duration):
     Returned time values must be in milliseconds, was `inSeconds`
diff --git a/ui/ui-unit/api/current.txt b/ui/ui-unit/api/current.txt
index cc44971..9d3db16 100644
--- a/ui/ui-unit/api/current.txt
+++ b/ui/ui-unit/api/current.txt
@@ -1,10 +1,26 @@
 // Signature format: 3.0
-package androidx.ui.core {
+package androidx.compose.ui.unit {
+
+  public final class AndroidDensityKt {
+    method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+  }
+
+  @androidx.compose.Immutable public final class Bounds {
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Bounds copy-ZmiikuI(float left, float top, float right, float bottom);
+    method public float getBottom();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+  }
 
   @androidx.compose.Immutable public final class Constraints {
     ctor public Constraints(internal long value);
-    method public androidx.ui.core.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy(long value);
+    method public androidx.compose.ui.unit.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -17,54 +33,27 @@
     property public final int maxWidth;
     property public final int minHeight;
     property public final int minWidth;
-    field public static final androidx.ui.core.Constraints.Companion Companion;
+    field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
     field public static final int Infinity = 2147483647; // 0x7fffffff
   }
 
   public static final class Constraints.Companion {
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed(int width, int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight(int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth(int width);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static int constrainHeight(androidx.ui.core.Constraints, int height);
-    method @androidx.compose.Stable public static int constrainWidth(androidx.ui.core.Constraints, int width);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
-    method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
-    method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
-    method public static boolean isZero(androidx.ui.core.Constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, int horizontal = 0, int vertical = 0);
-    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-  }
-
-  public enum LayoutDirection {
-    method public static androidx.ui.core.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.LayoutDirection[] values();
-    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
-    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
-  }
-
-}
-
-package androidx.ui.unit {
-
-  public final class AndroidDensityKt {
-    method public static androidx.ui.unit.Density Density(android.content.Context context);
-  }
-
-  @androidx.compose.Immutable public final class Bounds {
-    method public float component1();
-    method public float component2();
-    method public float component3();
-    method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
-    method public float getBottom();
-    method public float getLeft();
-    method public float getRight();
-    method public float getTop();
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints enforce(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.Constraints otherConstraints);
+    method public static boolean getHasFixedHeight(androidx.compose.ui.unit.Constraints);
+    method public static boolean getHasFixedWidth(androidx.compose.ui.unit.Constraints);
+    method public static boolean isZero(androidx.compose.ui.unit.Constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
   @androidx.compose.Immutable public interface Density {
@@ -72,45 +61,45 @@
     method public float getFontScale();
     method @androidx.compose.Stable public default float toDp(int);
     method @androidx.compose.Stable public default float toDp(float);
-    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
-    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default long toSp-0680j_4(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
     ctor public Dp();
-    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
     method public static float constructor-impl(float value);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
     method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
-    field public static final androidx.ui.unit.Dp.Companion Companion;
+    field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
   public static final class Dp.Companion {
@@ -122,135 +111,135 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
-    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
-    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
-    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.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);
-    method public static inline float getHeight(androidx.ui.unit.Bounds);
-    method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
-    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
+    method public static inline float getHeight(androidx.compose.ui.unit.Bounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
-    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
-    field public static final androidx.ui.unit.Duration.Companion Companion;
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
+    field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
   public static final class Duration.Companion {
-    method public androidx.ui.unit.Duration getZero();
-    property public final androidx.ui.unit.Duration Zero;
+    method public androidx.compose.ui.unit.Duration getZero();
+    property public final androidx.compose.ui.unit.Duration Zero;
   }
 
   public final class Durations {
-    method public static androidx.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
-    method public static androidx.ui.unit.Duration getDays(long);
-    method public static androidx.ui.unit.Duration getDays(int);
-    method public static androidx.ui.unit.Duration getHours(long);
-    method public static androidx.ui.unit.Duration getHours(int);
-    method public static androidx.ui.unit.Duration getMicroseconds(long);
-    method public static androidx.ui.unit.Duration getMicroseconds(int);
-    method public static androidx.ui.unit.Duration getMilliseconds(long);
-    method public static androidx.ui.unit.Duration getMilliseconds(int);
-    method public static androidx.ui.unit.Duration getMinutes(long);
-    method public static androidx.ui.unit.Duration getMinutes(int);
-    method public static androidx.ui.unit.Duration getNanoseconds(long);
-    method public static androidx.ui.unit.Duration getNanoseconds(int);
+    method public static androidx.compose.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.compose.ui.unit.Duration getDays(long);
+    method public static androidx.compose.ui.unit.Duration getDays(int);
+    method public static androidx.compose.ui.unit.Duration getHours(long);
+    method public static androidx.compose.ui.unit.Duration getHours(int);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMinutes(long);
+    method public static androidx.compose.ui.unit.Duration getMinutes(int);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(long);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(int);
     method public static long getNanosecondsPerDay();
     method public static long getNanosecondsPerHour();
     method public static long getNanosecondsPerMillisecond();
     method public static long getNanosecondsPerMinute();
     method public static long getNanosecondsPerSecond();
-    method public static androidx.ui.unit.Duration getSeconds(long);
-    method public static androidx.ui.unit.Duration getSeconds(int);
-    method public static long inDays(androidx.ui.unit.Duration);
-    method public static long inHours(androidx.ui.unit.Duration);
-    method public static long inMicroseconds(androidx.ui.unit.Duration);
-    method public static long inMilliseconds(androidx.ui.unit.Duration);
-    method public static long inMinutes(androidx.ui.unit.Duration);
-    method public static long inSeconds(androidx.ui.unit.Duration);
+    method public static androidx.compose.ui.unit.Duration getSeconds(long);
+    method public static androidx.compose.ui.unit.Duration getSeconds(int);
+    method public static long inDays(androidx.compose.ui.unit.Duration);
+    method public static long inHours(androidx.compose.ui.unit.Duration);
+    method public static long inMicroseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMilliseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMinutes(androidx.compose.ui.unit.Duration);
+    method public static long inSeconds(androidx.compose.ui.unit.Duration);
     field public static final long HoursPerDay = 24L; // 0x18L
     field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
     field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
@@ -265,7 +254,7 @@
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -273,13 +262,13 @@
   }
 
   public final class IntBoundsKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntBounds IntBounds(androidx.ui.unit.IntOffset topLeft, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset center(androidx.ui.unit.IntBounds);
-    method public static inline int getHeight(androidx.ui.unit.IntBounds);
-    method public static inline int getWidth(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntBounds IntBounds(androidx.compose.ui.unit.IntOffset topLeft, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset center(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getHeight(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getWidth(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
   @androidx.compose.Immutable public final class IntOffset {
@@ -288,65 +277,72 @@
     method @androidx.compose.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset minus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset plus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset unaryMinus();
     property public final int x;
     property public final int y;
-    field public static final androidx.ui.unit.IntOffset.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
   }
 
   public static final class IntOffset.Companion {
-    method public androidx.ui.unit.IntOffset getOrigin();
-    property public final androidx.ui.unit.IntOffset Origin;
+    method public androidx.compose.ui.unit.IntOffset getOrigin();
+    property public final androidx.compose.ui.unit.IntOffset Origin;
   }
 
   public final class IntOffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntOffset lerp(androidx.compose.ui.unit.IntOffset start, androidx.compose.ui.unit.IntOffset stop, float fraction);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
     ctor public IntSize(internal long packedValue);
     method @androidx.compose.Stable public inline operator int component1();
     method @androidx.compose.Stable public inline operator int component2();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize div(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize div(int other);
     method public int getHeight();
     method public int getWidth();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize times(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize times(int other);
     property public final int height;
     property public final int width;
-    field public static final androidx.ui.unit.IntSize.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
   }
 
   public static final class IntSize.Companion {
-    method public androidx.ui.unit.IntSize getZero();
-    property public final androidx.ui.unit.IntSize Zero;
+    method public androidx.compose.ui.unit.IntSize getZero();
+    property public final androidx.compose.ui.unit.IntSize Zero;
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize IntSize(int width, int height);
-    method public static androidx.ui.unit.IntOffset getCenter(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static operator androidx.ui.unit.IntSize times(int, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method public static androidx.compose.ui.unit.IntOffset getCenter(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
+  }
+
+  public enum LayoutDirection {
+    method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.LayoutDirection[] values();
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
   @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
-    method public static long copy-98Cn76g(long $this, float x = this.x, float y = this.y);
+    method public static long copy-ioHfwGI(long $this, float x = this.x, float y = this.y);
     method @androidx.compose.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-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
-    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-IsWn59c(long $this, long other);
     method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
@@ -356,102 +352,102 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
-    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
     method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
-    method public static inline float getHeight(androidx.ui.unit.PxBounds);
-    method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
+    method public static inline float getHeight(androidx.compose.ui.unit.PxBounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
-    method public static inline operator int compareTo-vVlMl6k(long $this, long other);
+    method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
+    method public static inline operator float div--R2X_6o(long $this, long other);
     method public static inline operator long div-impl(long $this, float other);
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
-    method public static inline operator float div-vVlMl6k(long $this, long other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
-    method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
+    method public static androidx.compose.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
-    method public static inline operator long minus-vVlMl6k(long $this, long other);
-    method public static inline operator long plus-vVlMl6k(long $this, long other);
+    method public static inline operator long minus--R2X_6o(long $this, long other);
+    method public static inline operator long plus--R2X_6o(long $this, long other);
     method public static inline operator long times-impl(long $this, float other);
     method public static inline operator long times-impl(long $this, double other);
     method public static inline operator long times-impl(long $this, int other);
     method public static String toString-impl(long $this);
     method public static inline operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.unit.TextUnit.Companion Companion;
+    field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
   }
 
   public static final class TextUnit.Companion {
@@ -466,69 +462,69 @@
   }
 
   public final class TextUnitKt {
-    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-HxQ2Pkc(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
-    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
-    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
-    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
-    method public static androidx.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.unit.TextUnitType[] values();
-    enum_constant public static final androidx.ui.unit.TextUnitType Em;
-    enum_constant public static final androidx.ui.unit.TextUnitType Inherit;
-    enum_constant public static final androidx.ui.unit.TextUnitType Sp;
+    method public static androidx.compose.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.TextUnitType[] values();
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Em;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Inherit;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Uptime other);
+    method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
-    method public operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration duration);
-    field public static final androidx.ui.unit.Uptime.Companion Companion;
+    method public operator androidx.compose.ui.unit.Uptime minus(androidx.compose.ui.unit.Duration duration);
+    method public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Uptime other);
+    method public operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration duration);
+    field public static final androidx.compose.ui.unit.Uptime.Companion Companion;
   }
 
   public static final class Uptime.Companion {
-    method public androidx.ui.unit.Uptime getBoot();
-    property public final androidx.ui.unit.Uptime Boot;
+    method public androidx.compose.ui.unit.Uptime getBoot();
+    property public final androidx.compose.ui.unit.Uptime Boot;
   }
 
   public final class UptimeKt {
-    method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
+    method public static operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration, androidx.compose.ui.unit.Uptime uptime);
   }
 
   @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
-    method public operator androidx.ui.unit.Velocity unaryMinus();
-    field public static final androidx.ui.unit.Velocity.Companion Companion;
+    method public operator androidx.compose.ui.unit.Velocity unaryMinus();
+    field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
   }
 
   public static final class Velocity.Companion {
-    method public androidx.ui.unit.Velocity getZero();
-    property public final androidx.ui.unit.Velocity Zero;
+    method public androidx.compose.ui.unit.Velocity getZero();
+    property public final androidx.compose.ui.unit.Velocity Zero;
   }
 
   public final class VelocityKt {
-    method public static operator androidx.ui.unit.Velocity minus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
-    method public static operator androidx.ui.unit.Velocity plus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity minus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity plus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
   }
 
 }
diff --git a/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt
index cc44971..9d3db16 100644
--- a/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-unit/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,10 +1,26 @@
 // Signature format: 3.0
-package androidx.ui.core {
+package androidx.compose.ui.unit {
+
+  public final class AndroidDensityKt {
+    method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+  }
+
+  @androidx.compose.Immutable public final class Bounds {
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Bounds copy-ZmiikuI(float left, float top, float right, float bottom);
+    method public float getBottom();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+  }
 
   @androidx.compose.Immutable public final class Constraints {
     ctor public Constraints(internal long value);
-    method public androidx.ui.core.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy(long value);
+    method public androidx.compose.ui.unit.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -17,54 +33,27 @@
     property public final int maxWidth;
     property public final int minHeight;
     property public final int minWidth;
-    field public static final androidx.ui.core.Constraints.Companion Companion;
+    field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
     field public static final int Infinity = 2147483647; // 0x7fffffff
   }
 
   public static final class Constraints.Companion {
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed(int width, int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight(int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth(int width);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static int constrainHeight(androidx.ui.core.Constraints, int height);
-    method @androidx.compose.Stable public static int constrainWidth(androidx.ui.core.Constraints, int width);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
-    method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
-    method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
-    method public static boolean isZero(androidx.ui.core.Constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, int horizontal = 0, int vertical = 0);
-    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-  }
-
-  public enum LayoutDirection {
-    method public static androidx.ui.core.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.LayoutDirection[] values();
-    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
-    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
-  }
-
-}
-
-package androidx.ui.unit {
-
-  public final class AndroidDensityKt {
-    method public static androidx.ui.unit.Density Density(android.content.Context context);
-  }
-
-  @androidx.compose.Immutable public final class Bounds {
-    method public float component1();
-    method public float component2();
-    method public float component3();
-    method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
-    method public float getBottom();
-    method public float getLeft();
-    method public float getRight();
-    method public float getTop();
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints enforce(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.Constraints otherConstraints);
+    method public static boolean getHasFixedHeight(androidx.compose.ui.unit.Constraints);
+    method public static boolean getHasFixedWidth(androidx.compose.ui.unit.Constraints);
+    method public static boolean isZero(androidx.compose.ui.unit.Constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
   @androidx.compose.Immutable public interface Density {
@@ -72,45 +61,45 @@
     method public float getFontScale();
     method @androidx.compose.Stable public default float toDp(int);
     method @androidx.compose.Stable public default float toDp(float);
-    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
-    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default long toSp-0680j_4(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
     ctor public Dp();
-    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
     method public static float constructor-impl(float value);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
     method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
-    field public static final androidx.ui.unit.Dp.Companion Companion;
+    field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
   public static final class Dp.Companion {
@@ -122,135 +111,135 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
-    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
-    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
-    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.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);
-    method public static inline float getHeight(androidx.ui.unit.Bounds);
-    method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
-    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
+    method public static inline float getHeight(androidx.compose.ui.unit.Bounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
-    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
-    field public static final androidx.ui.unit.Duration.Companion Companion;
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
+    field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
   public static final class Duration.Companion {
-    method public androidx.ui.unit.Duration getZero();
-    property public final androidx.ui.unit.Duration Zero;
+    method public androidx.compose.ui.unit.Duration getZero();
+    property public final androidx.compose.ui.unit.Duration Zero;
   }
 
   public final class Durations {
-    method public static androidx.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
-    method public static androidx.ui.unit.Duration getDays(long);
-    method public static androidx.ui.unit.Duration getDays(int);
-    method public static androidx.ui.unit.Duration getHours(long);
-    method public static androidx.ui.unit.Duration getHours(int);
-    method public static androidx.ui.unit.Duration getMicroseconds(long);
-    method public static androidx.ui.unit.Duration getMicroseconds(int);
-    method public static androidx.ui.unit.Duration getMilliseconds(long);
-    method public static androidx.ui.unit.Duration getMilliseconds(int);
-    method public static androidx.ui.unit.Duration getMinutes(long);
-    method public static androidx.ui.unit.Duration getMinutes(int);
-    method public static androidx.ui.unit.Duration getNanoseconds(long);
-    method public static androidx.ui.unit.Duration getNanoseconds(int);
+    method public static androidx.compose.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.compose.ui.unit.Duration getDays(long);
+    method public static androidx.compose.ui.unit.Duration getDays(int);
+    method public static androidx.compose.ui.unit.Duration getHours(long);
+    method public static androidx.compose.ui.unit.Duration getHours(int);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMinutes(long);
+    method public static androidx.compose.ui.unit.Duration getMinutes(int);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(long);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(int);
     method public static long getNanosecondsPerDay();
     method public static long getNanosecondsPerHour();
     method public static long getNanosecondsPerMillisecond();
     method public static long getNanosecondsPerMinute();
     method public static long getNanosecondsPerSecond();
-    method public static androidx.ui.unit.Duration getSeconds(long);
-    method public static androidx.ui.unit.Duration getSeconds(int);
-    method public static long inDays(androidx.ui.unit.Duration);
-    method public static long inHours(androidx.ui.unit.Duration);
-    method public static long inMicroseconds(androidx.ui.unit.Duration);
-    method public static long inMilliseconds(androidx.ui.unit.Duration);
-    method public static long inMinutes(androidx.ui.unit.Duration);
-    method public static long inSeconds(androidx.ui.unit.Duration);
+    method public static androidx.compose.ui.unit.Duration getSeconds(long);
+    method public static androidx.compose.ui.unit.Duration getSeconds(int);
+    method public static long inDays(androidx.compose.ui.unit.Duration);
+    method public static long inHours(androidx.compose.ui.unit.Duration);
+    method public static long inMicroseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMilliseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMinutes(androidx.compose.ui.unit.Duration);
+    method public static long inSeconds(androidx.compose.ui.unit.Duration);
     field public static final long HoursPerDay = 24L; // 0x18L
     field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
     field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
@@ -265,7 +254,7 @@
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -273,13 +262,13 @@
   }
 
   public final class IntBoundsKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntBounds IntBounds(androidx.ui.unit.IntOffset topLeft, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset center(androidx.ui.unit.IntBounds);
-    method public static inline int getHeight(androidx.ui.unit.IntBounds);
-    method public static inline int getWidth(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntBounds IntBounds(androidx.compose.ui.unit.IntOffset topLeft, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset center(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getHeight(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getWidth(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
   @androidx.compose.Immutable public final class IntOffset {
@@ -288,65 +277,72 @@
     method @androidx.compose.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset minus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset plus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset unaryMinus();
     property public final int x;
     property public final int y;
-    field public static final androidx.ui.unit.IntOffset.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
   }
 
   public static final class IntOffset.Companion {
-    method public androidx.ui.unit.IntOffset getOrigin();
-    property public final androidx.ui.unit.IntOffset Origin;
+    method public androidx.compose.ui.unit.IntOffset getOrigin();
+    property public final androidx.compose.ui.unit.IntOffset Origin;
   }
 
   public final class IntOffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntOffset lerp(androidx.compose.ui.unit.IntOffset start, androidx.compose.ui.unit.IntOffset stop, float fraction);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
     ctor public IntSize(internal long packedValue);
     method @androidx.compose.Stable public inline operator int component1();
     method @androidx.compose.Stable public inline operator int component2();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize div(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize div(int other);
     method public int getHeight();
     method public int getWidth();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize times(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize times(int other);
     property public final int height;
     property public final int width;
-    field public static final androidx.ui.unit.IntSize.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
   }
 
   public static final class IntSize.Companion {
-    method public androidx.ui.unit.IntSize getZero();
-    property public final androidx.ui.unit.IntSize Zero;
+    method public androidx.compose.ui.unit.IntSize getZero();
+    property public final androidx.compose.ui.unit.IntSize Zero;
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize IntSize(int width, int height);
-    method public static androidx.ui.unit.IntOffset getCenter(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static operator androidx.ui.unit.IntSize times(int, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method public static androidx.compose.ui.unit.IntOffset getCenter(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
+  }
+
+  public enum LayoutDirection {
+    method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.LayoutDirection[] values();
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
   @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
-    method public static long copy-98Cn76g(long $this, float x = this.x, float y = this.y);
+    method public static long copy-ioHfwGI(long $this, float x = this.x, float y = this.y);
     method @androidx.compose.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-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
-    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-IsWn59c(long $this, long other);
     method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
@@ -356,102 +352,102 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
-    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
     method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
-    method public static inline float getHeight(androidx.ui.unit.PxBounds);
-    method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
+    method public static inline float getHeight(androidx.compose.ui.unit.PxBounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
-    method public static inline operator int compareTo-vVlMl6k(long $this, long other);
+    method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
+    method public static inline operator float div--R2X_6o(long $this, long other);
     method public static inline operator long div-impl(long $this, float other);
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
-    method public static inline operator float div-vVlMl6k(long $this, long other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
-    method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
+    method public static androidx.compose.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
-    method public static inline operator long minus-vVlMl6k(long $this, long other);
-    method public static inline operator long plus-vVlMl6k(long $this, long other);
+    method public static inline operator long minus--R2X_6o(long $this, long other);
+    method public static inline operator long plus--R2X_6o(long $this, long other);
     method public static inline operator long times-impl(long $this, float other);
     method public static inline operator long times-impl(long $this, double other);
     method public static inline operator long times-impl(long $this, int other);
     method public static String toString-impl(long $this);
     method public static inline operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.unit.TextUnit.Companion Companion;
+    field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
   }
 
   public static final class TextUnit.Companion {
@@ -466,69 +462,69 @@
   }
 
   public final class TextUnitKt {
-    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-HxQ2Pkc(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
-    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
-    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
-    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
-    method public static androidx.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.unit.TextUnitType[] values();
-    enum_constant public static final androidx.ui.unit.TextUnitType Em;
-    enum_constant public static final androidx.ui.unit.TextUnitType Inherit;
-    enum_constant public static final androidx.ui.unit.TextUnitType Sp;
+    method public static androidx.compose.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.TextUnitType[] values();
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Em;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Inherit;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Uptime other);
+    method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
-    method public operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration duration);
-    field public static final androidx.ui.unit.Uptime.Companion Companion;
+    method public operator androidx.compose.ui.unit.Uptime minus(androidx.compose.ui.unit.Duration duration);
+    method public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Uptime other);
+    method public operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration duration);
+    field public static final androidx.compose.ui.unit.Uptime.Companion Companion;
   }
 
   public static final class Uptime.Companion {
-    method public androidx.ui.unit.Uptime getBoot();
-    property public final androidx.ui.unit.Uptime Boot;
+    method public androidx.compose.ui.unit.Uptime getBoot();
+    property public final androidx.compose.ui.unit.Uptime Boot;
   }
 
   public final class UptimeKt {
-    method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
+    method public static operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration, androidx.compose.ui.unit.Uptime uptime);
   }
 
   @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
-    method public operator androidx.ui.unit.Velocity unaryMinus();
-    field public static final androidx.ui.unit.Velocity.Companion Companion;
+    method public operator androidx.compose.ui.unit.Velocity unaryMinus();
+    field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
   }
 
   public static final class Velocity.Companion {
-    method public androidx.ui.unit.Velocity getZero();
-    property public final androidx.ui.unit.Velocity Zero;
+    method public androidx.compose.ui.unit.Velocity getZero();
+    property public final androidx.compose.ui.unit.Velocity Zero;
   }
 
   public final class VelocityKt {
-    method public static operator androidx.ui.unit.Velocity minus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
-    method public static operator androidx.ui.unit.Velocity plus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity minus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity plus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
   }
 
 }
diff --git a/ui/ui-unit/api/public_plus_experimental_current.txt b/ui/ui-unit/api/public_plus_experimental_current.txt
index cc44971..9d3db16 100644
--- a/ui/ui-unit/api/public_plus_experimental_current.txt
+++ b/ui/ui-unit/api/public_plus_experimental_current.txt
@@ -1,10 +1,26 @@
 // Signature format: 3.0
-package androidx.ui.core {
+package androidx.compose.ui.unit {
+
+  public final class AndroidDensityKt {
+    method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+  }
+
+  @androidx.compose.Immutable public final class Bounds {
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Bounds copy-ZmiikuI(float left, float top, float right, float bottom);
+    method public float getBottom();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+  }
 
   @androidx.compose.Immutable public final class Constraints {
     ctor public Constraints(internal long value);
-    method public androidx.ui.core.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy(long value);
+    method public androidx.compose.ui.unit.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -17,54 +33,27 @@
     property public final int maxWidth;
     property public final int minHeight;
     property public final int minWidth;
-    field public static final androidx.ui.core.Constraints.Companion Companion;
+    field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
     field public static final int Infinity = 2147483647; // 0x7fffffff
   }
 
   public static final class Constraints.Companion {
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed(int width, int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight(int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth(int width);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static int constrainHeight(androidx.ui.core.Constraints, int height);
-    method @androidx.compose.Stable public static int constrainWidth(androidx.ui.core.Constraints, int width);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
-    method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
-    method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
-    method public static boolean isZero(androidx.ui.core.Constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, int horizontal = 0, int vertical = 0);
-    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-  }
-
-  public enum LayoutDirection {
-    method public static androidx.ui.core.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.LayoutDirection[] values();
-    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
-    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
-  }
-
-}
-
-package androidx.ui.unit {
-
-  public final class AndroidDensityKt {
-    method public static androidx.ui.unit.Density Density(android.content.Context context);
-  }
-
-  @androidx.compose.Immutable public final class Bounds {
-    method public float component1();
-    method public float component2();
-    method public float component3();
-    method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
-    method public float getBottom();
-    method public float getLeft();
-    method public float getRight();
-    method public float getTop();
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints enforce(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.Constraints otherConstraints);
+    method public static boolean getHasFixedHeight(androidx.compose.ui.unit.Constraints);
+    method public static boolean getHasFixedWidth(androidx.compose.ui.unit.Constraints);
+    method public static boolean isZero(androidx.compose.ui.unit.Constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
   @androidx.compose.Immutable public interface Density {
@@ -72,45 +61,45 @@
     method public float getFontScale();
     method @androidx.compose.Stable public default float toDp(int);
     method @androidx.compose.Stable public default float toDp(float);
-    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
-    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default long toSp-0680j_4(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
     ctor public Dp();
-    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
     method public static float constructor-impl(float value);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
     method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
-    field public static final androidx.ui.unit.Dp.Companion Companion;
+    field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
   public static final class Dp.Companion {
@@ -122,135 +111,135 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
-    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
-    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
-    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.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);
-    method public static inline float getHeight(androidx.ui.unit.Bounds);
-    method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
-    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
+    method public static inline float getHeight(androidx.compose.ui.unit.Bounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
-    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
-    field public static final androidx.ui.unit.Duration.Companion Companion;
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
+    field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
   public static final class Duration.Companion {
-    method public androidx.ui.unit.Duration getZero();
-    property public final androidx.ui.unit.Duration Zero;
+    method public androidx.compose.ui.unit.Duration getZero();
+    property public final androidx.compose.ui.unit.Duration Zero;
   }
 
   public final class Durations {
-    method public static androidx.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
-    method public static androidx.ui.unit.Duration getDays(long);
-    method public static androidx.ui.unit.Duration getDays(int);
-    method public static androidx.ui.unit.Duration getHours(long);
-    method public static androidx.ui.unit.Duration getHours(int);
-    method public static androidx.ui.unit.Duration getMicroseconds(long);
-    method public static androidx.ui.unit.Duration getMicroseconds(int);
-    method public static androidx.ui.unit.Duration getMilliseconds(long);
-    method public static androidx.ui.unit.Duration getMilliseconds(int);
-    method public static androidx.ui.unit.Duration getMinutes(long);
-    method public static androidx.ui.unit.Duration getMinutes(int);
-    method public static androidx.ui.unit.Duration getNanoseconds(long);
-    method public static androidx.ui.unit.Duration getNanoseconds(int);
+    method public static androidx.compose.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.compose.ui.unit.Duration getDays(long);
+    method public static androidx.compose.ui.unit.Duration getDays(int);
+    method public static androidx.compose.ui.unit.Duration getHours(long);
+    method public static androidx.compose.ui.unit.Duration getHours(int);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMinutes(long);
+    method public static androidx.compose.ui.unit.Duration getMinutes(int);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(long);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(int);
     method public static long getNanosecondsPerDay();
     method public static long getNanosecondsPerHour();
     method public static long getNanosecondsPerMillisecond();
     method public static long getNanosecondsPerMinute();
     method public static long getNanosecondsPerSecond();
-    method public static androidx.ui.unit.Duration getSeconds(long);
-    method public static androidx.ui.unit.Duration getSeconds(int);
-    method public static long inDays(androidx.ui.unit.Duration);
-    method public static long inHours(androidx.ui.unit.Duration);
-    method public static long inMicroseconds(androidx.ui.unit.Duration);
-    method public static long inMilliseconds(androidx.ui.unit.Duration);
-    method public static long inMinutes(androidx.ui.unit.Duration);
-    method public static long inSeconds(androidx.ui.unit.Duration);
+    method public static androidx.compose.ui.unit.Duration getSeconds(long);
+    method public static androidx.compose.ui.unit.Duration getSeconds(int);
+    method public static long inDays(androidx.compose.ui.unit.Duration);
+    method public static long inHours(androidx.compose.ui.unit.Duration);
+    method public static long inMicroseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMilliseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMinutes(androidx.compose.ui.unit.Duration);
+    method public static long inSeconds(androidx.compose.ui.unit.Duration);
     field public static final long HoursPerDay = 24L; // 0x18L
     field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
     field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
@@ -265,7 +254,7 @@
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -273,13 +262,13 @@
   }
 
   public final class IntBoundsKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntBounds IntBounds(androidx.ui.unit.IntOffset topLeft, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset center(androidx.ui.unit.IntBounds);
-    method public static inline int getHeight(androidx.ui.unit.IntBounds);
-    method public static inline int getWidth(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntBounds IntBounds(androidx.compose.ui.unit.IntOffset topLeft, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset center(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getHeight(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getWidth(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
   @androidx.compose.Immutable public final class IntOffset {
@@ -288,65 +277,72 @@
     method @androidx.compose.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset minus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset plus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset unaryMinus();
     property public final int x;
     property public final int y;
-    field public static final androidx.ui.unit.IntOffset.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
   }
 
   public static final class IntOffset.Companion {
-    method public androidx.ui.unit.IntOffset getOrigin();
-    property public final androidx.ui.unit.IntOffset Origin;
+    method public androidx.compose.ui.unit.IntOffset getOrigin();
+    property public final androidx.compose.ui.unit.IntOffset Origin;
   }
 
   public final class IntOffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntOffset lerp(androidx.compose.ui.unit.IntOffset start, androidx.compose.ui.unit.IntOffset stop, float fraction);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
     ctor public IntSize(internal long packedValue);
     method @androidx.compose.Stable public inline operator int component1();
     method @androidx.compose.Stable public inline operator int component2();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize div(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize div(int other);
     method public int getHeight();
     method public int getWidth();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize times(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize times(int other);
     property public final int height;
     property public final int width;
-    field public static final androidx.ui.unit.IntSize.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
   }
 
   public static final class IntSize.Companion {
-    method public androidx.ui.unit.IntSize getZero();
-    property public final androidx.ui.unit.IntSize Zero;
+    method public androidx.compose.ui.unit.IntSize getZero();
+    property public final androidx.compose.ui.unit.IntSize Zero;
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize IntSize(int width, int height);
-    method public static androidx.ui.unit.IntOffset getCenter(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static operator androidx.ui.unit.IntSize times(int, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method public static androidx.compose.ui.unit.IntOffset getCenter(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
+  }
+
+  public enum LayoutDirection {
+    method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.LayoutDirection[] values();
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
   @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
-    method public static long copy-98Cn76g(long $this, float x = this.x, float y = this.y);
+    method public static long copy-ioHfwGI(long $this, float x = this.x, float y = this.y);
     method @androidx.compose.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-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
-    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-IsWn59c(long $this, long other);
     method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
@@ -356,102 +352,102 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
-    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
     method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
-    method public static inline float getHeight(androidx.ui.unit.PxBounds);
-    method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
+    method public static inline float getHeight(androidx.compose.ui.unit.PxBounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
-    method public static inline operator int compareTo-vVlMl6k(long $this, long other);
+    method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
+    method public static inline operator float div--R2X_6o(long $this, long other);
     method public static inline operator long div-impl(long $this, float other);
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
-    method public static inline operator float div-vVlMl6k(long $this, long other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
-    method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
+    method public static androidx.compose.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
-    method public static inline operator long minus-vVlMl6k(long $this, long other);
-    method public static inline operator long plus-vVlMl6k(long $this, long other);
+    method public static inline operator long minus--R2X_6o(long $this, long other);
+    method public static inline operator long plus--R2X_6o(long $this, long other);
     method public static inline operator long times-impl(long $this, float other);
     method public static inline operator long times-impl(long $this, double other);
     method public static inline operator long times-impl(long $this, int other);
     method public static String toString-impl(long $this);
     method public static inline operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.unit.TextUnit.Companion Companion;
+    field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
   }
 
   public static final class TextUnit.Companion {
@@ -466,69 +462,69 @@
   }
 
   public final class TextUnitKt {
-    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-HxQ2Pkc(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
-    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
-    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
-    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
-    method public static androidx.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.unit.TextUnitType[] values();
-    enum_constant public static final androidx.ui.unit.TextUnitType Em;
-    enum_constant public static final androidx.ui.unit.TextUnitType Inherit;
-    enum_constant public static final androidx.ui.unit.TextUnitType Sp;
+    method public static androidx.compose.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.TextUnitType[] values();
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Em;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Inherit;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Uptime other);
+    method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
-    method public operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration duration);
-    field public static final androidx.ui.unit.Uptime.Companion Companion;
+    method public operator androidx.compose.ui.unit.Uptime minus(androidx.compose.ui.unit.Duration duration);
+    method public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Uptime other);
+    method public operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration duration);
+    field public static final androidx.compose.ui.unit.Uptime.Companion Companion;
   }
 
   public static final class Uptime.Companion {
-    method public androidx.ui.unit.Uptime getBoot();
-    property public final androidx.ui.unit.Uptime Boot;
+    method public androidx.compose.ui.unit.Uptime getBoot();
+    property public final androidx.compose.ui.unit.Uptime Boot;
   }
 
   public final class UptimeKt {
-    method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
+    method public static operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration, androidx.compose.ui.unit.Uptime uptime);
   }
 
   @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
-    method public operator androidx.ui.unit.Velocity unaryMinus();
-    field public static final androidx.ui.unit.Velocity.Companion Companion;
+    method public operator androidx.compose.ui.unit.Velocity unaryMinus();
+    field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
   }
 
   public static final class Velocity.Companion {
-    method public androidx.ui.unit.Velocity getZero();
-    property public final androidx.ui.unit.Velocity Zero;
+    method public androidx.compose.ui.unit.Velocity getZero();
+    property public final androidx.compose.ui.unit.Velocity Zero;
   }
 
   public final class VelocityKt {
-    method public static operator androidx.ui.unit.Velocity minus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
-    method public static operator androidx.ui.unit.Velocity plus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity minus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity plus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
   }
 
 }
diff --git a/ui/ui-unit/api/restricted_0.1.0-dev16.txt b/ui/ui-unit/api/restricted_0.1.0-dev16.txt
index c14d509..a073e93 100644
--- a/ui/ui-unit/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-unit/api/restricted_0.1.0-dev16.txt
@@ -1,10 +1,26 @@
 // Signature format: 3.0
-package androidx.ui.core {
+package androidx.compose.ui.unit {
+
+  public final class AndroidDensityKt {
+    method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+  }
+
+  @androidx.compose.Immutable public final class Bounds {
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Bounds copy-ZmiikuI(float left, float top, float right, float bottom);
+    method public float getBottom();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+  }
 
   @androidx.compose.Immutable public final class Constraints {
     ctor public Constraints(internal long value);
-    method public androidx.ui.core.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy(long value);
+    method public androidx.compose.ui.unit.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -17,54 +33,27 @@
     property public final int maxWidth;
     property public final int minHeight;
     property public final int minWidth;
-    field public static final androidx.ui.core.Constraints.Companion Companion;
+    field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
     field public static final int Infinity = 2147483647; // 0x7fffffff
   }
 
   public static final class Constraints.Companion {
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed(int width, int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight(int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth(int width);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static int constrainHeight(androidx.ui.core.Constraints, int height);
-    method @androidx.compose.Stable public static int constrainWidth(androidx.ui.core.Constraints, int width);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
-    method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
-    method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
-    method public static boolean isZero(androidx.ui.core.Constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, int horizontal = 0, int vertical = 0);
-    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-  }
-
-  public enum LayoutDirection {
-    method public static androidx.ui.core.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.LayoutDirection[] values();
-    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
-    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
-  }
-
-}
-
-package androidx.ui.unit {
-
-  public final class AndroidDensityKt {
-    method public static androidx.ui.unit.Density Density(android.content.Context context);
-  }
-
-  @androidx.compose.Immutable public final class Bounds {
-    method public float component1();
-    method public float component2();
-    method public float component3();
-    method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
-    method public float getBottom();
-    method public float getLeft();
-    method public float getRight();
-    method public float getTop();
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints enforce(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.Constraints otherConstraints);
+    method public static boolean getHasFixedHeight(androidx.compose.ui.unit.Constraints);
+    method public static boolean getHasFixedWidth(androidx.compose.ui.unit.Constraints);
+    method public static boolean isZero(androidx.compose.ui.unit.Constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
   @androidx.compose.Immutable public interface Density {
@@ -72,45 +61,45 @@
     method public float getFontScale();
     method @androidx.compose.Stable public default float toDp(int);
     method @androidx.compose.Stable public default float toDp(float);
-    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
-    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default long toSp-0680j_4(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
     ctor public Dp();
-    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
     method public static float constructor-impl(float value);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
     method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
-    field public static final androidx.ui.unit.Dp.Companion Companion;
+    field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
   public static final class Dp.Companion {
@@ -122,135 +111,135 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
-    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
-    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
-    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.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);
-    method public static inline float getHeight(androidx.ui.unit.Bounds);
-    method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
-    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
+    method public static inline float getHeight(androidx.compose.ui.unit.Bounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
-    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
-    field public static final androidx.ui.unit.Duration.Companion Companion;
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
+    field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
   public static final class Duration.Companion {
-    method public androidx.ui.unit.Duration getZero();
-    property public final androidx.ui.unit.Duration Zero;
+    method public androidx.compose.ui.unit.Duration getZero();
+    property public final androidx.compose.ui.unit.Duration Zero;
   }
 
   public final class Durations {
-    method public static androidx.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
-    method public static androidx.ui.unit.Duration getDays(long);
-    method public static androidx.ui.unit.Duration getDays(int);
-    method public static androidx.ui.unit.Duration getHours(long);
-    method public static androidx.ui.unit.Duration getHours(int);
-    method public static androidx.ui.unit.Duration getMicroseconds(long);
-    method public static androidx.ui.unit.Duration getMicroseconds(int);
-    method public static androidx.ui.unit.Duration getMilliseconds(long);
-    method public static androidx.ui.unit.Duration getMilliseconds(int);
-    method public static androidx.ui.unit.Duration getMinutes(long);
-    method public static androidx.ui.unit.Duration getMinutes(int);
-    method public static androidx.ui.unit.Duration getNanoseconds(long);
-    method public static androidx.ui.unit.Duration getNanoseconds(int);
+    method public static androidx.compose.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.compose.ui.unit.Duration getDays(long);
+    method public static androidx.compose.ui.unit.Duration getDays(int);
+    method public static androidx.compose.ui.unit.Duration getHours(long);
+    method public static androidx.compose.ui.unit.Duration getHours(int);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMinutes(long);
+    method public static androidx.compose.ui.unit.Duration getMinutes(int);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(long);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(int);
     method public static long getNanosecondsPerDay();
     method public static long getNanosecondsPerHour();
     method public static long getNanosecondsPerMillisecond();
     method public static long getNanosecondsPerMinute();
     method public static long getNanosecondsPerSecond();
-    method public static androidx.ui.unit.Duration getSeconds(long);
-    method public static androidx.ui.unit.Duration getSeconds(int);
-    method public static long inDays(androidx.ui.unit.Duration);
-    method public static long inHours(androidx.ui.unit.Duration);
-    method public static long inMicroseconds(androidx.ui.unit.Duration);
-    method public static long inMilliseconds(androidx.ui.unit.Duration);
-    method public static long inMinutes(androidx.ui.unit.Duration);
-    method public static long inSeconds(androidx.ui.unit.Duration);
+    method public static androidx.compose.ui.unit.Duration getSeconds(long);
+    method public static androidx.compose.ui.unit.Duration getSeconds(int);
+    method public static long inDays(androidx.compose.ui.unit.Duration);
+    method public static long inHours(androidx.compose.ui.unit.Duration);
+    method public static long inMicroseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMilliseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMinutes(androidx.compose.ui.unit.Duration);
+    method public static long inSeconds(androidx.compose.ui.unit.Duration);
     field public static final long HoursPerDay = 24L; // 0x18L
     field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
     field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
@@ -265,7 +254,7 @@
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -273,13 +262,13 @@
   }
 
   public final class IntBoundsKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntBounds IntBounds(androidx.ui.unit.IntOffset topLeft, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset center(androidx.ui.unit.IntBounds);
-    method public static inline int getHeight(androidx.ui.unit.IntBounds);
-    method public static inline int getWidth(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntBounds IntBounds(androidx.compose.ui.unit.IntOffset topLeft, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset center(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getHeight(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getWidth(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
   @androidx.compose.Immutable public final class IntOffset {
@@ -288,65 +277,72 @@
     method @androidx.compose.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset minus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset plus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset unaryMinus();
     property public final int x;
     property public final int y;
-    field public static final androidx.ui.unit.IntOffset.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
   }
 
   public static final class IntOffset.Companion {
-    method public androidx.ui.unit.IntOffset getOrigin();
-    property public final androidx.ui.unit.IntOffset Origin;
+    method public androidx.compose.ui.unit.IntOffset getOrigin();
+    property public final androidx.compose.ui.unit.IntOffset Origin;
   }
 
   public final class IntOffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntOffset lerp(androidx.compose.ui.unit.IntOffset start, androidx.compose.ui.unit.IntOffset stop, float fraction);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
     ctor public IntSize(internal long packedValue);
     method @androidx.compose.Stable public inline operator int component1();
     method @androidx.compose.Stable public inline operator int component2();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize div(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize div(int other);
     method public int getHeight();
     method public int getWidth();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize times(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize times(int other);
     property public final int height;
     property public final int width;
-    field public static final androidx.ui.unit.IntSize.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
   }
 
   public static final class IntSize.Companion {
-    method public androidx.ui.unit.IntSize getZero();
-    property public final androidx.ui.unit.IntSize Zero;
+    method public androidx.compose.ui.unit.IntSize getZero();
+    property public final androidx.compose.ui.unit.IntSize Zero;
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize IntSize(int width, int height);
-    method public static androidx.ui.unit.IntOffset getCenter(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static operator androidx.ui.unit.IntSize times(int, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method public static androidx.compose.ui.unit.IntOffset getCenter(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
+  }
+
+  public enum LayoutDirection {
+    method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.LayoutDirection[] values();
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
   @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
-    method public static long copy-98Cn76g(long $this, float x = this.x, float y = this.y);
+    method public static long copy-ioHfwGI(long $this, float x = this.x, float y = this.y);
     method @androidx.compose.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-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
-    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-IsWn59c(long $this, long other);
     method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
@@ -356,102 +352,102 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
-    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
     method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
-    method public static inline float getHeight(androidx.ui.unit.PxBounds);
-    method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
+    method public static inline float getHeight(androidx.compose.ui.unit.PxBounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
-    method public static inline operator int compareTo-vVlMl6k(long $this, long other);
+    method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
+    method public static inline operator float div--R2X_6o(long $this, long other);
     method public static inline operator long div-impl(long $this, float other);
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
-    method public static inline operator float div-vVlMl6k(long $this, long other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
-    method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
+    method public static androidx.compose.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
-    method public static inline operator long minus-vVlMl6k(long $this, long other);
-    method public static inline operator long plus-vVlMl6k(long $this, long other);
+    method public static inline operator long minus--R2X_6o(long $this, long other);
+    method public static inline operator long plus--R2X_6o(long $this, long other);
     method public static inline operator long times-impl(long $this, float other);
     method public static inline operator long times-impl(long $this, double other);
     method public static inline operator long times-impl(long $this, int other);
     method public static String toString-impl(long $this);
     method public static inline operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.unit.TextUnit.Companion Companion;
+    field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
   }
 
   public static final class TextUnit.Companion {
@@ -466,73 +462,73 @@
   }
 
   public final class TextUnitKt {
-    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-2fUAro8(long a, long b, long c, kotlin.jvm.functions.Function0<? extends T> block);
-    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-G_x5Bg4(long a, kotlin.jvm.functions.Function0<? extends T> block);
-    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-JyO0NBI(long a, long b, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-bAewZlA(long a, kotlin.jvm.functions.Function0<? extends T> block);
+    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-pdU9Bpg(long a, long b, kotlin.jvm.functions.Function0<? extends T> block);
+    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-wj_tM-0(long a, long b, long c, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-HxQ2Pkc(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
-    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
+    method @androidx.compose.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline long min-8E83U4Q(long a, long b);
     method @kotlin.PublishedApi internal static inline long pack(long unitType, float v);
-    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
-    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
-    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
-    method public static androidx.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.unit.TextUnitType[] values();
-    enum_constant public static final androidx.ui.unit.TextUnitType Em;
-    enum_constant public static final androidx.ui.unit.TextUnitType Inherit;
-    enum_constant public static final androidx.ui.unit.TextUnitType Sp;
+    method public static androidx.compose.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.TextUnitType[] values();
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Em;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Inherit;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Uptime other);
+    method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
-    method public operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration duration);
-    field public static final androidx.ui.unit.Uptime.Companion Companion;
+    method public operator androidx.compose.ui.unit.Uptime minus(androidx.compose.ui.unit.Duration duration);
+    method public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Uptime other);
+    method public operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration duration);
+    field public static final androidx.compose.ui.unit.Uptime.Companion Companion;
   }
 
   public static final class Uptime.Companion {
-    method public androidx.ui.unit.Uptime getBoot();
-    property public final androidx.ui.unit.Uptime Boot;
+    method public androidx.compose.ui.unit.Uptime getBoot();
+    property public final androidx.compose.ui.unit.Uptime Boot;
   }
 
   public final class UptimeKt {
-    method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
+    method public static operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration, androidx.compose.ui.unit.Uptime uptime);
   }
 
   @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
-    method public operator androidx.ui.unit.Velocity unaryMinus();
-    field public static final androidx.ui.unit.Velocity.Companion Companion;
+    method public operator androidx.compose.ui.unit.Velocity unaryMinus();
+    field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
   }
 
   public static final class Velocity.Companion {
-    method public androidx.ui.unit.Velocity getZero();
-    property public final androidx.ui.unit.Velocity Zero;
+    method public androidx.compose.ui.unit.Velocity getZero();
+    property public final androidx.compose.ui.unit.Velocity Zero;
   }
 
   public final class VelocityKt {
-    method public static operator androidx.ui.unit.Velocity minus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
-    method public static operator androidx.ui.unit.Velocity plus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity minus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity plus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
   }
 
 }
diff --git a/ui/ui-unit/api/restricted_current.txt b/ui/ui-unit/api/restricted_current.txt
index c14d509..a073e93 100644
--- a/ui/ui-unit/api/restricted_current.txt
+++ b/ui/ui-unit/api/restricted_current.txt
@@ -1,10 +1,26 @@
 // Signature format: 3.0
-package androidx.ui.core {
+package androidx.compose.ui.unit {
+
+  public final class AndroidDensityKt {
+    method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
+  }
+
+  @androidx.compose.Immutable public final class Bounds {
+    method public float component1();
+    method public float component2();
+    method public float component3();
+    method public float component4();
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Bounds copy-ZmiikuI(float left, float top, float right, float bottom);
+    method public float getBottom();
+    method public float getLeft();
+    method public float getRight();
+    method public float getTop();
+  }
 
   @androidx.compose.Immutable public final class Constraints {
     ctor public Constraints(internal long value);
-    method public androidx.ui.core.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
-    method @androidx.compose.Immutable public androidx.ui.core.Constraints copy(long value);
+    method public androidx.compose.ui.unit.Constraints copy(int minWidth = this.minWidth, int maxWidth = this.maxWidth, int minHeight = this.minHeight, int maxHeight = this.maxHeight);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -17,54 +33,27 @@
     property public final int maxWidth;
     property public final int minHeight;
     property public final int minWidth;
-    field public static final androidx.ui.core.Constraints.Companion Companion;
+    field public static final androidx.compose.ui.unit.Constraints.Companion Companion;
     field public static final int Infinity = 2147483647; // 0x7fffffff
   }
 
   public static final class Constraints.Companion {
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixed(int width, int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedHeight(int height);
-    method @androidx.compose.Stable public androidx.ui.core.Constraints fixedWidth(int width);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize constrain(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static int constrainHeight(androidx.ui.core.Constraints, int height);
-    method @androidx.compose.Stable public static int constrainWidth(androidx.ui.core.Constraints, int width);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints enforce(androidx.ui.core.Constraints, androidx.ui.core.Constraints otherConstraints);
-    method public static boolean getHasFixedHeight(androidx.ui.core.Constraints);
-    method public static boolean getHasFixedWidth(androidx.ui.core.Constraints);
-    method public static boolean isZero(androidx.ui.core.Constraints);
-    method @androidx.compose.Stable public static androidx.ui.core.Constraints offset(androidx.ui.core.Constraints, int horizontal = 0, int vertical = 0);
-    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.ui.core.Constraints, androidx.ui.unit.IntSize size);
-  }
-
-  public enum LayoutDirection {
-    method public static androidx.ui.core.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.core.LayoutDirection[] values();
-    enum_constant public static final androidx.ui.core.LayoutDirection Ltr;
-    enum_constant public static final androidx.ui.core.LayoutDirection Rtl;
-  }
-
-}
-
-package androidx.ui.unit {
-
-  public final class AndroidDensityKt {
-    method public static androidx.ui.unit.Density Density(android.content.Context context);
-  }
-
-  @androidx.compose.Immutable public final class Bounds {
-    method public float component1();
-    method public float component2();
-    method public float component3();
-    method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.Bounds copy-rIHlIKc(float left, float top, float right, float bottom);
-    method public float getBottom();
-    method public float getLeft();
-    method public float getRight();
-    method public float getTop();
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints enforce(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.Constraints otherConstraints);
+    method public static boolean getHasFixedHeight(androidx.compose.ui.unit.Constraints);
+    method public static boolean getHasFixedWidth(androidx.compose.ui.unit.Constraints);
+    method public static boolean isZero(androidx.compose.ui.unit.Constraints);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
   @androidx.compose.Immutable public interface Density {
@@ -72,45 +61,45 @@
     method public float getFontScale();
     method @androidx.compose.Stable public default float toDp(int);
     method @androidx.compose.Stable public default float toDp(float);
-    method @androidx.compose.Stable public default float toDp-vVlMl6k(long);
-    method @androidx.compose.Stable public default int toIntPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default int toIntPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default float toPx-ipo6vVg(float);
-    method @androidx.compose.Stable public default float toPx-vVlMl6k(long);
-    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.Bounds);
+    method @androidx.compose.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
     method @androidx.compose.Stable public default long toSp(int);
     method @androidx.compose.Stable public default long toSp(float);
-    method @androidx.compose.Stable public default long toSp-ipo6vVg(float);
+    method @androidx.compose.Stable public default long toSp-0680j_4(float);
     property public abstract float density;
     property public abstract float fontScale;
   }
 
   public final class DensityKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.Density Density(float density, float fontScale = 1f);
   }
 
-  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.ui.unit.Dp> {
+  @androidx.compose.Immutable public final inline class Dp implements java.lang.Comparable<androidx.compose.ui.unit.Dp> {
     ctor public Dp();
-    method @androidx.compose.Stable public operator int compareTo-ipo6vVg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
     method public static float constructor-impl(float value);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-ipo6vVg(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, int other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
     method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
-    field public static final androidx.ui.unit.Dp.Companion Companion;
+    field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
   public static final class Dp.Companion {
@@ -122,135 +111,135 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.ui.unit.DpCubed> {
+  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
     ctor public DpCubed();
-    method @androidx.compose.Stable public operator int compareTo-JDqhs2g(float p);
-    method @androidx.compose.Stable public static operator int compareTo-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-JDqhs2g(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-JDqhs2g(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.ui.unit.DpInverse> {
+  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
     ctor public DpInverse();
-    method @androidx.compose.Stable public operator int compareTo-_K2iRR8(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_K2iRR8(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-_K2iRR8(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-x8crYZs(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    method @androidx.compose.Stable public static inline long Position-98Cn76g(float x, float y);
-    method @androidx.compose.Stable public static inline float coerceAtLeast-98Cn76g(float, float minimumValue);
-    method @androidx.compose.Stable public static inline float coerceAtMost-98Cn76g(float, float maximumValue);
-    method @androidx.compose.Stable public static inline float coerceIn-x40Cv7w(float, float minimumValue, float maximumValue);
-    method @androidx.compose.Stable public static inline operator float div-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float div-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float div-hZ6b2Ic(int, float other);
-    method @androidx.compose.Stable public static float getDistance-T8eBu-w(long);
+    method @androidx.compose.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.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);
-    method public static inline float getHeight(androidx.ui.unit.Bounds);
-    method public static inline float getWidth(androidx.ui.unit.Bounds);
-    method @androidx.compose.Stable public static inline boolean isFinite-ipo6vVg(float);
-    method @androidx.compose.Stable public static float lerp-3WSoJcA(float start, float stop, float fraction);
-    method @androidx.compose.Stable public static long lerp-d5NHFfI(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline float max-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline float min-98Cn76g(float a, float b);
-    method @androidx.compose.Stable public static inline operator float times-H0Zl2lQ(float, float other);
-    method @androidx.compose.Stable public static inline operator float times-Y_YOLaE(double, float other);
-    method @androidx.compose.Stable public static inline operator float times-hZ6b2Ic(int, float other);
+    method public static inline float getHeight(androidx.compose.ui.unit.Bounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.ui.unit.DpSquared> {
+  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
     ctor public DpSquared();
-    method @androidx.compose.Stable public operator int compareTo-x8crYZs(float p);
-    method @androidx.compose.Stable public static operator int compareTo-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-JDqhs2g(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-_kMlNio(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-ipo6vVg(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-x8crYZs(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-x8crYZs(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-x8crYZs(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float times-0680j_4(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float times-ipo6vVg(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.ui.unit.Duration> {
+  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
     ctor public Duration(long nanoseconds);
-    method @androidx.compose.Stable public int compareTo(androidx.ui.unit.Duration other);
+    method @androidx.compose.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Duration copy(long nanoseconds);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(int quotient);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration div(double quotient);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration plus(androidx.ui.unit.Duration other);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(int factor);
-    method @androidx.compose.Stable public operator androidx.ui.unit.Duration times(double factor);
-    field public static final androidx.ui.unit.Duration.Companion Companion;
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
+    field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
   public static final class Duration.Companion {
-    method public androidx.ui.unit.Duration getZero();
-    property public final androidx.ui.unit.Duration Zero;
+    method public androidx.compose.ui.unit.Duration getZero();
+    property public final androidx.compose.ui.unit.Duration Zero;
   }
 
   public final class Durations {
-    method public static androidx.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
-    method public static androidx.ui.unit.Duration getDays(long);
-    method public static androidx.ui.unit.Duration getDays(int);
-    method public static androidx.ui.unit.Duration getHours(long);
-    method public static androidx.ui.unit.Duration getHours(int);
-    method public static androidx.ui.unit.Duration getMicroseconds(long);
-    method public static androidx.ui.unit.Duration getMicroseconds(int);
-    method public static androidx.ui.unit.Duration getMilliseconds(long);
-    method public static androidx.ui.unit.Duration getMilliseconds(int);
-    method public static androidx.ui.unit.Duration getMinutes(long);
-    method public static androidx.ui.unit.Duration getMinutes(int);
-    method public static androidx.ui.unit.Duration getNanoseconds(long);
-    method public static androidx.ui.unit.Duration getNanoseconds(int);
+    method public static androidx.compose.ui.unit.Duration Duration(long days = 0, long hours = 0, long minutes = 0, long seconds = 0, long milliseconds = 0, long microseconds = 0, long nanoseconds = 0);
+    method public static androidx.compose.ui.unit.Duration getDays(long);
+    method public static androidx.compose.ui.unit.Duration getDays(int);
+    method public static androidx.compose.ui.unit.Duration getHours(long);
+    method public static androidx.compose.ui.unit.Duration getHours(int);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMicroseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(long);
+    method public static androidx.compose.ui.unit.Duration getMilliseconds(int);
+    method public static androidx.compose.ui.unit.Duration getMinutes(long);
+    method public static androidx.compose.ui.unit.Duration getMinutes(int);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(long);
+    method public static androidx.compose.ui.unit.Duration getNanoseconds(int);
     method public static long getNanosecondsPerDay();
     method public static long getNanosecondsPerHour();
     method public static long getNanosecondsPerMillisecond();
     method public static long getNanosecondsPerMinute();
     method public static long getNanosecondsPerSecond();
-    method public static androidx.ui.unit.Duration getSeconds(long);
-    method public static androidx.ui.unit.Duration getSeconds(int);
-    method public static long inDays(androidx.ui.unit.Duration);
-    method public static long inHours(androidx.ui.unit.Duration);
-    method public static long inMicroseconds(androidx.ui.unit.Duration);
-    method public static long inMilliseconds(androidx.ui.unit.Duration);
-    method public static long inMinutes(androidx.ui.unit.Duration);
-    method public static long inSeconds(androidx.ui.unit.Duration);
+    method public static androidx.compose.ui.unit.Duration getSeconds(long);
+    method public static androidx.compose.ui.unit.Duration getSeconds(int);
+    method public static long inDays(androidx.compose.ui.unit.Duration);
+    method public static long inHours(androidx.compose.ui.unit.Duration);
+    method public static long inMicroseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMilliseconds(androidx.compose.ui.unit.Duration);
+    method public static long inMinutes(androidx.compose.ui.unit.Duration);
+    method public static long inSeconds(androidx.compose.ui.unit.Duration);
     field public static final long HoursPerDay = 24L; // 0x18L
     field public static final long MicrosecondsPerMillisecond = 1000L; // 0x3e8L
     field public static final long MillisecondsPerSecond = 1000L; // 0x3e8L
@@ -265,7 +254,7 @@
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
     method public int getBottom();
     method public int getLeft();
     method public int getRight();
@@ -273,13 +262,13 @@
   }
 
   public final class IntBoundsKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntBounds IntBounds(androidx.ui.unit.IntOffset topLeft, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset center(androidx.ui.unit.IntBounds);
-    method public static inline int getHeight(androidx.ui.unit.IntBounds);
-    method public static inline int getWidth(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntBounds toBounds(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.IntBounds);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize toSize(androidx.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntBounds IntBounds(androidx.compose.ui.unit.IntOffset topLeft, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset center(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getHeight(androidx.compose.ui.unit.IntBounds);
+    method public static inline int getWidth(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
   @androidx.compose.Immutable public final class IntOffset {
@@ -288,65 +277,72 @@
     method @androidx.compose.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset minus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset plus(androidx.ui.unit.IntOffset other);
-    method @androidx.compose.Stable public inline operator androidx.ui.unit.IntOffset unaryMinus();
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.Stable public inline operator androidx.compose.ui.unit.IntOffset unaryMinus();
     property public final int x;
     property public final int y;
-    field public static final androidx.ui.unit.IntOffset.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntOffset.Companion Companion;
   }
 
   public static final class IntOffset.Companion {
-    method public androidx.ui.unit.IntOffset getOrigin();
-    property public final androidx.ui.unit.IntOffset Origin;
+    method public androidx.compose.ui.unit.IntOffset getOrigin();
+    property public final androidx.compose.ui.unit.IntOffset Origin;
   }
 
   public final class IntOffsetKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset IntOffset(int x, int y);
-    method @androidx.compose.Stable public static androidx.ui.unit.IntOffset lerp(androidx.ui.unit.IntOffset start, androidx.ui.unit.IntOffset stop, float fraction);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.ui.unit.IntOffset offset);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.ui.unit.IntOffset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntOffset lerp(androidx.compose.ui.unit.IntOffset start, androidx.compose.ui.unit.IntOffset stop, float fraction);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
   @androidx.compose.Immutable public final class IntSize {
     ctor public IntSize(internal long packedValue);
     method @androidx.compose.Stable public inline operator int component1();
     method @androidx.compose.Stable public inline operator int component2();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize div(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize div(int other);
     method public int getHeight();
     method public int getWidth();
-    method @androidx.compose.Stable public operator androidx.ui.unit.IntSize times(int other);
+    method @androidx.compose.Stable public operator androidx.compose.ui.unit.IntSize times(int other);
     property public final int height;
     property public final int width;
-    field public static final androidx.ui.unit.IntSize.Companion Companion;
+    field public static final androidx.compose.ui.unit.IntSize.Companion Companion;
   }
 
   public static final class IntSize.Companion {
-    method public androidx.ui.unit.IntSize getZero();
-    property public final androidx.ui.unit.IntSize Zero;
+    method public androidx.compose.ui.unit.IntSize getZero();
+    property public final androidx.compose.ui.unit.IntSize Zero;
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.ui.unit.IntSize IntSize(int width, int height);
-    method public static androidx.ui.unit.IntOffset getCenter(androidx.ui.unit.IntSize);
-    method @androidx.compose.Stable public static operator androidx.ui.unit.IntSize times(int, androidx.ui.unit.IntSize size);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.IntSize);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method public static androidx.compose.ui.unit.IntOffset getCenter(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
+  }
+
+  public enum LayoutDirection {
+    method public static androidx.compose.ui.unit.LayoutDirection valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.LayoutDirection[] values();
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Ltr;
+    enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
   @androidx.compose.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
-    method public static long copy-98Cn76g(long $this, float x = this.x, float y = this.y);
+    method public static long copy-ioHfwGI(long $this, float x = this.x, float y = this.y);
     method @androidx.compose.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-impl(long $this);
     method public static float getY-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static inline operator long minus-T8eBu-w(long $this, long other);
-    method @androidx.compose.Stable public static inline operator long plus-T8eBu-w(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.Stable public static inline operator long plus-IsWn59c(long $this, long other);
     method @androidx.compose.Stable public static String toString-impl(long $this);
   }
 
@@ -356,102 +352,102 @@
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.PxBounds copy(float left, float top, float right, float bottom);
     method public float getBottom();
     method public float getLeft();
     method public float getRight();
     method public float getTop();
   }
 
-  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.ui.unit.PxCubed> {
+  @androidx.compose.Immutable public final inline class PxCubed implements java.lang.Comparable<androidx.compose.ui.unit.PxCubed> {
     ctor public PxCubed();
-    method @androidx.compose.Stable public operator int compareTo-bji3ab4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-bji3ab4(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-bji3ab4(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.ui.unit.PxInverse> {
+  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
     ctor public PxInverse();
-    method @androidx.compose.Stable public operator int compareTo-KGV0gLo(float p);
-    method @androidx.compose.Stable public static operator int compareTo-KGV0gLo(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
     method public static float constructor-impl(float value);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float plus-KGV0gLo(float $this, float dimension);
-    method @androidx.compose.Stable public static inline operator float times-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.Stable public static inline operator float times-830ceAw(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    method @androidx.compose.Stable public static inline androidx.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
     method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
-    method public static inline float getHeight(androidx.ui.unit.PxBounds);
-    method public static inline float getWidth(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static inline androidx.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
-    method @androidx.compose.Stable public static androidx.ui.unit.PxBounds toBounds-uvyYCjk(long);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.ui.unit.PxBounds);
-    method @androidx.compose.Stable public static long toSize(androidx.ui.unit.PxBounds);
+    method public static inline float getHeight(androidx.compose.ui.unit.PxBounds);
+    method public static inline float getWidth(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.ui.unit.PxSquared> {
+  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
     ctor public PxSquared();
-    method @androidx.compose.Stable public operator int compareTo-RjPF0Mw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
     method public static float constructor-impl(float value);
-    method @androidx.compose.Stable public static inline operator float div-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float div-bji3ab4(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float div-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float div-impl(float $this, float other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getValue();
     method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Stable public static inline operator float minus-RjPF0Mw(float $this, float other);
-    method @androidx.compose.Stable public static inline operator float plus-RjPF0Mw(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
     method @androidx.compose.Stable public static inline operator float times-impl(float $this, float other);
     method @androidx.compose.Stable public static String toString-impl(float $this);
   }
 
   @androidx.compose.Immutable public final inline class TextUnit {
     ctor public TextUnit();
-    method public static inline operator int compareTo-vVlMl6k(long $this, long other);
+    method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
+    method public static inline operator float div--R2X_6o(long $this, long other);
     method public static inline operator long div-impl(long $this, float other);
     method public static inline operator long div-impl(long $this, double other);
     method public static inline operator long div-impl(long $this, int other);
-    method public static inline operator float div-vVlMl6k(long $this, long other);
     method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
-    method public static androidx.ui.unit.TextUnitType getType-impl(long $this);
+    method public static androidx.compose.ui.unit.TextUnitType getType-impl(long $this);
     method public static float getValue-impl(long $this);
     method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
     method public static boolean isEm-impl(long $this);
     method public static boolean isInherit-impl(long $this);
     method public static boolean isSp-impl(long $this);
-    method public static inline operator long minus-vVlMl6k(long $this, long other);
-    method public static inline operator long plus-vVlMl6k(long $this, long other);
+    method public static inline operator long minus--R2X_6o(long $this, long other);
+    method public static inline operator long plus--R2X_6o(long $this, long other);
     method public static inline operator long times-impl(long $this, float other);
     method public static inline operator long times-impl(long $this, double other);
     method public static inline operator long times-impl(long $this, int other);
     method public static String toString-impl(long $this);
     method public static inline operator long unaryMinus-impl(long $this);
-    field public static final androidx.ui.unit.TextUnit.Companion Companion;
+    field public static final androidx.compose.ui.unit.TextUnit.Companion Companion;
   }
 
   public static final class TextUnit.Companion {
@@ -466,73 +462,73 @@
   }
 
   public final class TextUnitKt {
-    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-2fUAro8(long a, long b, long c, kotlin.jvm.functions.Function0<? extends T> block);
-    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-G_x5Bg4(long a, kotlin.jvm.functions.Function0<? extends T> block);
-    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-JyO0NBI(long a, long b, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.Stable public static inline long coerceAtLeast-gL_aCS0(long, long minimumValue);
-    method @androidx.compose.Stable public static inline long coerceAtMost-gL_aCS0(long, long maximumValue);
-    method @androidx.compose.Stable public static inline long coerceIn-Y2exRck(long, long minimumValue, long maximumValue);
+    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-bAewZlA(long a, kotlin.jvm.functions.Function0<? extends T> block);
+    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-pdU9Bpg(long a, long b, kotlin.jvm.functions.Function0<? extends T> block);
+    method @kotlin.PublishedApi internal static inline <T> T! checkArithmetic-wj_tM-0(long a, long b, long c, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.Stable public static inline long coerceIn-HxQ2Pkc(long, long minimumValue, long maximumValue);
     method public static long getEm(float);
     method public static long getEm(double);
     method public static long getEm(int);
     method public static long getSp(float);
     method public static long getSp(double);
     method public static long getSp(int);
-    method @androidx.compose.Stable public static long lerp-SpZbbpo(long a, long b, float t);
-    method @androidx.compose.Stable public static inline long max-gL_aCS0(long a, long b);
-    method @androidx.compose.Stable public static inline long min-gL_aCS0(long a, long b);
+    method @androidx.compose.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.Stable public static inline long min-8E83U4Q(long a, long b);
     method @kotlin.PublishedApi internal static inline long pack(long unitType, float v);
-    method @androidx.compose.Stable public static inline operator long times-GncdoDw(double, long other);
-    method @androidx.compose.Stable public static inline operator long times-MVx5XBU(float, long other);
-    method @androidx.compose.Stable public static inline operator long times-UlzjdM0(int, long other);
+    method @androidx.compose.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
-    method public static androidx.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.unit.TextUnitType[] values();
-    enum_constant public static final androidx.ui.unit.TextUnitType Em;
-    enum_constant public static final androidx.ui.unit.TextUnitType Inherit;
-    enum_constant public static final androidx.ui.unit.TextUnitType Sp;
+    method public static androidx.compose.ui.unit.TextUnitType valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.ui.unit.TextUnitType[] values();
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Em;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Inherit;
+    enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.ui.unit.Uptime> {
+  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
-    method public int compareTo(androidx.ui.unit.Uptime other);
+    method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
-    method public operator androidx.ui.unit.Uptime minus(androidx.ui.unit.Duration duration);
-    method public operator androidx.ui.unit.Duration minus(androidx.ui.unit.Uptime other);
-    method public operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration duration);
-    field public static final androidx.ui.unit.Uptime.Companion Companion;
+    method public operator androidx.compose.ui.unit.Uptime minus(androidx.compose.ui.unit.Duration duration);
+    method public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Uptime other);
+    method public operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration duration);
+    field public static final androidx.compose.ui.unit.Uptime.Companion Companion;
   }
 
   public static final class Uptime.Companion {
-    method public androidx.ui.unit.Uptime getBoot();
-    property public final androidx.ui.unit.Uptime Boot;
+    method public androidx.compose.ui.unit.Uptime getBoot();
+    property public final androidx.compose.ui.unit.Uptime Boot;
   }
 
   public final class UptimeKt {
-    method public static operator androidx.ui.unit.Uptime plus(androidx.ui.unit.Duration, androidx.ui.unit.Uptime uptime);
+    method public static operator androidx.compose.ui.unit.Uptime plus(androidx.compose.ui.unit.Duration, androidx.compose.ui.unit.Uptime uptime);
   }
 
   @androidx.compose.Immutable public final class Velocity {
     ctor public Velocity(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset component1();
-    method @androidx.compose.Immutable public androidx.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.Immutable public androidx.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
     method public androidx.compose.ui.geometry.Offset getPixelsPerSecond();
-    method public operator androidx.ui.unit.Velocity unaryMinus();
-    field public static final androidx.ui.unit.Velocity.Companion Companion;
+    method public operator androidx.compose.ui.unit.Velocity unaryMinus();
+    field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
   }
 
   public static final class Velocity.Companion {
-    method public androidx.ui.unit.Velocity getZero();
-    property public final androidx.ui.unit.Velocity Zero;
+    method public androidx.compose.ui.unit.Velocity getZero();
+    property public final androidx.compose.ui.unit.Velocity Zero;
   }
 
   public final class VelocityKt {
-    method public static operator androidx.ui.unit.Velocity minus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
-    method public static operator androidx.ui.unit.Velocity plus(androidx.ui.unit.Velocity, androidx.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity minus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
+    method public static operator androidx.compose.ui.unit.Velocity plus(androidx.compose.ui.unit.Velocity, androidx.compose.ui.unit.Velocity other);
   }
 
 }
diff --git a/ui/ui-unit/samples/src/main/AndroidManifest.xml b/ui/ui-unit/samples/src/main/AndroidManifest.xml
index b5a9d18..5b694ab65 100644
--- a/ui/ui-unit/samples/src/main/AndroidManifest.xml
+++ b/ui/ui-unit/samples/src/main/AndroidManifest.xml
@@ -14,4 +14,4 @@
   limitations under the License.
   -->
 
-<manifest package="androidx.ui.unit.samples" />
+<manifest package="androidx.compose.ui.unit.samples" />
diff --git a/ui/ui-unit/samples/src/main/java/androidx/ui/unit/samples/DensitySample.kt b/ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt
similarity index 86%
rename from ui/ui-unit/samples/src/main/java/androidx/ui/unit/samples/DensitySample.kt
rename to ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt
index 521771b..03d0ba1 100644
--- a/ui/ui-unit/samples/src/main/java/androidx/ui/unit/samples/DensitySample.kt
+++ b/ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit.samples
+package androidx.compose.ui.unit.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.ui.core.DensityAmbient
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 
 @Sampled
 @Composable
diff --git a/ui/ui-unit/src/androidAndroidTest/AndroidManifest.xml b/ui/ui-unit/src/androidAndroidTest/AndroidManifest.xml
index 7c18df6..9cd6820 100644
--- a/ui/ui-unit/src/androidAndroidTest/AndroidManifest.xml
+++ b/ui/ui-unit/src/androidAndroidTest/AndroidManifest.xml
@@ -14,11 +14,11 @@
      limitations under the License.
 -->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.ui.unit.test">
+    package="androidx.compose.ui.unit">
     <application>
-        <activity android:name="androidx.ui.unit.DpDeviceTest$Companion$TestActivity"
+        <activity android:name="androidx.compose.ui.unit.DpDeviceTest$Companion$TestActivity"
             android:theme="@android:style/Theme.Material.NoActionBar.Fullscreen"/>
-        <activity android:name="androidx.ui.unit.SpDeviceTest$Companion$TestActivity"
+        <activity android:name="androidx.compose.ui.unit.SpDeviceTest$Companion$TestActivity"
             android:theme="@android:style/Theme.Material.NoActionBar.Fullscreen"/>
     </application>
 </manifest>
diff --git a/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/ui/unit/DpDeviceTest.kt b/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt
similarity index 97%
rename from ui/ui-unit/src/androidAndroidTest/kotlin/androidx/ui/unit/DpDeviceTest.kt
rename to ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt
index 8069628..fbbc3cc 100644
--- a/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/ui/unit/DpDeviceTest.kt
+++ b/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/DpDeviceTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import android.app.Activity
 import android.util.TypedValue
diff --git a/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/ui/unit/SpDeviceTest.kt b/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt
similarity index 98%
rename from ui/ui-unit/src/androidAndroidTest/kotlin/androidx/ui/unit/SpDeviceTest.kt
rename to ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt
index 9bece1e..d77afab 100644
--- a/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/ui/unit/SpDeviceTest.kt
+++ b/ui/ui-unit/src/androidAndroidTest/kotlin/androidx/compose/ui/unit/SpDeviceTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import android.app.Activity
 import android.util.TypedValue
diff --git a/ui/ui-unit/src/androidMain/AndroidManifest.xml b/ui/ui-unit/src/androidMain/AndroidManifest.xml
index 8778f9b..5dece17 100644
--- a/ui/ui-unit/src/androidMain/AndroidManifest.xml
+++ b/ui/ui-unit/src/androidMain/AndroidManifest.xml
@@ -13,4 +13,4 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<manifest package="androidx.ui.unit" />
+<manifest package="androidx.compose.ui.unit" />
diff --git a/ui/ui-unit/src/androidMain/kotlin/androidx/ui/unit/AndroidDensity.kt b/ui/ui-unit/src/androidMain/kotlin/androidx/compose/ui/unit/AndroidDensity.kt
similarity index 96%
rename from ui/ui-unit/src/androidMain/kotlin/androidx/ui/unit/AndroidDensity.kt
rename to ui/ui-unit/src/androidMain/kotlin/androidx/compose/ui/unit/AndroidDensity.kt
index 0d2c60f..54f5b61 100644
--- a/ui/ui-unit/src/androidMain/kotlin/androidx/ui/unit/AndroidDensity.kt
+++ b/ui/ui-unit/src/androidMain/kotlin/androidx/compose/ui/unit/AndroidDensity.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import android.content.Context
 
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/core/Constraints.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt
similarity index 99%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/core/Constraints.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt
index 960c67b..a0d214a 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/core/Constraints.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt
@@ -15,11 +15,10 @@
  */
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.core
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.unit.IntSize
 
 /**
  * Immutable constraints used for measuring child Layouts or [LayoutModifier]s. A parent layout
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
similarity index 96%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
index 9021d6f..1514d2a 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Density.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
@@ -14,11 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.core.Constraints
 import androidx.compose.ui.geometry.Rect
 import kotlin.math.roundToInt
 
@@ -40,7 +39,7 @@
 /**
  * A density of the screen. Used for the conversions between [Dp], [Px], [Int] and [TextUnit].
  *
- * @sample androidx.ui.unit.samples.WithDensitySample
+ * @sample androidx.compose.ui.unit.samples.WithDensitySample
  */
 @Immutable
 interface Density {
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Dp.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
similarity index 99%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Dp.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
index c541cea..a829ffa 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Dp.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
@@ -15,11 +15,11 @@
  */
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
-import androidx.ui.unit.Dp.Companion.Hairline
+import androidx.compose.ui.unit.Dp.Companion.Hairline
 import androidx.ui.util.lerp
 import androidx.ui.util.packFloats
 import androidx.ui.util.unpackFloat1
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Duration.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt
similarity index 99%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Duration.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt
index ee02176..e911c55 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Duration.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt
@@ -17,7 +17,7 @@
 @file:kotlin.jvm.JvmName("Durations")
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt
similarity index 98%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt
index dda3263..a239ec95 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntBounds.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt
similarity index 98%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt
index 5472785..773f4e7 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntOffset.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
similarity index 98%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
index 744f956..26b555c 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/IntSize.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/core/LayoutDirection.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/LayoutDirection.kt
similarity index 91%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/core/LayoutDirection.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/LayoutDirection.kt
index f3adee4..80c5765 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/core/LayoutDirection.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/LayoutDirection.kt
@@ -1,5 +1,5 @@
 /*
- * Copyright 2019 The Android Open Source Project
+ * Copyright 2020 The Android Open Source Project
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.core
+package androidx.compose.ui.unit
 
 /**
  * A class for defining layout directions.
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt
similarity index 99%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt
index 38fdfbb..3bf9bd9 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Px.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt
@@ -15,7 +15,7 @@
  */
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/TextUnit.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt
similarity index 99%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/TextUnit.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt
index deda1b1..5701d27 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/TextUnit.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt
@@ -15,7 +15,7 @@
  */
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.Stable
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Uptime.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt
similarity index 98%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Uptime.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt
index 3013518..0f2a4a3 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Uptime.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt
similarity index 97%
rename from ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt
rename to ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt
index e2e6202..d48f5eed 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/ui/unit/Velocity.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.Immutable
 import androidx.compose.ui.geometry.Offset
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/DpTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt
similarity index 99%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/DpTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt
index cd1196e..b03ec12 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/DpTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DpTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/DurationTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DurationTest.kt
similarity index 97%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/DurationTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DurationTest.kt
index 7d0e5e5..b22a2fea 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/DurationTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/DurationTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import org.junit.Assert.assertEquals
 import org.junit.Test
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntBoundsTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntBoundsTest.kt
similarity index 97%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntBoundsTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntBoundsTest.kt
index e8c5d74..f4d819e 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntBoundsTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntBoundsTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import org.junit.Assert
 import org.junit.Test
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntOffsetTest.kt
similarity index 97%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntOffsetTest.kt
index 19b197a..8aa0f12 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntOffsetTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntOffsetTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.ui.geometry.Offset
 import org.junit.Assert.assertEquals
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntSizeTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntSizeTest.kt
similarity index 97%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntSizeTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntSizeTest.kt
index aea86d2..e98769a 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/IntSizeTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/IntSizeTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import org.junit.Assert.assertEquals
 import org.junit.Test
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/PxTest.kt
similarity index 98%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/PxTest.kt
index e2dcec0..b1b0613 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/PxTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/PxTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/TextUnitTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/TextUnitTest.kt
similarity index 99%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/TextUnitTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/TextUnitTest.kt
index 6810545..d72867a 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/TextUnitTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/TextUnitTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/UptimeTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/UptimeTest.kt
similarity index 97%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/UptimeTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/UptimeTest.kt
index 612c15d..4f38dc4 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/UptimeTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/UptimeTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertTrue
diff --git a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/VelocityTest.kt
similarity index 97%
rename from ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt
rename to ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/VelocityTest.kt
index 830eab3..7c81a77 100644
--- a/ui/ui-unit/src/test/kotlin/androidx/ui/unit/VelocityTest.kt
+++ b/ui/ui-unit/src/test/kotlin/androidx/compose/ui/unit/VelocityTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.unit
+package androidx.compose.ui.unit
 
 import androidx.compose.ui.geometry.Offset
 import com.google.common.truth.Truth
diff --git a/ui/ui-util/integration-tests/samples/src/main/java/androidx/ui/core/samples/DensitySample.kt b/ui/ui-util/integration-tests/samples/src/main/java/androidx/ui/core/samples/DensitySample.kt
index 0ae6dfe..f39d934 100644
--- a/ui/ui-util/integration-tests/samples/src/main/java/androidx/ui/core/samples/DensitySample.kt
+++ b/ui/ui-util/integration-tests/samples/src/main/java/androidx/ui/core/samples/DensitySample.kt
@@ -19,7 +19,7 @@
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.ui.core.ambientDensity
-import androidx.ui.unit.dp
+import androidx.compose.ui.unit.dp
 import androidx.ui.core.withDensity
 
 @Sampled
