diff --git a/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt b/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt
index d113801..510605c 100644
--- a/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt
+++ b/buildSrc/src/main/kotlin/androidx/build/AndroidXUiPlugin.kt
@@ -69,8 +69,6 @@
                         // TODO(b/157230246): remove when this is enabled by default in Kotlin 1.4
                         compile.kotlinOptions.freeCompilerArgs +=
                             "-XXLanguage:+NonParenthesizedAnnotationsOnFunctionalTypes"
-                        compile.kotlinOptions.freeCompilerArgs +=
-                            listOf("-P", "plugin:androidx.compose.plugins.idea:enabled=true")
                         // TODO(b/157230235): remove when this is enabled by default
                         compile.kotlinOptions.freeCompilerArgs +=
                             "-Xopt-in=kotlin.RequiresOptIn"
diff --git a/compose/README.md b/compose/README.md
index be48786..d35a7b4 100644
--- a/compose/README.md
+++ b/compose/README.md
@@ -5,7 +5,7 @@
 A Compose application is comprised of `@Composable` functions, which are functions that transform application data into a UI hierarchy.  When the underlying data changes, the Composable functions can be re-invoked to generate an updated UI hierarchy.
 
 ```
-import androidx.compose.*
+import androidx.compose.runtime.*
 import androidx.ui.core.*
 
 @Composable
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCodegenSignatureTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt
similarity index 97%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCodegenSignatureTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt
index a18875f..c2d10c1 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCodegenSignatureTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenSignatureTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.app.Activity
 import android.content.Context
@@ -80,7 +80,7 @@
         val fileName = "$className.kt"
 
         val loader = classLoader("""
-           import androidx.compose.*
+           import androidx.compose.runtime.*
 
            $src
         """, fileName, dumpClasses)
@@ -105,7 +105,7 @@
         val className = "Test_REPLACEME_${uniqueNumber++}"
         val compiledClasses = classLoader(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
                 import android.widget.LinearLayout
                 import android.content.Context
                 import androidx.ui.node.UiApplier
@@ -186,7 +186,7 @@
             """
            import android.content.Context
            import android.widget.*
-           import androidx.compose.*
+           import androidx.compose.runtime.*
 
            $text
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCodegenTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCodegenTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt
index d1c01d0..51f0cf0 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCodegenTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCodegenTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.openapi.project.Project
 import com.intellij.openapi.util.text.StringUtilRt
@@ -80,7 +80,7 @@
            )
            package test
 
-           import androidx.compose.*
+           import androidx.compose.runtime.*
 
            $src
         """, fileName, dumpClasses)
@@ -153,7 +153,7 @@
         import android.widget.Button
         import android.view.Gravity
         import android.widget.LinearLayout
-        import androidx.compose.Composable
+        import androidx.compose.runtime.Composable
         import androidx.ui.viewinterop.emitView
     """.trimIndent()
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
similarity index 99%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
index fe8bc41..e8837758 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractCompilerTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractCompilerTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.mock.MockProject
 import com.intellij.openapi.Disposable
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractComposeDiagnosticsTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
index cbb69a5..a6fdb62 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractComposeDiagnosticsTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil
 import org.jetbrains.kotlin.checkers.DiagnosedRange
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractControlFlowTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt
similarity index 87%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractControlFlowTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt
index a13ac0f..031b0f0 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractControlFlowTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractControlFlowTransformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 abstract class AbstractControlFlowTransformTests : ComposeIrTransformTest() {
     protected fun controlFlow(
@@ -23,15 +23,15 @@
         dumpTree: Boolean = false
     ) = verifyComposeIrTransform(
         """
-            import androidx.compose.Composable
-            import androidx.compose.key
-            import androidx.compose.ComposableContract
+            import androidx.compose.runtime.Composable
+            import androidx.compose.runtime.key
+            import androidx.compose.runtime.ComposableContract
 
             $source
         """.trimIndent(),
         expectedTransformed,
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             inline class InlineClass(val value: Int)
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractIrTransformTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractIrTransformTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt
index af31f64..8ecce65 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractIrTransformTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractIrTransformTest.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.compiler.lower.dumpSrc
+import androidx.compose.compiler.plugins.kotlin.lower.dumpSrc
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
 import org.jetbrains.kotlin.backend.common.ir.createParameterDeclarations
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractLoweringTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt
similarity index 95%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractLoweringTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt
index 5cd2dbb..895b60a 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractLoweringTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractLoweringTests.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.view.View
-import androidx.compose.Composer
+import androidx.compose.runtime.Composer
 import org.robolectric.RuntimeEnvironment
 import java.net.URLClassLoader
 
@@ -28,7 +28,7 @@
             """
            import android.content.Context
            import android.widget.*
-           import androidx.compose.*
+           import androidx.compose.runtime.*
            $COMPOSE_VIEW_STUBS_IMPORTS
 
            $text
@@ -79,7 +79,7 @@
         val compiledClasses = classLoader(
             """
        import android.widget.*
-       import androidx.compose.*
+       import androidx.compose.runtime.*
        import androidx.ui.androidview.adapters.*
 
        $COMPOSE_VIEW_STUBS_IMPORTS
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
similarity index 97%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
index 514c819..3bd320c 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/AbstractMultiPlatformIntegrationTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.openapi.util.io.FileUtil
 import org.jetbrains.kotlin.cli.common.CLICompiler
@@ -94,7 +94,6 @@
                 .joinToString(File.pathSeparator) { it.absolutePath },
             "-kotlin-home",
             AbstractCompilerTest.kotlinHome.absolutePath,
-            "-P", "plugin:androidx.compose.plugins.idea:enabled=true",
             "-Xplugin=${composePluginJar.absolutePath}",
             "-Xuse-ir"
         )
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/CodegenTestFiles.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenTestFiles.kt
similarity index 96%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/CodegenTestFiles.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenTestFiles.kt
index e5d4fd1..44424fe 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/CodegenTestFiles.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/CodegenTestFiles.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.openapi.project.Project
 import org.jetbrains.kotlin.checkers.utils.CheckerTestUtil
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCallLoweringTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCallLoweringTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt
index 44e1faa..084e74a 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCallLoweringTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallLoweringTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.widget.Button
 import android.widget.LinearLayout
@@ -116,7 +116,7 @@
     fun testVarargs(): Unit = ensureSetup {
         codegen(
             """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Immutable class Foo
 
@@ -137,7 +137,7 @@
     fun testComposableLambdaCall(): Unit = ensureSetup {
         codegen(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
 
                 @Composable
                 fun test(children: @Composable () -> Unit) {
@@ -151,7 +151,7 @@
     fun testProperties(): Unit = ensureSetup {
         codegen(
             """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable val foo get() = 123
 
@@ -211,7 +211,7 @@
     fun testComposableLambdaCallWithGenerics(): Unit = ensureSetup {
         codegen(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
 
                 @Composable fun <T> A(value: T, block: @Composable (T) -> Unit) {
                     block(value)
@@ -241,7 +241,7 @@
     fun testMethodInvocations(): Unit = ensureSetup {
         codegen(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
 
                 val x = ambientOf<Int> { 123 }
 
@@ -293,7 +293,7 @@
     fun testInlineChildren(): Unit = ensureSetup {
         codegen(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
 
                 @Composable
                 inline fun PointerInputWrapper(
@@ -312,7 +312,7 @@
     fun testNoComposerImport(): Unit = ensureSetup {
         codegenNoImports(
             """
-        import androidx.compose.Composable
+        import androidx.compose.runtime.Composable
 
         @Composable fun Wrap(content: @Composable () -> Unit) { content() }
 
@@ -453,7 +453,7 @@
     fun testSimpleFunctionResolution(): Unit = ensureSetup {
         compose(
             """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun noise(text: String) {}
@@ -472,7 +472,7 @@
     fun testSimpleClassResolution(): Unit = ensureSetup {
         compose(
             """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun bar() {
@@ -524,7 +524,7 @@
     fun testObservable(): Unit = ensureSetup {
         compose(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
 
                 @Composable
                 fun SimpleComposable() {
@@ -821,7 +821,7 @@
     fun testImplicitReceiverScopeCall(): Unit = ensureSetup {
         compose(
             """
-                import androidx.compose.*
+                import androidx.compose.runtime.*
 
                 class Bar(val text: String)
 
@@ -1166,7 +1166,7 @@
     fun testForDevelopment(): Unit = ensureSetup {
         codegen(
             """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun bar() {
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCallResolverTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt
similarity index 93%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCallResolverTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt
index e7519e3..742af57 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCallResolverTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCallResolverTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.psi.PsiElement
 import com.intellij.psi.util.PsiTreeUtil
@@ -32,7 +32,7 @@
 
     fun testProperties() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable val foo get() = 123
 
@@ -54,7 +54,7 @@
 
     fun testBasicCallTypes() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             import android.widget.TextView
 
             @Composable fun Foo() {}
@@ -71,7 +71,7 @@
 
     fun testReceiverScopeCall() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun Int.Foo() {}
 
@@ -89,7 +89,7 @@
 
     fun testInvokeOperatorCall() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable operator fun Int.invoke(y: Int) {}
 
@@ -103,7 +103,7 @@
 
     fun testComposableLambdaCall() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun test(children: @Composable () -> Unit) {
@@ -114,7 +114,7 @@
 
     fun testComposableLambdaCallWithGenerics() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun <T> A(value: T, block: @Composable (T) -> Unit) {
                 <call>block(value)
@@ -142,7 +142,7 @@
     // TODO(chuckj): Replace with another nested function call.
     fun xtestMethodInvocations() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val x = Ambient.of<Int> { 123 }
 
@@ -157,7 +157,7 @@
 
     fun testReceiverLambdaInvocation() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class TextSpanScope
 
@@ -174,7 +174,7 @@
 
     fun testReceiverLambda2() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class DensityScope(val density: Density)
 
@@ -194,7 +194,7 @@
 
     fun testInlineChildren() = assertInterceptions(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             import android.widget.LinearLayout
 
             @Composable fun Group(content: @Composable () -> Unit) { content() }
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCodegenTestUtils.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCodegenTestUtils.kt
similarity index 95%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCodegenTestUtils.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCodegenTestUtils.kt
index c1eb812..b5a4bea 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeCodegenTestUtils.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeCodegenTestUtils.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("MemberVisibilityCanBePrivate")
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 var uniqueNumber = 0
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeMultiPlatformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt
similarity index 83%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeMultiPlatformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt
index ec96852..2c40a7c 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeMultiPlatformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeMultiPlatformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
@@ -42,28 +42,28 @@
     fun testBasicComposable() = ensureSetup {
         multiplatform(
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             expect @Composable fun Test()
         """,
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             actual @Composable fun Test() {}
         """,
         """
         final class JvmKt%Test%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
-          OUTERCLASS JvmKt Test (Landroidx/compose/Composer;II)V
+          OUTERCLASS JvmKt Test (Landroidx/compose/runtime/Composer;II)V
           final static INNERCLASS JvmKt%Test%1 null null
           private final synthetic I %%key
           private final synthetic I %%changed
           <init>(II)V
-          public final invoke(Landroidx/compose/Composer;II)V
+          public final invoke(Landroidx/compose/runtime/Composer;II)V
           public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
         }
         public final class JvmKt {
           final static INNERCLASS JvmKt%Test%1 null null
-          public final static Test(Landroidx/compose/Composer;II)V
+          public final static Test(Landroidx/compose/runtime/Composer;II)V
         }
         """
         )
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeRobolectricTestRunner.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeRobolectricTestRunner.kt
similarity index 95%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeRobolectricTestRunner.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeRobolectricTestRunner.kt
index 8c2b058..b27ef4f 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposeRobolectricTestRunner.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposeRobolectricTestRunner.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.runners.model.FrameworkMethod
 import org.robolectric.RobolectricTestRunner
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposerParamSignatureTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamSignatureTests.kt
similarity index 81%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposerParamSignatureTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamSignatureTests.kt
index ca4b33f..55f50e2 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposerParamSignatureTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamSignatureTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -44,38 +44,38 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(Lkotlin/jvm/functions/Function3;Landroidx/compose/Composer;II)V
+              public final static Foo(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%Bar%1 null null
               final static INNERCLASS TestKt%Bar%2 null null
-              public final static Bar(Landroidx/compose/Composer;II)V
+              public final static Bar(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(Lkotlin/jvm/functions/Function3;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic Lkotlin/jvm/functions/Function3; %children
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (Lkotlin/jvm/functions/Function3;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>()V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               public final static LTestKt%Bar%1; INSTANCE
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               static <clinit>()V
               final static INNERCLASS TestKt%Bar%1 null null
-              OUTERCLASS TestKt Bar (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Bar%2 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Bar%2 null null
-              OUTERCLASS TestKt Bar (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -104,35 +104,35 @@
         ) {}
         """
     ) {
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (Z)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (C)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (B)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (S)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (I)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (F)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (J)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (D)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (Ljava/lang/Object;)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (Z)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (C)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (B)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (S)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (I)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (F)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (J)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (D)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (Ljava/lang/Object;)Z"))
     }
 
     @Test
     fun testNonPrimitiveChangedCalls(): Unit = validateBytecode(
         """
-        import androidx.compose.Stable
+        import androidx.compose.runtime.Stable
 
         @Stable class Bar
         @Composable fun Foo(a: Bar) {}
         """
     ) {
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (Z)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (C)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (B)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (S)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (I)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (F)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (J)Z"))
-        assert(!it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (D)Z"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (Ljava/lang/Object;)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (Z)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (C)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (B)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (S)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (I)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (F)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (J)Z"))
+        assert(!it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (D)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (Ljava/lang/Object;)Z"))
     }
 
     @Test
@@ -143,9 +143,9 @@
         """
     ) {
         assert(!it.contains("INVOKESTATIC Bar.box-impl (I)LBar;"))
-        assert(it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (I)Z"))
+        assert(it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (I)Z"))
         assert(
-            !it.contains("INVOKEVIRTUAL androidx/compose/Composer.changed (Ljava/lang/Object;)Z")
+            !it.contains("INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (Ljava/lang/Object;)Z")
         )
     }
 
@@ -164,7 +164,7 @@
             "INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;"
         ))
         assert(testClass.contains(
-            "INVOKEVIRTUAL androidx/compose/Composer.changed (Ljava/lang/Object;)Z"
+            "INVOKEVIRTUAL androidx/compose/runtime/Composer.changed (Ljava/lang/Object;)Z"
         ))
     }
 
@@ -178,7 +178,7 @@
         }
         """
     ) {
-        assert(it.contains("public final static Foo-RDdOdTo(ILandroidx/compose/Composer;III)V"))
+        assert(it.contains("public final static Foo-FX_B3cE(ILandroidx/compose/runtime/Composer;III)V"))
     }
 
     @Test
@@ -232,21 +232,21 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/Composer;II)V
+              public final static Foo(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%Example%1%1 null null
               final static INNERCLASS TestKt%Example%2 null null
-              public final static Example(Landroidx/compose/Composer;II)V
+              public final static Example(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(Ljava/lang/String;Lkotlin/jvm/functions/Function0;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic Ljava/lang/String; %a
               private final synthetic Lkotlin/jvm/functions/Function0; %b
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Example%1%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function0 {
               <init>()V
@@ -255,16 +255,16 @@
               public synthetic bridge invoke()Ljava/lang/Object;
               static <clinit>()V
               final static INNERCLASS TestKt%Example%1%1 null null
-              OUTERCLASS TestKt Example (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Example (Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Example%2 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Example%2 null null
-              OUTERCLASS TestKt Example (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Example (Landroidx/compose/runtime/Composer;II)V
             }
             """
     )
@@ -280,21 +280,21 @@
         """,
         """
             public final class TestKt {
-              private final static Landroidx/compose/ProvidableAmbient; a
-              public final static getA()Landroidx/compose/ProvidableAmbient;
+              private final static Landroidx/compose/runtime/ProvidableAmbient; a
+              public final static getA()Landroidx/compose/runtime/ProvidableAmbient;
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(Landroidx/compose/Composer;II)V
+              public final static Foo(Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%a%1 null null
               static <clinit>()V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%a%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function0 {
               <init>()V
@@ -467,18 +467,18 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(ILandroidx/compose/Composer;III)V
+              public final static Foo(ILandroidx/compose/runtime/Composer;III)V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(IIII)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %x
               private final synthetic I %%key
               private final synthetic I %%changed
               private final synthetic I %%default
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (ILandroidx/compose/Composer;III)V
+              OUTERCLASS TestKt Foo (ILandroidx/compose/runtime/Composer;III)V
             }
         """
     )
@@ -497,31 +497,31 @@
         """,
         """
             public final class TestKt {
-              public final static identity(Ljava/lang/Object;Landroidx/compose/Composer;II)Ljava/lang/Object;
+              public final static identity(Ljava/lang/Object;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(ILandroidx/compose/Composer;III)V
+              public final static Foo(ILandroidx/compose/runtime/Composer;III)V
               final static INNERCLASS TestKt%test%1 null null
-              public final static test(Landroidx/compose/Composer;II)V
+              public final static test(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(IIII)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %x
               private final synthetic I %%key
               private final synthetic I %%changed
               private final synthetic I %%default
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (ILandroidx/compose/Composer;III)V
+              OUTERCLASS TestKt Foo (ILandroidx/compose/runtime/Composer;III)V
             }
             final class TestKt%test%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%test%1 null null
-              OUTERCLASS TestKt test (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt test (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -543,31 +543,31 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(ILjava/lang/String;Landroidx/compose/Composer;II)V
+              public final static Foo(ILjava/lang/String;Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%Bar%1 null null
-              public final static Bar(ILjava/lang/String;Landroidx/compose/Composer;II)V
+              public final static Bar(ILjava/lang/String;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(ILjava/lang/String;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %a
               private final synthetic Ljava/lang/String; %b
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (ILjava/lang/String;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (ILjava/lang/String;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(ILjava/lang/String;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %a
               private final synthetic Ljava/lang/String; %b
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Bar%1 null null
-              OUTERCLASS TestKt Bar (ILjava/lang/String;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (ILjava/lang/String;Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -584,28 +584,28 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Foo%2 null null
-              public final static Foo(Landroidx/compose/Composer;II)V
+              public final static Foo(Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%Bar%1 null null
-              public final static Bar(ILandroidx/compose/Composer;II)V
+              public final static Bar(ILandroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%2 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%2 null null
-              OUTERCLASS TestKt Foo (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(III)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %a
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Bar%1 null null
-              OUTERCLASS TestKt Bar (ILandroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (ILandroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -623,22 +623,22 @@
               private final static Lkotlin/jvm/functions/Function4; foo
               public final static getFoo()Lkotlin/jvm/functions/Function4;
               final static INNERCLASS TestKt%Bar%1 null null
-              public final static Bar(Landroidx/compose/Composer;II)V
+              public final static Bar(Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%foo%1 null null
               static <clinit>()V
             }
             final class TestKt%Bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Bar%1 null null
-              OUTERCLASS TestKt Bar (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function4 {
               <init>()V
-              public final invoke(ILandroidx/compose/Composer;II)V
+              public final invoke(ILandroidx/compose/runtime/Composer;II)V
               public final static LTestKt%foo%1; INSTANCE
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               static <clinit>()V
@@ -661,26 +661,26 @@
             public final class TestKt {
               final static INNERCLASS TestKt%Bar%foo%1 null null
               final static INNERCLASS TestKt%Bar%1 null null
-              public final static Bar(Lkotlin/jvm/functions/Function3;Landroidx/compose/Composer;II)V
+              public final static Bar(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Bar%foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function4 {
               <init>()V
-              public final invoke(ILandroidx/compose/Composer;II)V
+              public final invoke(ILandroidx/compose/runtime/Composer;II)V
               public final static LTestKt%Bar%foo%1; INSTANCE
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               static <clinit>()V
               final static INNERCLASS TestKt%Bar%foo%1 null null
-              OUTERCLASS TestKt Bar (Lkotlin/jvm/functions/Function3;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(Lkotlin/jvm/functions/Function3;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic Lkotlin/jvm/functions/Function3; %children
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Bar%1 null null
-              OUTERCLASS TestKt Bar (Lkotlin/jvm/functions/Function3;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Bar (Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -707,49 +707,49 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Wrap%1 null null
-              public final static Wrap(Lkotlin/jvm/functions/Function4;Landroidx/compose/Composer;II)V
+              public final static Wrap(Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%App%1 null null
               final static INNERCLASS TestKt%App%2 null null
-              public final static App(ILandroidx/compose/Composer;II)V
+              public final static App(ILandroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Wrap%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(Lkotlin/jvm/functions/Function4;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic Lkotlin/jvm/functions/Function4; %children
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Wrap%1 null null
-              OUTERCLASS TestKt Wrap (Lkotlin/jvm/functions/Function4;Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Wrap (Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%App%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function4 {
               <init>(I)V
               final static INNERCLASS TestKt%App%1%1 null null
-              public final invoke(ILandroidx/compose/Composer;II)V
+              public final invoke(ILandroidx/compose/runtime/Composer;II)V
               private final synthetic I %x
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%App%1 null null
-              OUTERCLASS TestKt App (ILandroidx/compose/Composer;II)V
+              OUTERCLASS TestKt App (ILandroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%App%1%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function4 {
               <init>(II)V
-              public final invoke(ILandroidx/compose/Composer;II)V
+              public final invoke(ILandroidx/compose/runtime/Composer;II)V
               private final synthetic I %x
               private final synthetic I %a
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%App%1%1 null null
               final static INNERCLASS TestKt%App%1 null null
-              OUTERCLASS TestKt%App%1 invoke (ILandroidx/compose/Composer;II)V
+              OUTERCLASS TestKt%App%1 invoke (ILandroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%App%2 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(III)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %x
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%App%2 null null
-              OUTERCLASS TestKt App (ILandroidx/compose/Composer;II)V
+              OUTERCLASS TestKt App (ILandroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -767,22 +767,22 @@
         """,
         """
             public abstract interface Foo {
-              public abstract bar(Landroidx/compose/Composer;II)V
+              public abstract bar(Landroidx/compose/runtime/Composer;II)V
             }
             public final class FooImpl implements Foo {
               public <init>()V
               final static INNERCLASS FooImpl%bar%1 null null
-              public bar(Landroidx/compose/Composer;II)V
+              public bar(Landroidx/compose/runtime/Composer;II)V
             }
             final class FooImpl%bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(LFooImpl;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic LFooImpl; %tmp0_rcvr
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS FooImpl%bar%1 null null
-              OUTERCLASS FooImpl bar (Landroidx/compose/Composer;II)V
+              OUTERCLASS FooImpl bar (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -803,21 +803,21 @@
         """
             public abstract class Ambient2 {
               private <init>()V
-              public final getCurrent(Landroidx/compose/Composer;II)Ljava/lang/Object;
+              public final getCurrent(Landroidx/compose/runtime/Composer;II)Ljava/lang/Object;
               public static synthetic getCurrent%annotations()V
               final static INNERCLASS Ambient2%foo%1 null null
-              public final foo(Landroidx/compose/Composer;II)V
+              public final foo(Landroidx/compose/runtime/Composer;II)V
               public synthetic <init>(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
             }
             final class Ambient2%foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(LAmbient2;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic LAmbient2; %tmp0_rcvr
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS Ambient2%foo%1 null null
-              OUTERCLASS Ambient2 foo (Landroidx/compose/Composer;II)V
+              OUTERCLASS Ambient2 foo (Landroidx/compose/runtime/Composer;II)V
             }
             public abstract class ProvidableAmbient2 extends Ambient2 {
               public <init>()V
@@ -838,7 +838,7 @@
         """,
         """
             public final class TestKt {
-              public final static getFoo(Landroidx/compose/Composer;II)I
+              public final static getFoo(Landroidx/compose/runtime/Composer;II)I
               public static synthetic getFoo%annotations()V
             }
         """
@@ -854,7 +854,7 @@
         """
             public final class Foo {
               public <init>()V
-              public final getFoo(Landroidx/compose/Composer;II)I
+              public final getFoo(Landroidx/compose/runtime/Composer;II)I
               public static synthetic getFoo%annotations()V
             }
         """
@@ -927,19 +927,19 @@
         """,
         """
             public final class TestKt {
-              public final static getBar(Landroidx/compose/Composer;II)I
+              public final static getBar(Landroidx/compose/runtime/Composer;II)I
               public static synthetic getBar%annotations()V
               final static INNERCLASS TestKt%Example%1 null null
-              public final static Example(Landroidx/compose/Composer;II)V
+              public final static Example(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Example%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Example%1 null null
-              OUTERCLASS TestKt Example (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Example (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -958,22 +958,22 @@
         """
             public abstract class BaseFoo {
               public <init>()V
-              public abstract bar(Landroidx/compose/Composer;II)V
+              public abstract bar(Landroidx/compose/runtime/Composer;II)V
             }
             public final class FooImpl extends BaseFoo {
               public <init>()V
               final static INNERCLASS FooImpl%bar%1 null null
-              public bar(Landroidx/compose/Composer;II)V
+              public bar(Landroidx/compose/runtime/Composer;II)V
             }
             final class FooImpl%bar%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(LFooImpl;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic LFooImpl; %tmp0_rcvr
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS FooImpl%bar%1 null null
-              OUTERCLASS FooImpl bar (Landroidx/compose/Composer;II)V
+              OUTERCLASS FooImpl bar (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -998,59 +998,59 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Wat%1 null null
-              public final static Wat(Landroidx/compose/Composer;II)V
+              public final static Wat(Landroidx/compose/runtime/Composer;II)V
               public final static INNERCLASS TestKt%Foo%Bar null Bar
               final static INNERCLASS TestKt%Foo%1 null null
-              public final static Foo(ILandroidx/compose/Composer;II)V
+              public final static Foo(ILandroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%Foo%goo%1 null null
-              private final static Foo%goo(Landroidx/compose/Composer;II)V
-              public final static synthetic access%Foo%goo(Landroidx/compose/Composer;II)V
+              private final static Foo%goo(Landroidx/compose/runtime/Composer;II)V
+              public final static synthetic access%Foo%goo(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Wat%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Wat%1 null null
-              OUTERCLASS TestKt Wat (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Wat (Landroidx/compose/runtime/Composer;II)V
             }
             public final class TestKt%Foo%Bar {
               public <init>()V
               final static INNERCLASS TestKt%Foo%Bar%baz%1 null null
-              public final baz(Landroidx/compose/Composer;II)V
+              public final baz(Landroidx/compose/runtime/Composer;II)V
               public final static INNERCLASS TestKt%Foo%Bar null Bar
-              OUTERCLASS TestKt Foo (ILandroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (ILandroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%Bar%baz%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(LTestKt%Foo%Bar;II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic LTestKt%Foo%Bar; %tmp0_rcvr
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%Bar%baz%1 null null
               public final static INNERCLASS TestKt%Foo%Bar null Bar
-              OUTERCLASS TestKt%Foo%Bar baz (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt%Foo%Bar baz (Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(III)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %x
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%1 null null
-              OUTERCLASS TestKt Foo (ILandroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo (ILandroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Foo%goo%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Foo%goo%1 null null
-              OUTERCLASS TestKt Foo%goo (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Foo%goo (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -1136,16 +1136,16 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%Example%1 null null
-              public final static Example(Landroidx/compose/Composer;II)V
+              public final static Example(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Example%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Example%1 null null
-              OUTERCLASS TestKt Example (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Example (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -1163,18 +1163,18 @@
         """,
         """
             public final class TestKt {
-              public final static Example(Lkotlin/jvm/functions/Function3;Landroidx/compose/Composer;II)V
+              public final static Example(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
               final static INNERCLASS TestKt%Test%2 null null
-              public final static Test(Landroidx/compose/Composer;II)V
+              public final static Test(Landroidx/compose/runtime/Composer;II)V
             }
             final class TestKt%Test%2 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function3 {
               <init>(II)V
-              public final invoke(Landroidx/compose/Composer;II)V
+              public final invoke(Landroidx/compose/runtime/Composer;II)V
               private final synthetic I %%key
               private final synthetic I %%changed
               public synthetic bridge invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
               final static INNERCLASS TestKt%Test%2 null null
-              OUTERCLASS TestKt Test (Landroidx/compose/Composer;II)V
+              OUTERCLASS TestKt Test (Landroidx/compose/runtime/Composer;II)V
             }
         """
     )
@@ -1190,7 +1190,7 @@
         """
             public final class TestKt {
               final static INNERCLASS TestKt%myProperty%1 null null
-              public final static getMyProperty(Landroidx/compose/Composer;II)Lkotlin/jvm/functions/Function0;
+              public final static getMyProperty(Landroidx/compose/runtime/Composer;II)Lkotlin/jvm/functions/Function0;
               public static synthetic getMyProperty%annotations()V
             }
             final class TestKt%myProperty%1 extends kotlin/jvm/internal/Lambda implements kotlin/jvm/functions/Function0 {
@@ -1200,7 +1200,7 @@
               public synthetic bridge invoke()Ljava/lang/Object;
               static <clinit>()V
               final static INNERCLASS TestKt%myProperty%1 null null
-              OUTERCLASS TestKt getMyProperty (Landroidx/compose/Composer;II)Lkotlin/jvm/functions/Function0;
+              OUTERCLASS TestKt getMyProperty (Landroidx/compose/runtime/Composer;II)Lkotlin/jvm/functions/Function0;
             }
         """
     )
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposerParamTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
similarity index 96%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposerParamTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
index 0c7ea98..4cef370 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ComposerParamTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ComposerParamTransformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
@@ -32,11 +32,11 @@
             )
             package test
 
-            import androidx.compose.ExperimentalComposeApi
-            import androidx.compose.InternalComposeApi
-            import androidx.compose.ComposeCompilerApi
-            import androidx.compose.Composable
-            import androidx.compose.ComposableContract
+            import androidx.compose.runtime.ExperimentalComposeApi
+            import androidx.compose.runtime.InternalComposeApi
+            import androidx.compose.runtime.ComposeCompilerApi
+            import androidx.compose.runtime.Composable
+            import androidx.compose.runtime.ComposableContract
 
             $source
         """.trimIndent(),
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ControlFlowTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
similarity index 99%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ControlFlowTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
index b0f09a7..1518d3a 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ControlFlowTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
@@ -412,7 +412,7 @@
               %composer.startReplaceableGroup(<> xor %key, "C(Example):Test.kt")
               when {
                 %composer.startReplaceableGroup(<>, "<R(a)>")
-                val tmp0_group = x == R(a, %composer, 0b01110111010101111000001000010110, 0)
+                val tmp0_group = x == R(a, %composer, 0b01110111010101111000001000101110, 0)
                 %composer.endReplaceableGroup()
                 tmp0_group -> {
                   NA()
@@ -456,7 +456,7 @@
               %composer.startReplaceableGroup(<>)
               when {
                 %composer.startReplaceableGroup(<>, "<R(a)>")
-                val tmp0_group = x == R(a, %composer, 0b01110111010101111000000110111110, 0)
+                val tmp0_group = x == R(a, %composer, 0b01110111010101111000000111010110, 0)
                 %composer.endReplaceableGroup()
                 tmp0_group -> {
                   NA()
@@ -2228,8 +2228,8 @@
     @Test
     fun testApplyOnComposableCallResult(): Unit = controlFlow(
         """
-            import androidx.compose.state
-            import androidx.compose.State
+            import androidx.compose.runtime.state
+            import androidx.compose.runtime.State
 
             @Composable
             fun <T> provided(value: T): State<T> = state { value }.apply {
@@ -2255,8 +2255,8 @@
     @Test
     fun testReturnInlinedExpressionWithCall(): Unit = controlFlow(
         """
-            import androidx.compose.state
-            import androidx.compose.State
+            import androidx.compose.runtime.state
+            import androidx.compose.runtime.State
 
             @Composable
             fun Test(x: Int): Int {
@@ -2988,9 +2988,9 @@
     @Test
     fun testSourceInformationWithPackageName(): Unit = verifyComposeIrTransform(
         source = """
-            package androidx.compose.tests
+            package androidx.compose.runtime.tests
 
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             @Composable
             fun Test(value: LocalInlineClass) {
@@ -2998,14 +2998,14 @@
             }
         """,
         extra = """
-            package androidx.compose.tests
+            package androidx.compose.runtime.tests
 
             inline class LocalInlineClass(val value: Int)
         """,
         expectedTransformed = """
             @Composable
             fun Test(value: LocalInlineClass, %composer: Composer<*>?, %key: Int, %changed: Int) {
-              %composer.startRestartGroup(<> xor %key, "C(Test)P(0:c#tests.LocalInlineClass):Test.kt#tekjnk")
+              %composer.startRestartGroup(<> xor %key, "C(Test)P(0:c#runtime.tests.LocalInlineClass):Test.kt#992ot2")
               val %dirty = %changed
               if (%changed and 0b0110 === 0) {
                 %dirty = %dirty or if (%composer.changed(value.value)) 0b0100 else 0b0010
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ControlFlowTransformTestsNoSource.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
index d6ce4df..985fb0d 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ControlFlowTransformTestsNoSource.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/DefaultParamTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
similarity index 99%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/DefaultParamTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
index 9a77e3d..3ee8924 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/DefaultParamTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DefaultParamTransformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
@@ -26,15 +26,15 @@
         dumpTree: Boolean = false
     ) = verifyComposeIrTransform(
         """
-            import androidx.compose.Composable
-            import androidx.compose.ComposableContract
+            import androidx.compose.runtime.Composable
+            import androidx.compose.runtime.ComposableContract
 
             $checked
         """.trimIndent(),
         expectedTransformed,
         """
-            import androidx.compose.Composable
-            import androidx.compose.ComposableContract
+            import androidx.compose.runtime.Composable
+            import androidx.compose.runtime.ComposableContract
 
             $unchecked
         """.trimIndent(),
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/DurableKeyTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DurableKeyTests.kt
similarity index 95%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/DurableKeyTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DurableKeyTests.kt
index c89426c..9e0d6cd 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/DurableKeyTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/DurableKeyTests.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.compiler.lower.DurableKeyVisitor
+import androidx.compose.compiler.plugins.kotlin.lower.DurableKeyVisitor
 import junit.framework.TestCase
 
 class DurableKeyTests : TestCase() {
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsTypeResolutionTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt
similarity index 92%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsTypeResolutionTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt
index 562e598..20474c8 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FcsTypeResolutionTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FcsTypeResolutionTests.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 class FcsTypeResolutionTests : AbstractComposeDiagnosticsTest() {
 
     fun testImplicitlyPassedReceiverScope1() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun Int.Foo(children: @Composable Int.() -> Unit) {
@@ -31,7 +31,7 @@
 
     fun testImplicitlyPassedReceiverScope2() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun Int.Foo(children: @Composable Int.(foo: String) -> Unit) {
@@ -47,7 +47,7 @@
 
     fun testSmartCastsAndPunning() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun Foo(bar: String) { print(bar) }
@@ -65,7 +65,7 @@
 
     fun testExtensionInvoke() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class Foo {}
             @Composable operator fun Foo.invoke() {}
@@ -78,7 +78,7 @@
 
     fun testResolutionInsideWhenExpression() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             
             @Composable fun TextView(text: String) { print(text) }
 
@@ -93,7 +93,7 @@
 
     fun testUsedParameters() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             import android.widget.LinearLayout
 
             @Composable fun Foo(x: Int, composeItem: @Composable () -> Unit = {}) {
@@ -136,7 +136,7 @@
 
     fun testDispatchInvoke() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class Bam {
                 @Composable fun Foo() {}
@@ -152,7 +152,7 @@
 
     fun testDispatchAndExtensionReceiver() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class Bam {
                 inner class Foo {}
@@ -170,7 +170,7 @@
 
     fun testDispatchAndExtensionReceiverLocal() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class Foo {}
 
@@ -186,7 +186,7 @@
 
     fun testMissingAttributes() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             data class Foo(val value: Int)
 
@@ -215,7 +215,7 @@
 
     fun testDuplicateAttributes() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             data class Foo(val value: Int)
 
@@ -234,7 +234,7 @@
 
     fun testChildrenNamedAndBodyDuplicate() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun A(children: @Composable () -> Unit) { children() }
 
@@ -247,7 +247,7 @@
 
     fun testAbstractClassTags() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             import android.content.Context
             import android.widget.LinearLayout
 
@@ -265,7 +265,7 @@
 
     fun testGenerics() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             class A { fun a() {} }
             class B { fun b() {} }
@@ -300,7 +300,7 @@
 
     fun testUnresolvedAttributeValueResolvedTarget() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun Fam(bar: Int, x: Int) {
                 print(bar)
@@ -333,7 +333,7 @@
     // TODO(lmr): this triggers an exception!
     fun testEmptyAttributeValue() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun Foo(abc: Int, xyz: Int) {
                 print(abc)
@@ -354,7 +354,7 @@
 
     fun testMismatchedAttributes() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             open class A {}
             class B : A() {}
@@ -388,7 +388,7 @@
 
     fun testErrorAttributeValue() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun Foo(x: Int = 1) { print(x) }
 
@@ -404,7 +404,7 @@
 
     fun testUnresolvedQualifiedTag() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             object MyNamespace {
                 @Composable fun Bar(children: @Composable () -> Unit = {}) { 
@@ -462,7 +462,7 @@
     // TODO(lmr): overloads creates resolution exception
     fun testChildren() = doTest(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             import android.widget.Button
             import android.widget.LinearLayout
 
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/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/FunctionBodySkippingTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
index 3861bd3..345f3a6 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/compiler/plugins/kotlin/FunctionBodySkippingTransformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
@@ -26,14 +26,14 @@
         dumpTree: Boolean = false
     ) = verifyComposeIrTransform(
         """
-            import androidx.compose.Composable
-            import androidx.compose.ComposableContract
+            import androidx.compose.runtime.Composable
+            import androidx.compose.runtime.ComposableContract
 
             $checked
         """.trimIndent(),
         expectedTransformed,
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             $unchecked
         """.trimIndent(),
@@ -167,8 +167,8 @@
     @Test
     fun testSimpleColumn(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Stable
-            import androidx.compose.Immutable
+            import androidx.compose.runtime.Stable
+            import androidx.compose.runtime.Immutable
 
             @Stable
             interface Modifier {
@@ -365,7 +365,7 @@
     @Test
     fun testSimplerBox(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Stable
+            import androidx.compose.runtime.Stable
 
             @Stable
             interface Modifier {
@@ -452,7 +452,7 @@
     @Test
     fun testSimpleBoxWithShape(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Stable
+            import androidx.compose.runtime.Stable
 
             @Stable
             interface Modifier {
@@ -516,7 +516,7 @@
     @Test
     fun testSimpleBox(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Stable
+            import androidx.compose.runtime.Stable
 
             @Stable
             interface Modifier {
@@ -581,7 +581,7 @@
     @Test
     fun testComposableLambdaWithStableParams(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Immutable
+            import androidx.compose.runtime.Immutable
 
             @Immutable class Foo
             @Composable fun A(x: Int) {}
@@ -724,7 +724,7 @@
     @Test
 fun testStableVarargParams(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Immutable
+            import androidx.compose.runtime.Immutable
             @Immutable class Foo
         """,
         """
@@ -1289,7 +1289,7 @@
     @Test
     fun testStaticDetection(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Stable
+            import androidx.compose.runtime.Stable
 
             enum class Foo {
                 Bar,
@@ -1731,7 +1731,7 @@
     @Test
     fun testReceiverLambdaCall(): Unit = comparisonPropagation(
         """
-            import androidx.compose.Stable
+            import androidx.compose.runtime.Stable
 
             interface Foo { val x: Int }
             @Stable
@@ -2342,8 +2342,8 @@
         """
         """,
         """
-            import androidx.compose.currentComposer
-            import androidx.compose.ExperimentalComposeApi
+            import androidx.compose.runtime.currentComposer
+            import androidx.compose.runtime.ExperimentalComposeApi
 
             open class Foo {
                 @ComposableContract(readonly = true)
@@ -2385,7 +2385,7 @@
     @Test
     fun testStaticAndNonStaticDefaultValueSkipping(): Unit = comparisonPropagation(
         """
-            import androidx.compose.ambientOf
+            import androidx.compose.runtime.ambientOf
 
             val AmbientColor = ambientOf { 123 }
             @Composable fun A(a: Int) {}
@@ -2501,7 +2501,7 @@
         """
             import androidx.ui.core.Modifier
             import androidx.compose.ui.unit.Dp
-            import androidx.compose.emptyContent
+            import androidx.compose.runtime.emptyContent
 
             @Composable
             fun Box2(
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/GenerationUtils.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/GenerationUtils.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/GenerationUtils.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/GenerationUtils.kt
index 3f2b2a5..a7d631d 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/GenerationUtils.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/GenerationUtils.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.psi.search.GlobalSearchScope
 import org.jetbrains.kotlin.backend.common.phaser.PhaseConfig
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/JvmResolveUtil.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/JvmResolveUtil.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/JvmResolveUtil.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/JvmResolveUtil.kt
index 3755b94..adadec6 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/JvmResolveUtil.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/JvmResolveUtil.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.openapi.project.Project
 import com.intellij.psi.search.GlobalSearchScope
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/KtxCrossModuleTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
similarity index 91%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/KtxCrossModuleTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
index 6f764e2..a6d6f5a 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/KtxCrossModuleTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxCrossModuleTests.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.widget.TextView
-import androidx.compose.Composer
+import androidx.compose.runtime.Composer
 import com.intellij.openapi.util.io.FileUtil
 import org.jetbrains.kotlin.backend.common.output.OutputFile
 import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
@@ -44,7 +44,7 @@
                     "x/I.kt" to """
                       package x
 
-                      import androidx.compose.Composable
+                      import androidx.compose.runtime.Composable
 
                       @Composable fun bar(arg: @Composable () -> Unit) {
                           arg()
@@ -56,7 +56,7 @@
                       package y
 
                       import x.bar
-                      import androidx.compose.Composable
+                      import androidx.compose.runtime.Composable
 
                       @Composable fun baz() {
                           bar {
@@ -127,7 +127,7 @@
                     "x/A.kt" to """
                         package x
 
-                        import androidx.compose.Composable
+                        import androidx.compose.runtime.Composable
 
                         inline class I(val i: Int)
                         inline class J(val j: Int)
@@ -140,7 +140,7 @@
                     "y/B.kt" to """
                         package y
 
-                        import androidx.compose.Composable
+                        import androidx.compose.runtime.Composable
                         import x.*
 
                         @Composable fun bar(k: Int) {
@@ -152,8 +152,16 @@
             )
         ) {
             // Check that the composable functions were properly mangled
-            assert(it.contains("public final static foo-pxsymTM(ILandroidx/compose/Composer;II)V"))
-            assert(it.contains("public final static foo-UYB6V-A(ILandroidx/compose/Composer;II)V"))
+            assert(
+                it.contains(
+                    "public final static foo-YmYloa0(ILandroidx/compose/runtime/Composer;II)V"
+                )
+            )
+            assert(
+                it.contains(
+                    "public final static foo-xHwECpg(ILandroidx/compose/runtime/Composer;II)V"
+                )
+            )
             // Check that we didn't leave any references to the original name, which probably
             // leads to a compile error.
             assert(!it.contains("foo("))
@@ -168,7 +176,7 @@
                     "x/Base.kt" to """
                     package x
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
 
                     class Foo
 
@@ -181,7 +189,7 @@
                     "b/Extends.kt" to """
                     package b
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
                     import x.Base
                     import x.Foo
 
@@ -233,7 +241,7 @@
                     "x/A.kt" to """
                     package x
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
 
                     @Composable
                     inline fun <T> key(
@@ -245,7 +253,7 @@
                     "b/B.kt" to """
                     package b
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
                     import x.key
 
                     @Composable fun Test() {
@@ -265,7 +273,7 @@
                     "x/A.kt" to """
                     package x
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
 
                     @Composable
                     inline fun key(
@@ -279,7 +287,7 @@
                     "b/B.kt" to """
                     package b
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
                     import x.key
 
                     @Composable fun Test() {
@@ -364,7 +372,7 @@
                     "x/A.kt" to """
                     package x
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
 
                     class Foo {
                       @Composable val value: Int get() = 123
@@ -375,7 +383,7 @@
                     "b/B.kt" to """
                     package b
 
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
                     import x.Foo
 
                     val foo = Foo()
@@ -432,7 +440,7 @@
             mapOf(
                 "library module" to mapOf(
                     "x/C.kt" to """
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
 
                     @Composable
                     fun ghi() {
@@ -441,8 +449,8 @@
                     }
                     """,
                     "x/A.kt" to """
-                    import androidx.compose.Composable
-                    import androidx.compose.currentComposer
+                    import androidx.compose.runtime.Composable
+                    import androidx.compose.runtime.currentComposer
 
                     @Composable
                     inline fun abc(): Any {
@@ -450,7 +458,7 @@
                     }
                     """,
                     "x/B.kt" to """
-                    import androidx.compose.Composable
+                    import androidx.compose.runtime.Composable
 
                     @Composable
                     fun def() {
@@ -473,7 +481,7 @@
             mapOf(
                 "library module" to mapOf(
                     "C.kt" to """
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun b() {
@@ -481,7 +489,7 @@
                     }
                     """,
                     "A.kt" to """
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun a() {
@@ -489,7 +497,7 @@
                     }
                     """,
                     "B.kt" to """
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun c() {
@@ -514,7 +522,7 @@
                     "a/A.kt" to """
                     package a
 
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun FromA() {}
@@ -525,7 +533,7 @@
                     package b
 
                     import a.FromA
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun FromB() {
@@ -574,7 +582,7 @@
                     "a/Foo.kt" to """
                     package a
 
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     class Foo {
                         @Composable
@@ -585,7 +593,7 @@
                 "Main" to mapOf(
                     "B.kt" to """
                     import a.Foo
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun FromB() {
@@ -605,7 +613,7 @@
                     "a/Foo.kt" to """
                     package a
 
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable val foo: Int get() { return 123 }
                  """
@@ -613,7 +621,7 @@
                 "Main" to mapOf(
                     "B.kt" to """
                     import a.foo
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable
                     fun FromB() {
@@ -633,7 +641,7 @@
                     "a/Foo.kt" to """
                     package a
 
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     interface Foo {
                         @Composable fun foo()
@@ -643,7 +651,7 @@
                 "Main" to mapOf(
                     "B.kt" to """
                     import a.Foo
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     class B : Foo {
                         @Composable override fun foo() {}
@@ -667,7 +675,7 @@
                     "a/Foo.kt" to """
                     package a
 
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     class Foo(val bar: @Composable () -> Unit)
                  """
@@ -675,7 +683,7 @@
                 "Main" to mapOf(
                     "B.kt" to """
                     import a.Foo
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable fun Example(bar: @Composable () -> Unit) {
                         val foo = Foo(bar)
@@ -696,7 +704,7 @@
                     "my/test/lib/InternalComp.kt" to """
                     package my.test.lib
 
-                    import androidx.compose.*
+                    import androidx.compose.runtime.*
 
                     @Composable fun InternalComp(block: @Composable () -> Unit) {
                         block()
@@ -708,7 +716,7 @@
                    package my.test.app
 
                    import android.widget.*
-                   import androidx.compose.*
+                   import androidx.compose.runtime.*
                    import androidx.ui.viewinterop.emitView
                    import my.test.lib.*
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/KtxTransformationTest.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt
similarity index 91%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/KtxTransformationTest.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt
index 91f9d3e..cb94889 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/KtxTransformationTest.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/KtxTransformationTest.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 class KtxTransformationTest : AbstractCodegenTest() {
 
     fun testObserveLowering() = ensureSetup { testCompileWithViewStubs(
         """
-            import androidx.compose.MutableState
-            import androidx.compose.mutableStateOf
+            import androidx.compose.runtime.MutableState
+            import androidx.compose.runtime.mutableStateOf
 
             @Composable
             fun SimpleComposable() {
@@ -41,7 +41,7 @@
 
     fun testEmptyComposeFunction() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         class Foo {
             @Composable
@@ -93,7 +93,7 @@
 
     fun testSingleComposite() = ensureSetup { testCompile(
         """
-         import androidx.compose.*
+         import androidx.compose.runtime.*
 
         @Composable
         fun Bar() {}
@@ -109,7 +109,7 @@
 
     fun testMultipleRootComposite() = ensureSetup { testCompile(
         """
-         import androidx.compose.*
+         import androidx.compose.runtime.*
 
         @Composable
         fun Bar() {}
@@ -143,7 +143,7 @@
 
     fun testForEach() = ensureSetup { testCompile(
         """
-         import androidx.compose.*
+         import androidx.compose.runtime.*
 
         @Composable
         fun Bar() {}
@@ -161,7 +161,7 @@
 
     fun testForLoop() = ensureSetup { testCompile(
         """
-         import androidx.compose.*
+         import androidx.compose.runtime.*
 
         @Composable
         fun Bar() {}
@@ -179,7 +179,7 @@
 
     fun testEarlyReturns() = ensureSetup { testCompile(
         """
-         import androidx.compose.*
+         import androidx.compose.runtime.*
 
         @Composable
         fun Bar() {}
@@ -198,7 +198,7 @@
 
     fun testConditionalRendering() = ensureSetup { testCompile(
         """
-         import androidx.compose.*
+         import androidx.compose.runtime.*
 
         @Composable
         fun Bar() {}
@@ -263,7 +263,7 @@
     fun testChildrenDeepCaptureVariables() = ensureSetup { testCompile(
         """
         import android.widget.*
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable fun A(children: @Composable () -> Unit) {
             children()
@@ -292,7 +292,7 @@
         testCompile(
         """
         import android.widget.*
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable fun A(children: @Composable (x: String) -> Unit) {
             children("")
@@ -353,7 +353,7 @@
 
     fun testGenericsInnerClass() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         class A<T>(val value: T) {
             @Composable fun Getter(x: T? = null) {
@@ -372,7 +372,7 @@
 
     fun testXGenericConstructorParams() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable fun <T> A(
             value: T,
@@ -399,7 +399,7 @@
 
     fun testSimpleNoArgsComponent() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable
         fun Simple() {}
@@ -413,7 +413,7 @@
 
     fun testDotQualifiedObjectToClass() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         object Obj {
             @Composable
@@ -429,7 +429,7 @@
 
     fun testLocalLambda() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable
         fun Simple() {}
@@ -444,7 +444,7 @@
 
     fun testPropertyLambda() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         class Test(var children: @Composable () () -> Unit) {
             @Composable
@@ -457,7 +457,7 @@
 
     fun testLambdaWithArgs() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         class Test(var children: @Composable (x: Int) -> Unit) {
             @Composable
@@ -470,7 +470,7 @@
 
     fun testLocalMethod() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         class Test {
             @Composable
@@ -485,7 +485,7 @@
 
     fun testSimpleLambdaChildren() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         import android.widget.*
         import android.content.*
 
@@ -504,7 +504,7 @@
 
     fun testFunctionComponentsWithChildrenSimple() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable
         fun Example(children: @Composable () -> Unit) {}
@@ -520,7 +520,7 @@
 
     fun testFunctionComponentWithChildrenOneArg() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable
         fun Example(children: @Composable (String) -> Unit) {}
@@ -536,7 +536,7 @@
 
     fun testKtxLambdaInForLoop() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         import android.widget.TextView
 
         @Composable
@@ -569,7 +569,7 @@
     fun testKtxVariableTagsProperlyCapturedAcrossKtxLambdas() = ensureSetup {
         testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         import androidx.ui.androidview.adapters.*
 
         @Composable fun Foo(children: @Composable (sub: @Composable () -> Unit) -> Unit) {
@@ -596,7 +596,7 @@
 
     fun testInvocableObject() = ensureSetup { testCompile(
         """
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         class Foo { }
         @Composable
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LambdaMemoizationTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt
similarity index 99%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LambdaMemoizationTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt
index af7adda..a314bb4 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LambdaMemoizationTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LambdaMemoizationTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.os.Looper.getMainLooper
 import android.widget.Button
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LiveLiteralCodegenTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt
similarity index 93%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LiveLiteralCodegenTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt
index 5a88eaf..7a517de 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LiveLiteralCodegenTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralCodegenTests.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.widget.TextView
-import androidx.compose.InternalComposeApi
-import androidx.compose.internal.updateLiveLiteralValue
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.internal.updateLiveLiteralValue
 import org.jetbrains.kotlin.config.CompilerConfiguration
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LiveLiteralTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt
similarity index 97%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LiveLiteralTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt
index d507361..150aa54 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/LiveLiteralTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/LiveLiteralTransformTests.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.compiler.lower.DurableKeyVisitor
-import androidx.compose.plugins.kotlin.compiler.lower.LiveLiteralTransformer
+import androidx.compose.compiler.plugins.kotlin.lower.DurableKeyVisitor
+import androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
 import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
 import org.jetbrains.kotlin.ir.linkage.IrDeserializer
@@ -372,7 +372,7 @@
             internal class LiveLiterals%TestKt {
               val Int%arg-0%call-print%fun-A: Int = 1
               var State%Int%arg-0%call-print%fun-A: State<Int>?
-              @LiveLiteralInfo(key = "Int%arg-0%call-print%fun-A", offset = 54)
+              @LiveLiteralInfo(key = "Int%arg-0%call-print%fun-A", offset = 62)
               fun Int%arg-0%call-print%fun-A(): Int {
                 val tmp0 = State%Int%arg-0%call-print%fun-A
                 return if (tmp0 == null) {
@@ -386,7 +386,7 @@
               }
               val String%arg-0%call-print-1%fun-A: String = "Hello World"
               var State%String%arg-0%call-print-1%fun-A: State<String>?
-              @LiveLiteralInfo(key = "String%arg-0%call-print-1%fun-A", offset = 66)
+              @LiveLiteralInfo(key = "String%arg-0%call-print-1%fun-A", offset = 74)
               fun String%arg-0%call-print-1%fun-A(): String {
                 val tmp0 = State%String%arg-0%call-print-1%fun-A
                 return if (tmp0 == null) {
@@ -400,7 +400,7 @@
               }
               val Boolean%cond%if%fun-A: Boolean = true
               var State%Boolean%cond%if%fun-A: State<Boolean>?
-              @LiveLiteralInfo(key = "Boolean%cond%if%fun-A", offset = 86)
+              @LiveLiteralInfo(key = "Boolean%cond%if%fun-A", offset = 94)
               fun Boolean%cond%if%fun-A(): Boolean {
                 val tmp0 = State%Boolean%cond%if%fun-A
                 return if (tmp0 == null) {
@@ -414,7 +414,7 @@
               }
               val Int%%this%call-plus%arg-0%call-print%branch%if%fun-A: Int = 3
               var State%Int%%this%call-plus%arg-0%call-print%branch%if%fun-A: State<Int>?
-              @LiveLiteralInfo(key = "Int%%this%call-plus%arg-0%call-print%branch%if%fun-A", offset = 104)
+              @LiveLiteralInfo(key = "Int%%this%call-plus%arg-0%call-print%branch%if%fun-A", offset = 112)
               fun Int%%this%call-plus%arg-0%call-print%branch%if%fun-A(): Int {
                 val tmp0 = State%Int%%this%call-plus%arg-0%call-print%branch%if%fun-A
                 return if (tmp0 == null) {
@@ -428,7 +428,7 @@
               }
               val Int%arg-0%call-plus%arg-0%call-print%branch%if%fun-A: Int = 4
               var State%Int%arg-0%call-plus%arg-0%call-print%branch%if%fun-A: State<Int>?
-              @LiveLiteralInfo(key = "Int%arg-0%call-plus%arg-0%call-print%branch%if%fun-A", offset = 108)
+              @LiveLiteralInfo(key = "Int%arg-0%call-plus%arg-0%call-print%branch%if%fun-A", offset = 116)
               fun Int%arg-0%call-plus%arg-0%call-print%branch%if%fun-A(): Int {
                 val tmp0 = State%Int%arg-0%call-plus%arg-0%call-print%branch%if%fun-A
                 return if (tmp0 == null) {
@@ -442,7 +442,7 @@
               }
               val Boolean%cond%if-1%fun-A: Boolean = true
               var State%Boolean%cond%if-1%fun-A: State<Boolean>?
-              @LiveLiteralInfo(key = "Boolean%cond%if-1%fun-A", offset = 121)
+              @LiveLiteralInfo(key = "Boolean%cond%if-1%fun-A", offset = 129)
               fun Boolean%cond%if-1%fun-A(): Boolean {
                 val tmp0 = State%Boolean%cond%if-1%fun-A
                 return if (tmp0 == null) {
@@ -456,7 +456,7 @@
               }
               val Float%arg-0%call-print%branch%if-1%fun-A: Float = 1.0f
               var State%Float%arg-0%call-print%branch%if-1%fun-A: State<Float>?
-              @LiveLiteralInfo(key = "Float%arg-0%call-print%branch%if-1%fun-A", offset = 139)
+              @LiveLiteralInfo(key = "Float%arg-0%call-print%branch%if-1%fun-A", offset = 147)
               fun Float%arg-0%call-print%branch%if-1%fun-A(): Float {
                 val tmp0 = State%Float%arg-0%call-print%branch%if-1%fun-A
                 return if (tmp0 == null) {
@@ -470,7 +470,7 @@
               }
               val Int%arg-0%call-print-2%fun-A: Int = 3
               var State%Int%arg-0%call-print-2%fun-A: State<Int>?
-              @LiveLiteralInfo(key = "Int%arg-0%call-print-2%fun-A", offset = 157)
+              @LiveLiteralInfo(key = "Int%arg-0%call-print-2%fun-A", offset = 165)
               fun Int%arg-0%call-print-2%fun-A(): Int {
                 val tmp0 = State%Int%arg-0%call-print-2%fun-A
                 return if (tmp0 == null) {
@@ -579,12 +579,12 @@
         dumpTree: Boolean = false
     ) = verifyComposeIrTransform(
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
             $checked
         """.trimIndent(),
         expectedTransformed,
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
             $unchecked
         """.trimIndent(),
         dumpTree
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/RememberIntrinsicTransformTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
similarity index 98%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/RememberIntrinsicTransformTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
index 4b175f1..9962d00 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/RememberIntrinsicTransformTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RememberIntrinsicTransformTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.junit.Test
 
@@ -26,14 +26,14 @@
         dumpTree: Boolean = false
     ) = verifyComposeIrTransform(
         """
-            import androidx.compose.Composable
-            import androidx.compose.remember
+            import androidx.compose.runtime.Composable
+            import androidx.compose.runtime.remember
 
             $checked
         """.trimIndent(),
         expectedTransformed,
         """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             $unchecked
         """.trimIndent(),
@@ -175,7 +175,7 @@
     @Test
     fun testAmbientCallBeforeRemember(): Unit = comparisonPropagation(
         """
-            import androidx.compose.ambientOf
+            import androidx.compose.runtime.ambientOf
 
             class Foo
             class Bar
@@ -211,7 +211,7 @@
     @Test
     fun testAmbientCallAsInput(): Unit = comparisonPropagation(
         """
-            import androidx.compose.ambientOf
+            import androidx.compose.runtime.ambientOf
 
             class Foo
             class Bar
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/RobolectricComposeTester.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RobolectricComposeTester.kt
similarity index 93%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/RobolectricComposeTester.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RobolectricComposeTester.kt
index b5a129d..bf28d8a 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/RobolectricComposeTester.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/RobolectricComposeTester.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import android.app.Activity
 import android.os.Bundle
 import android.os.Looper.getMainLooper
 import android.view.ViewGroup
 import android.widget.LinearLayout
-import androidx.compose.Composer
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.compositionFor
+import androidx.compose.runtime.Composer
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.compositionFor
 import androidx.ui.core.ContextAmbient
 import androidx.ui.node.UiApplier
 import org.robolectric.Robolectric
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ScopeComposabilityTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt
similarity index 93%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ScopeComposabilityTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt
index 7390a5e..156f8b8 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/ScopeComposabilityTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/ScopeComposabilityTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.psi.PsiElement
 import org.jetbrains.kotlin.psi.KtElement
@@ -31,7 +31,7 @@
 
     fun testNormalFunctions() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             fun Foo() {
                 <normal>
@@ -45,7 +45,7 @@
 
     fun testPropGetter() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val baz: Int get() { <normal>return 123 }
         """
@@ -53,7 +53,7 @@
 
     fun testBasicComposable() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun Foo() {
@@ -64,7 +64,7 @@
 
     fun testBasicComposable2() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val foo = @Composable { <composable> }
 
@@ -82,7 +82,7 @@
     // TODO(b/147250515): get inlined lambdas to analyze correctly
     fun xtestBasicComposable3() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun Bar() {
@@ -96,7 +96,7 @@
 
     fun testBasicComposable4() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun Wrap(block: @Composable () -> Unit) { block() }
 
@@ -115,7 +115,7 @@
 
     fun testBasicComposable5() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable fun Callback(block: () -> Unit) { block() }
 
@@ -131,7 +131,7 @@
 
     fun testBasicComposable6() = assertComposability(
         """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             fun kickOff(block: @Composable () -> Unit) {  }
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/TestsCompilerError.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TestsCompilerError.kt
similarity index 93%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/TestsCompilerError.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TestsCompilerError.kt
index df5cbf1..a53e52c 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/TestsCompilerError.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/TestsCompilerError.kt
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 class TestsCompilerError(val original: Throwable) : Throwable(original)
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/ComposableCheckerTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt
similarity index 87%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/ComposableCheckerTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt
index f63bcb5..84e5b9b 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/ComposableCheckerTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableCheckerTests.kt
@@ -1,10 +1,10 @@
-package androidx.compose.plugins.kotlin.analysis
+package androidx.compose.compiler.plugins.kotlin.analysis
 
 import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
 import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
 import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots
-import androidx.compose.plugins.kotlin.AbstractComposeDiagnosticsTest
-import androidx.compose.plugins.kotlin.newConfiguration
+import androidx.compose.compiler.plugins.kotlin.AbstractComposeDiagnosticsTest
+import androidx.compose.compiler.plugins.kotlin.newConfiguration
 import com.intellij.openapi.util.Disposer
 
 class ComposableCheckerTests : AbstractComposeDiagnosticsTest() {
@@ -57,28 +57,28 @@
     }
 
     fun testCfromNC() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable fun C() {}
         fun <!COMPOSABLE_EXPECTED!>NC<!>() { <!COMPOSABLE_INVOCATION!>C<!>() }
     """)
 
     fun testNCfromC() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         fun NC() {}
         @Composable fun C() { NC() }
     """)
 
     fun testCfromC() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable fun C() {}
         @Composable fun C2() { C() }
     """)
 
     fun testCinCLambdaArg() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C() { }
         @Composable fun C2(lambda: @Composable () -> Unit) { lambda() }
         @Composable fun C3() {
@@ -89,7 +89,7 @@
     """)
 
     fun testCinInlinedNCLambdaArg() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C() { }
         inline fun InlineNC(lambda: () -> Unit) { lambda() }
         @Composable fun C3() {
@@ -100,7 +100,7 @@
     """)
 
     fun testCinLambdaArgOfNC() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C() { }
         fun NC(lambda: () -> Unit) { lambda() }
         @Composable fun C3() {
@@ -111,7 +111,7 @@
     """)
 
     fun testCinLambdaArgOfC() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C() { }
         @Composable fun C2(lambda: () -> Unit) { lambda() }
         @Composable fun C3() {
@@ -122,26 +122,26 @@
     """)
 
     fun testCinCPropGetter() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C(): Int { return 123 }
         @Composable val cProp: Int get() = C()
     """)
 
     fun testCinNCPropGetter() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C(): Int { return 123 }
         val <!COMPOSABLE_EXPECTED!>ncProp<!>: Int get() = <!COMPOSABLE_INVOCATION!>C<!>()
     """)
 
     fun testCinTopLevelInitializer() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         @Composable fun C(): Int { return 123 }
         val ncProp: Int = <!COMPOSABLE_INVOCATION!>C<!>()
         @Composable val <!COMPOSABLE_PROPERTY_BACKING_FIELD!>cProp<!>: Int = <!COMPOSABLE_INVOCATION!>C<!>()
     """)
 
     fun testCTypeAlias() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
         typealias Content = @Composable () -> Unit
         @Composable fun C() {}
         @Composable fun C2(content: Content) { content() }
@@ -153,7 +153,7 @@
     """)
 
     fun testPreventedCaptureOnInlineLambda() = check("""
-        import androidx.compose.*
+        import androidx.compose.runtime.*
 
         @Composable inline fun A(
             lambda: @ComposableContract(preventCapture=true) () -> Unit
@@ -167,7 +167,7 @@
 
     fun testComposableReporting001() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -177,7 +177,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -196,7 +196,7 @@
 
     fun testComposableReporting002() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -205,7 +205,7 @@
             val myLambda2: () -> Unit = { Leaf() }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -217,7 +217,7 @@
 
     fun testComposableReporting006() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -231,7 +231,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -249,7 +249,7 @@
 
     fun testComposableReporting007() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             fun foo(children: @Composable ()->Unit) {
                 <!SVC_INVOCATION!>children<!>()
@@ -259,7 +259,7 @@
 
     fun testComposableReporting008() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Leaf() {}
 
@@ -275,7 +275,7 @@
 
     fun testComposableReporting009() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Leaf() {}
 
@@ -292,7 +292,7 @@
 
     fun testComposableReporting017() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Leaf() {}
 
@@ -307,7 +307,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Leaf() {}
 
@@ -325,7 +325,7 @@
 
     fun testComposableReporting018() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -336,7 +336,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -350,7 +350,7 @@
 
     fun testComposableReporting021() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -368,7 +368,7 @@
 
     fun testComposableReporting022() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -385,7 +385,7 @@
 
     fun testComposableReporting023() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -403,7 +403,7 @@
 
     fun testComposableReporting024() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             var x: (@Composable () -> Unit)? = null
 
@@ -423,7 +423,7 @@
 
     fun testComposableReporting024x() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             var x: (@Composable () -> Unit)? = null
 
@@ -436,7 +436,7 @@
 
     fun testComposableReporting025() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -450,7 +450,7 @@
 
     fun testComposableReporting026() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -469,7 +469,7 @@
 
     fun testComposableReporting027() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun Leaf() {}
@@ -490,7 +490,7 @@
 
     fun testComposableReporting028() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             fun foo(v: @Composable ()->Unit) {
                 val myVariable: ()->Unit = v
@@ -498,7 +498,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             fun foo(v: @Composable ()->Unit) {
                 val myVariable: ()->Unit = <!TYPE_MISMATCH!>v<!>
@@ -509,7 +509,7 @@
 
     fun testComposableReporting030() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun foo() {
@@ -521,7 +521,7 @@
 
     fun testComposableReporting032() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun MyComposable(children: @Composable ()->Unit) { children() }
@@ -538,7 +538,7 @@
 
     fun testComposableReporting033() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun MyComposable(children: @Composable ()->Unit) { children() }
@@ -555,7 +555,7 @@
 
     fun testComposableReporting034() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             fun identity(f: ()->Unit): ()->Unit { return f; }
 
@@ -566,7 +566,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             fun identity(f: ()->Unit): ()->Unit { return f; }
 
@@ -580,7 +580,7 @@
 
     fun testComposableReporting035() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun Foo(x: String) {
@@ -593,7 +593,7 @@
     fun testComposableReporting039() {
         check(
             """
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             fun composeInto(l: @Composable ()->Unit) { System.out.println(l) }
 
@@ -613,7 +613,7 @@
 
     fun testComposableReporting041() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             typealias COMPOSABLE_UNIT_LAMBDA = @Composable () -> Unit
 
@@ -632,7 +632,7 @@
 
     fun testComposableReporting043() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             @Composable
             fun FancyButton() {}
@@ -645,7 +645,7 @@
 
     fun testComposableReporting044() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             typealias UNIT_LAMBDA = () -> Unit
 
@@ -661,7 +661,7 @@
 
     fun testComposableReporting045() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable
             fun foo() {
@@ -675,7 +675,7 @@
     fun testComposableReporting048() {
         // Type inference for non-null @Composable lambdas
         checkFail("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val lambda: @Composable (() -> Unit)? = null
 
@@ -695,7 +695,7 @@
 
         // Type inference for nullable @Composable lambdas, with no default value
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val lambda: @Composable (() -> Unit)? = null
 
@@ -714,7 +714,7 @@
 
         // Type inference for nullable @Composable lambdas, with a nullable default value
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val lambda: @Composable (() -> Unit)? = null
 
@@ -734,7 +734,7 @@
 
         // Type inference for nullable @Composable lambdas, with a non-null default value
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
 
             val lambda: @Composable (() -> Unit)? = null
 
@@ -755,7 +755,7 @@
 
     fun testComposableReporting049() {
         check("""
-            import androidx.compose.*
+            import androidx.compose.runtime.*
             fun foo(<!WRONG_ANNOTATION_TARGET!>@Composable<!> bar: ()->Unit) {
                 println(bar)
             }
@@ -764,7 +764,7 @@
 
     fun testComposableReporting050() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable val foo: Int get() = 123
 
@@ -773,7 +773,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable val foo: Int get() = 123
 
@@ -786,7 +786,7 @@
 
     fun testComposableReporting051() {
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             class A {
                 @Composable val bar get() = 123
@@ -800,7 +800,7 @@
             }
         """)
         checkFail("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             class A {
                 @Composable val bar get() = 123
@@ -814,7 +814,7 @@
             }
         """)
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             class A {
                 @Composable val bar get() = 123
@@ -837,7 +837,7 @@
 
     fun testComposableReporting052() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Foo() {}
 
@@ -848,7 +848,7 @@
         """)
 
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Foo() {}
 
@@ -861,7 +861,7 @@
 
     fun testComposableReporting053() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun foo(): Int = 123
 
@@ -874,7 +874,7 @@
 
     fun testComposableReporting054() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Foo() {}
 
@@ -909,7 +909,7 @@
 
     fun testComposableReporting055() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun Foo() {}
 
@@ -939,7 +939,7 @@
 
     fun testComposableReporting057() {
         check("""
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun App() {
                 val x = object {
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
similarity index 86%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
index adf236b..cd1d414 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposableDeclarationCheckerTests.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.analysis
+package androidx.compose.compiler.plugins.kotlin.analysis
 
-import androidx.compose.plugins.kotlin.AbstractComposeDiagnosticsTest
+import androidx.compose.compiler.plugins.kotlin.AbstractComposeDiagnosticsTest
 
 /**
  * We're strongly considering supporting try-catch-finally blocks in the future.
@@ -26,7 +26,7 @@
     fun testPropertyWithInitializer() {
         doTest(
             """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             @Composable
             val <!COMPOSABLE_PROPERTY_BACKING_FIELD!>foo<!>: Int = 123
@@ -36,7 +36,7 @@
     fun testPropertyWithJustGetter() {
         doTest(
             """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             @Composable
             val bar: Int get() = 123
@@ -46,7 +46,7 @@
     fun testPropertyWithGetterAndSetter() {
         doTest(
             """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             @Composable
             var <!COMPOSABLE_VAR!>bam<!>: Int 
@@ -58,7 +58,7 @@
     fun testSuspendComposable() {
         doTest(
             """
-            import androidx.compose.Composable
+            import androidx.compose.runtime.Composable
 
             @Composable suspend fun <!COMPOSABLE_SUSPEND_FUN!>Foo<!>() {}
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/TryCatchComposableCheckerTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/TryCatchComposableCheckerTests.kt
similarity index 86%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/TryCatchComposableCheckerTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/TryCatchComposableCheckerTests.kt
index 3c8d895..460e024 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/TryCatchComposableCheckerTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/TryCatchComposableCheckerTests.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.analysis
+package androidx.compose.compiler.plugins.kotlin.analysis
 
-import androidx.compose.plugins.kotlin.AbstractComposeDiagnosticsTest
+import androidx.compose.compiler.plugins.kotlin.AbstractComposeDiagnosticsTest
 
 /**
  * We're strongly considering supporting try-catch-finally blocks in the future.
@@ -27,7 +27,7 @@
     fun testTryCatchReporting001() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun foo() { }
 
@@ -43,7 +43,7 @@
     fun testTryCatchReporting002() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             fun foo() { }
 
@@ -59,7 +59,7 @@
     fun testTryCatchReporting003() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun foo() { }
 
@@ -77,7 +77,7 @@
     fun testTryCatchReporting004() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Composable fun foo() { }
 
diff --git a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/UnionCheckerTests.kt b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/UnionCheckerTests.kt
similarity index 75%
rename from compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/UnionCheckerTests.kt
rename to compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/UnionCheckerTests.kt
index 11cd514..de10fa8 100644
--- a/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/plugins/kotlin/analysis/UnionCheckerTests.kt
+++ b/compose/compose-compiler-hosted/integration-tests/src/test/java/androidx/compose/compiler/plugins/kotlin/analysis/UnionCheckerTests.kt
@@ -14,19 +14,19 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.analysis
+package androidx.compose.compiler.plugins.kotlin.analysis
 
-import androidx.compose.plugins.kotlin.AbstractComposeDiagnosticsTest
+import androidx.compose.compiler.plugins.kotlin.AbstractComposeDiagnosticsTest
 
 class UnionCheckerTests : AbstractComposeDiagnosticsTest() {
 
     fun testUnionTypeReporting001() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable fun foo(value: @UnionType(Int::class, String::class) Any) {
                 System.out.println(value)
             }
@@ -43,16 +43,16 @@
     fun testUnionTypeReporting002() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable fun foo(value: @UnionType(Int::class, String::class) Any) {
                 System.out.println(value)
             }
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable
             fun bar(value: @UnionType(Int::class, String::class) Any) {
                 foo(value)
@@ -63,16 +63,16 @@
     fun testUnionTypeReporting003() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable fun foo(value: @UnionType(Int::class, String::class, Float::class) Any) {
                 System.out.println(value)
             }
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable
             fun bar(value: @UnionType(Int::class, String::class) Any) {
                 foo(value)
@@ -83,16 +83,16 @@
     fun testUnionTypeReporting004() {
         doTest(
             """
-            import androidx.compose.*;
+            import androidx.compose.runtime.*;
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable fun foo(value: @UnionType(Int::class, String::class) Any) {
                 System.out.println(value)
             }
 
             @Suppress("EXPERIMENTAL_IS_NOT_ENABLED")
-            @OptIn(androidx.compose.ExperimentalComposeApi::class)
+            @OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
             @Composable
             fun bar(value: @UnionType(Int::class, String::class, Float::class) Any) {
                 foo(<!ILLEGAL_ASSIGN_TO_UNIONTYPE!>value<!>)
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposableCallChecker.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableCallChecker.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposableCallChecker.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableCallChecker.kt
index 33b6937..624f26a 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposableCallChecker.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableCallChecker.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.analysis.ComposeWritableSlices
+import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
 import com.intellij.psi.PsiElement
 import org.jetbrains.kotlin.container.StorageComponentContainer
 import org.jetbrains.kotlin.container.useInstance
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposableDeclarationChecker.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableDeclarationChecker.kt
similarity index 90%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposableDeclarationChecker.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableDeclarationChecker.kt
index f1bc0bc..118f155 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposableDeclarationChecker.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposableDeclarationChecker.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.ComposeErrors.COMPOSABLE_PROPERTY_BACKING_FIELD
-import androidx.compose.plugins.kotlin.ComposeErrors.COMPOSABLE_SUSPEND_FUN
-import androidx.compose.plugins.kotlin.ComposeErrors.COMPOSABLE_VAR
+import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_PROPERTY_BACKING_FIELD
+import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_SUSPEND_FUN
+import androidx.compose.compiler.plugins.kotlin.ComposeErrors.COMPOSABLE_VAR
 import org.jetbrains.kotlin.container.StorageComponentContainer
 import org.jetbrains.kotlin.container.useInstance
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeDiagnosticSuppressor.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeDiagnosticSuppressor.kt
index 223aca0..e3966bd 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeDiagnosticSuppressor.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeDiagnosticSuppressor.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.openapi.extensions.Extensions
 import com.intellij.openapi.project.Project
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeErrorMessages.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrorMessages.kt
similarity index 97%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeErrorMessages.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrorMessages.kt
index 5dc9a5d..fed4706 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeErrorMessages.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrorMessages.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
 import org.jetbrains.kotlin.diagnostics.rendering.DiagnosticFactoryToRendererMap
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeErrors.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrors.kt
similarity index 97%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeErrors.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrors.kt
index 4fc202b..27bbea8 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeErrors.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeErrors.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.psi.PsiElement
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeFlags.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFlags.kt
similarity index 93%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeFlags.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFlags.kt
index ac6a98f..99d7528 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeFlags.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFlags.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 object ComposeFlags {
     var FRAMED_COMPONENTS = false
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeFqNames.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
similarity index 96%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeFqNames.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
index 1fa48dd..8f7ec38 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeFqNames.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeFqNames.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.descriptors.ModuleDescriptor
 import org.jetbrains.kotlin.descriptors.SourceElement
@@ -34,7 +34,7 @@
 import org.jetbrains.kotlin.types.typeUtil.replaceAnnotations
 
 object ComposeFqNames {
-    private const val root = "androidx.compose"
+    private const val root = "androidx.compose.runtime"
     private const val internalRoot = "$root.internal"
     fun fqNameFor(cname: String) = FqName("$root.$cname")
     fun internalFqNameFor(cname: String) = FqName("$internalRoot.$cname")
@@ -49,7 +49,7 @@
     val StableMarker = fqNameFor("StableMarker")
     val Stable = fqNameFor("Stable")
     val Composer = fqNameFor("Composer")
-    val ComposeVersion = FqName("androidx.compose.runtime.ComposeVersion")
+    val ComposeVersion = fqNameFor("ComposeVersion")
     val Package = FqName(root)
     fun makeComposableAnnotation(module: ModuleDescriptor): AnnotationDescriptor =
         object : AnnotationDescriptor {
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeIrGenerationExtension.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeIrGenerationExtension.kt
similarity index 90%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeIrGenerationExtension.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeIrGenerationExtension.kt
index fef64c7..02fa29d 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeIrGenerationExtension.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeIrGenerationExtension.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.compiler.lower.ComposableFunctionBodyTransformer
-import androidx.compose.plugins.kotlin.compiler.lower.ComposerIntrinsicTransformer
-import androidx.compose.plugins.kotlin.compiler.lower.ComposerLambdaMemoization
-import androidx.compose.plugins.kotlin.compiler.lower.ComposerParamTransformer
-import androidx.compose.plugins.kotlin.compiler.lower.DurableKeyVisitor
-import androidx.compose.plugins.kotlin.compiler.lower.LiveLiteralTransformer
+import androidx.compose.compiler.plugins.kotlin.lower.ComposableFunctionBodyTransformer
+import androidx.compose.compiler.plugins.kotlin.lower.ComposerIntrinsicTransformer
+import androidx.compose.compiler.plugins.kotlin.lower.ComposerLambdaMemoization
+import androidx.compose.compiler.plugins.kotlin.lower.ComposerParamTransformer
+import androidx.compose.compiler.plugins.kotlin.lower.DurableKeyVisitor
+import androidx.compose.compiler.plugins.kotlin.lower.LiveLiteralTransformer
 import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposePlugin.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
similarity index 96%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposePlugin.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
index e9ac68e..d732b11 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposePlugin.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposePlugin.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.mock.MockProject
 import com.intellij.openapi.project.Project
@@ -38,6 +38,8 @@
 
 class ComposeCommandLineProcessor : CommandLineProcessor {
     companion object {
+        // TODO: b/160404330, b/160233169 move to androidx.compose.compiler.plugins once Studio
+        // support lands
         val PLUGIN_ID = "androidx.compose.plugins.kotlin"
         val LIVE_LITERALS_ENABLED_OPTION = CliOption(
             "liveLiterals",
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
similarity index 91%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
index 586d01b..0774259 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ComposeTypeResolutionInterceptorExtension.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
-import androidx.compose.plugins.kotlin.analysis.ComposeWritableSlices
-import androidx.compose.plugins.kotlin.analysis.ComposeWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR
+import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
+import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices.INFERRED_COMPOSABLE_DESCRIPTOR
 import org.jetbrains.kotlin.descriptors.impl.AnonymousFunctionDescriptor
 import org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptorExtension
 import org.jetbrains.kotlin.psi.KtElement
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/KtxNameConventions.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt
similarity index 91%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/KtxNameConventions.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt
index b306a6f..cb91117 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/KtxNameConventions.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/KtxNameConventions.kt
@@ -1,4 +1,4 @@
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.name.Name
 
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/TryCatchComposableChecker.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/TryCatchComposableChecker.kt
similarity index 97%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/TryCatchComposableChecker.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/TryCatchComposableChecker.kt
index 1030b67..f4c5534 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/TryCatchComposableChecker.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/TryCatchComposableChecker.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.psi.PsiElement
 import org.jetbrains.kotlin.container.StorageComponentContainer
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/UnionAnnotationChecker.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/UnionAnnotationChecker.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/UnionAnnotationChecker.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/UnionAnnotationChecker.kt
index 589f2cd..6ddbfce 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/UnionAnnotationChecker.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/UnionAnnotationChecker.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.types.TypeUtils
 import org.jetbrains.kotlin.container.StorageComponentContainer
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ValidatedAssignment.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ValidatedAssignment.kt
similarity index 95%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ValidatedAssignment.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ValidatedAssignment.kt
index 2272ab9..9646462 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/ValidatedAssignment.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/ValidatedAssignment.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
 import org.jetbrains.kotlin.descriptors.FunctionDescriptor
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/VersionChecker.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/VersionChecker.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
index c01e2d6..79c7bd3 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/VersionChecker.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/VersionChecker.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.ir.declarations.IrProperty
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/WeakBindingTrace.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt
similarity index 97%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/WeakBindingTrace.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt
index 07cfb54..5c26140 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/WeakBindingTrace.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/WeakBindingTrace.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin
+package androidx.compose.compiler.plugins.kotlin
 
 import com.intellij.util.keyFMap.KeyFMap
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeWritableSlices.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt
similarity index 95%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeWritableSlices.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt
index a719612..997817b 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/analysis/ComposeWritableSlices.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/analysis/ComposeWritableSlices.kt
@@ -1,4 +1,4 @@
-package androidx.compose.plugins.kotlin.analysis
+package androidx.compose.compiler.plugins.kotlin.analysis
 
 import org.jetbrains.kotlin.descriptors.FunctionDescriptor
 import org.jetbrains.kotlin.ir.declarations.IrAttributeContainer
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/AbstractComposeLowering.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/AbstractComposeLowering.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
index a1c0fa1..db4ff14 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/AbstractComposeLowering.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/AbstractComposeLowering.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.ComposeFqNames
-import androidx.compose.plugins.kotlin.KtxNameConventions
-import androidx.compose.plugins.kotlin.allowsComposableCalls
-import androidx.compose.plugins.kotlin.analysis.ComposeWritableSlices
-import androidx.compose.plugins.kotlin.irTrace
-import androidx.compose.plugins.kotlin.isComposableCallable
-import androidx.compose.plugins.kotlin.isMarkedStable
-import androidx.compose.plugins.kotlin.isSpecialType
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
+import androidx.compose.compiler.plugins.kotlin.allowsComposableCalls
+import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
+import androidx.compose.compiler.plugins.kotlin.irTrace
+import androidx.compose.compiler.plugins.kotlin.isComposableCallable
+import androidx.compose.compiler.plugins.kotlin.isMarkedStable
+import androidx.compose.compiler.plugins.kotlin.isSpecialType
 import org.jetbrains.kotlin.backend.common.descriptors.isFunctionOrKFunctionType
 import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableFunctionBodyTransformer.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
similarity index 99%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableFunctionBodyTransformer.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
index f76ae98..7e605fd 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableFunctionBodyTransformer.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableFunctionBodyTransformer.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.ComposeFqNames
-import androidx.compose.plugins.kotlin.KtxNameConventions
-import androidx.compose.plugins.kotlin.composableReadonlyContract
-import androidx.compose.plugins.kotlin.composableRestartableContract
-import androidx.compose.plugins.kotlin.composableTrackedContract
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
+import androidx.compose.compiler.plugins.kotlin.composableReadonlyContract
+import androidx.compose.compiler.plugins.kotlin.composableRestartableContract
+import androidx.compose.compiler.plugins.kotlin.composableTrackedContract
 import org.jetbrains.kotlin.backend.common.FileLoweringPass
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableTypeRemapper.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
similarity index 99%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableTypeRemapper.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
index 596bf1c..e6c1f95 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposableTypeRemapper.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposableTypeRemapper.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
 import org.jetbrains.kotlin.backend.common.pop
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerIntrinsicTransformer.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerIntrinsicTransformer.kt
similarity index 95%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerIntrinsicTransformer.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerIntrinsicTransformer.kt
index 4541755..bc3cdc7 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerIntrinsicTransformer.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerIntrinsicTransformer.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 import org.jetbrains.kotlin.backend.common.FileLoweringPass
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.ir.declarations.IrFile
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerLambdaMemoization.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerLambdaMemoization.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
index 7cccad7..985088d 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerLambdaMemoization.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerLambdaMemoization.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.ComposeFqNames
-import androidx.compose.plugins.kotlin.analysis.ComposeWritableSlices
-import androidx.compose.plugins.kotlin.composableTrackedContract
-import androidx.compose.plugins.kotlin.irTrace
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
+import androidx.compose.compiler.plugins.kotlin.composableTrackedContract
+import androidx.compose.compiler.plugins.kotlin.irTrace
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
 import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerParamTransformer.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerParamTransformer.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
index 4382c64..9ac93c9 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ComposerParamTransformer.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ComposerParamTransformer.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.KtxNameConventions
-import androidx.compose.plugins.kotlin.analysis.ComposeWritableSlices
-import androidx.compose.plugins.kotlin.generateSymbols
-import androidx.compose.plugins.kotlin.hasComposableAnnotation
-import androidx.compose.plugins.kotlin.irTrace
-import androidx.compose.plugins.kotlin.isComposableCallable
+import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
+import androidx.compose.compiler.plugins.kotlin.analysis.ComposeWritableSlices
+import androidx.compose.compiler.plugins.kotlin.generateSymbols
+import androidx.compose.compiler.plugins.kotlin.hasComposableAnnotation
+import androidx.compose.compiler.plugins.kotlin.irTrace
+import androidx.compose.compiler.plugins.kotlin.isComposableCallable
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContextImpl
 import org.jetbrains.kotlin.backend.common.ir.copyTo
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/DurableKeyVisitor.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableKeyVisitor.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/DurableKeyVisitor.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableKeyVisitor.kt
index 5dee95b..01b8dc4 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/DurableKeyVisitor.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/DurableKeyVisitor.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
 class PathPartInfo(val key: String) {
     var parent: PathPartInfo? = null
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/FakeJvmSymbols.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/FakeJvmSymbols.kt
similarity index 98%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/FakeJvmSymbols.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/FakeJvmSymbols.kt
index b049bca..1739395 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/FakeJvmSymbols.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/FakeJvmSymbols.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
 import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
 import org.jetbrains.kotlin.descriptors.ClassKind
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/IrSourcePrinter.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
similarity index 99%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/IrSourcePrinter.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
index 7a551cf..a55c97d 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/IrSourcePrinter.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/IrSourcePrinter.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.KtxNameConventions
+import androidx.compose.compiler.plugins.kotlin.KtxNameConventions
 import org.jetbrains.kotlin.descriptors.Modality
 import org.jetbrains.kotlin.descriptors.Visibilities
 import org.jetbrains.kotlin.ir.IrElement
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/LiveLiteralTransformer.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
similarity index 99%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/LiveLiteralTransformer.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
index bba1f70..9f7fdb1 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/LiveLiteralTransformer.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/LiveLiteralTransformer.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
-import androidx.compose.plugins.kotlin.ComposeFqNames
+import androidx.compose.compiler.plugins.kotlin.ComposeFqNames
 import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
 import org.jetbrains.kotlin.backend.common.ir.addChild
 import org.jetbrains.kotlin.backend.common.ir.copyTo
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ModuleLoweringPass.kt b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ModuleLoweringPass.kt
similarity index 92%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ModuleLoweringPass.kt
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ModuleLoweringPass.kt
index b07fdde..527b5e2 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/ModuleLoweringPass.kt
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/ModuleLoweringPass.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.plugins.kotlin.compiler.lower
+package androidx.compose.compiler.plugins.kotlin.lower
 
 import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
 
diff --git a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/package-info.java b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/package-info.java
similarity index 90%
rename from compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/package-info.java
rename to compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/package-info.java
index 987dfeb..cf9bb9d 100644
--- a/compose/compose-compiler-hosted/src/main/java/androidx/compose/plugins/kotlin/compiler/lower/package-info.java
+++ b/compose/compose-compiler-hosted/src/main/java/androidx/compose/compiler/plugins/kotlin/lower/package-info.java
@@ -15,7 +15,8 @@
  */
 
 /**
- * This package contains all the logic related to lowering a PSI containing Compose Components into IR.
+ * This package contains all the logic related to lowering a PSI containing Compose Components into
+ * IR.
  * The entry-point for this package is ComponentClassLowering, which will generate all supporting
  * synthetics.
  * Each synthetic class of type [ClassName] lives in a file called [ClassName]Generator.
@@ -23,4 +24,4 @@
  * Anything beginning with the token `lower` may modify IR
  * Anything beginning with the token `generate` may only produce (return) IR
  */
-package androidx.compose.plugins.kotlin.compiler.lower;
+package androidx.compose.compiler.plugins.kotlin.lower;
diff --git a/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor b/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
index 1fe9f7c..0141e62 100644
--- a/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
+++ b/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
@@ -1 +1 @@
-androidx.compose.plugins.kotlin.ComposeCommandLineProcessor
\ No newline at end of file
+androidx.compose.compiler.plugins.kotlin.ComposeCommandLineProcessor
\ No newline at end of file
diff --git a/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar b/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
index e98899a..100b36b 100644
--- a/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
+++ b/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
@@ -1 +1 @@
-androidx.compose.plugins.kotlin.ComposeComponentRegistrar
\ No newline at end of file
+androidx.compose.compiler.plugins.kotlin.ComposeComponentRegistrar
\ No newline at end of file
diff --git a/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension b/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension
index 98d6e75..bc7e073 100644
--- a/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension
+++ b/compose/compose-compiler-hosted/src/main/resources/META-INF/services/org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages$Extension
@@ -1 +1 @@
-androidx.compose.plugins.kotlin.ComposeErrorMessages
\ No newline at end of file
+androidx.compose.compiler.plugins.kotlin.ComposeErrorMessages
\ No newline at end of file
diff --git a/compose/compose-runtime/api/0.1.0-dev16.txt b/compose/compose-runtime/api/0.1.0-dev16.txt
index 24f6a02..f6960e5 100644
--- a/compose/compose-runtime/api/0.1.0-dev16.txt
+++ b/compose/compose-runtime/api/0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
-package androidx.compose {
+package androidx.compose.runtime {
 
-  @androidx.compose.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.Applier<T> {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
     ctor public AbstractApplier(T! root);
     method public final void clear();
     method public void down(T? node);
@@ -16,31 +16,31 @@
   }
 
   public final class ActualAndroidKt {
-    method public static androidx.compose.EmbeddingContext EmbeddingContext();
+    method public static androidx.compose.runtime.EmbeddingContext EmbeddingContext();
   }
 
   public final class ActualJvmKt {
   }
 
-  @androidx.compose.Stable public abstract sealed class Ambient<T> {
+  @androidx.compose.runtime.Stable public abstract sealed class Ambient<T> {
     method public final inline T! getCurrent();
     property public final inline T! current;
   }
 
   public final class AmbientKt {
-    method @androidx.compose.Composable public static void Providers(androidx.compose.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static <T> androidx.compose.ProvidableAmbient<T> ambientOf(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
-    method public static <T> androidx.compose.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method @androidx.compose.runtime.Composable public static void Providers(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> ambientOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
   }
 
-  @androidx.compose.InternalComposeApi public final class Anchor {
+  @androidx.compose.runtime.InternalComposeApi public final class Anchor {
     ctor public Anchor(internal int loc);
     method public boolean getValid();
-    method public int location(androidx.compose.SlotTable slots);
+    method public int location(androidx.compose.runtime.SlotTable slots);
     property public final boolean valid;
   }
 
-  public final class AndroidEmbeddingContext implements androidx.compose.EmbeddingContext {
+  public final class AndroidEmbeddingContext implements androidx.compose.runtime.EmbeddingContext {
     ctor public AndroidEmbeddingContext();
     method public void cancelFrameCallback(android.view.Choreographer.FrameCallback callback);
     method public boolean isMainThread();
@@ -49,7 +49,7 @@
     method public void postOnMainThread(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface Applier<N> {
+  @androidx.compose.runtime.ExperimentalComposeApi public interface Applier<N> {
     method public void clear();
     method public void down(N? node);
     method public N! getCurrent();
@@ -68,7 +68,7 @@
     method public kotlinx.collections.immutable.PersistentMap<K,V> component1();
     method public boolean containsKey(Object! key);
     method public boolean containsValue(Object! value);
-    method public androidx.compose.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
+    method public androidx.compose.runtime.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
     method public V? get(Object! key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
     method public java.util.Set<K> getKeys();
@@ -96,53 +96,53 @@
   }
 
   public final class ComposeKt {
-    method @androidx.compose.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
+    method @androidx.compose.runtime.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
     method public static inline kotlin.jvm.functions.Function0<kotlin.Unit> orEmpty(kotlin.jvm.functions.Function0<kotlin.Unit>?);
   }
 
   public final class Composer<N> {
-    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
-    method @androidx.compose.InternalComposeApi public void applyChanges();
-    method @androidx.compose.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(Object? value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(char value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(byte value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(short value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(boolean value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(float value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(long value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(double value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(int value);
-    method @androidx.compose.InternalComposeApi public void collectKeySourceInformation();
-    method @androidx.compose.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method @androidx.compose.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
-    method @androidx.compose.ComposeCompilerApi public void emitNode(Object? node);
-    method @androidx.compose.ComposeCompilerApi public void endDefaults();
-    method @androidx.compose.ComposeCompilerApi public void endMovableGroup();
-    method @androidx.compose.ComposeCompilerApi public void endNode();
-    method @androidx.compose.ComposeCompilerApi public void endReplaceableGroup();
-    method @androidx.compose.ComposeCompilerApi public androidx.compose.ScopeUpdateScope? endRestartGroup();
-    method public androidx.compose.Applier<N> getApplier();
+    ctor public Composer(androidx.compose.runtime.SlotTable slotTable, androidx.compose.runtime.Applier<N> applier, androidx.compose.runtime.Recomposer recomposer);
+    method @androidx.compose.runtime.InternalComposeApi public void applyChanges();
+    method @androidx.compose.runtime.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(char value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(byte value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(short value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(boolean value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(float value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(long value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(double value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(int value);
+    method @androidx.compose.runtime.InternalComposeApi public void collectKeySourceInformation();
+    method @androidx.compose.runtime.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method @androidx.compose.runtime.ComposeCompilerApi public void emitNode(Object? node);
+    method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+    method public androidx.compose.runtime.Applier<N> getApplier();
     method public int getCurrentCompoundKeyHash();
     method public boolean getDefaultsInvalid();
     method public boolean getInserting();
-    method public androidx.compose.Recomposer getRecomposer();
+    method public androidx.compose.runtime.Recomposer getRecomposer();
     method public boolean getSkipping();
-    method public androidx.compose.SlotTable getSlotTable();
-    method @androidx.compose.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
-    method @androidx.compose.ComposeCompilerApi public Object? nextSlot();
-    method @androidx.compose.InternalComposeApi public boolean recompose();
-    method @androidx.compose.ComposeCompilerApi public void skipCurrentGroup();
-    method @androidx.compose.ComposeCompilerApi public void skipToGroupEnd();
-    method @androidx.compose.ComposeCompilerApi public void startDefaults();
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startNode();
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public N! useNode();
+    method public androidx.compose.runtime.SlotTable getSlotTable();
+    method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+    method @androidx.compose.runtime.ComposeCompilerApi public Object? nextSlot();
+    method @androidx.compose.runtime.InternalComposeApi public boolean recompose();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public N! useNode();
     property public final int currentCompoundKeyHash;
     property public final boolean defaultsInvalid;
     property public final boolean inserting;
@@ -150,7 +150,7 @@
   }
 
   public final class ComposerKt {
-    method public static androidx.compose.Composer<?> getCurrentComposer();
+    method public static androidx.compose.runtime.Composer<?> getCurrentComposer();
   }
 
   public interface Composition {
@@ -168,14 +168,14 @@
   }
 
   public final class CompositionFrameClockKt {
-    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
-    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
   }
 
   public final class CompositionKt {
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.Composition compositionFor(Object key, androidx.compose.Applier<?> applier, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition compositionFor(Object key, androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
   }
 
   public interface CompositionLifecycleObserver {
@@ -187,18 +187,18 @@
   }
 
   public final class EffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.CompositionReference compositionReference();
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionReference compositionReference();
     method public static kotlin.jvm.functions.Function0<kotlin.Unit> getInvalidate();
-    method @androidx.compose.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
   }
 
   public interface EmbeddingContext {
@@ -210,8 +210,8 @@
   }
 
   public final class EmitKt {
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
   }
 
   public final class ExpectKt {
@@ -221,8 +221,8 @@
   }
 
   public final class FlowAdapterKt {
-    method @androidx.compose.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
-    method @androidx.compose.Composable public static <T extends R, R> androidx.compose.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
   }
 
   public final class FrameManager {
@@ -231,22 +231,22 @@
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
     method @Deprecated public void nextFrame();
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
-    field public static final androidx.compose.FrameManager INSTANCE;
+    field public static final androidx.compose.runtime.FrameManager INSTANCE;
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules that may change frequently " + "and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalComposeApi {
   }
 
   public final class JoinedKeyKt {
-    method @androidx.compose.InternalComposeApi public static boolean isJoinedKey(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyRight(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static boolean isJoinedKey(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyRight(Object? key);
   }
 
-  @androidx.compose.InternalComposeApi public final class KeyInfo {
+  @androidx.compose.runtime.InternalComposeApi public final class KeyInfo {
     method public Object? getDataKey();
     method public int getIndex();
     method public int getKey();
@@ -255,15 +255,15 @@
   }
 
   public final class KeyKt {
-    method @androidx.compose.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
   }
 
   public final class KeySourceInfoKt {
-    method @androidx.compose.InternalComposeApi public static String? keySourceInfoOf(Object key);
-    method @androidx.compose.InternalComposeApi public static void resetSourceInfo();
+    method @androidx.compose.runtime.InternalComposeApi public static String? keySourceInfoOf(Object key);
+    method @androidx.compose.runtime.InternalComposeApi public static void resetSourceInfo();
   }
 
-  @androidx.compose.Stable public interface MutableState<T> extends androidx.compose.State<T> {
+  @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
     method public operator T! component1();
     method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
     method public void setValue(T! p);
@@ -274,22 +274,22 @@
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getNeverEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getReferentiallyEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getStructurallyEqual();
-    method public static inline operator <T> T! getValue(androidx.compose.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-    method public static <T> androidx.compose.MutableState<T> mutableStateOf(T? value, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> referentialEqualityPolicy();
-    method public static inline operator <T> void setValue(androidx.compose.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> state(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, V1> androidx.compose.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, reified V1, reified V2> androidx.compose.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> structuralEqualityPolicy();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+    method public static inline operator <T> T! getValue(androidx.compose.runtime.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+    method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> state(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> androidx.compose.runtime.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, reified V1, reified V2> androidx.compose.runtime.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
   }
 
   @kotlin.annotation.Retention(AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.FILE}) public @interface NoLiveLiterals {
@@ -308,58 +308,58 @@
     method public void removeValue(V value);
   }
 
-  @androidx.compose.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.Ambient<T> {
-    method public final infix androidx.compose.ProvidedValue<T> provides(T? value);
+  @androidx.compose.runtime.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.runtime.Ambient<T> {
+    method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
   }
 
   public final class ProvidedValue<T> {
-    method public androidx.compose.Ambient<T> getAmbient();
+    method public androidx.compose.runtime.Ambient<T> getAmbient();
     method public T! getValue();
   }
 
   public final class Recomposer {
-    ctor public Recomposer(androidx.compose.EmbeddingContext embeddingContext);
+    ctor public Recomposer(androidx.compose.runtime.EmbeddingContext embeddingContext);
     ctor public Recomposer();
     method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
-    method public androidx.compose.EmbeddingContext getEmbeddingContext();
+    method public androidx.compose.runtime.EmbeddingContext getEmbeddingContext();
     method public androidx.compose.runtime.dispatch.MonotonicFrameClock getFrameClock();
     method public boolean hasPendingChanges();
     method public suspend Object? recomposeAndApplyChanges(kotlinx.coroutines.CoroutineScope applyCoroutineScope, long frameCount, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<?> p);
-    method public void setEmbeddingContext(androidx.compose.EmbeddingContext p);
+    method public void setEmbeddingContext(androidx.compose.runtime.EmbeddingContext p);
     property public final androidx.compose.runtime.dispatch.MonotonicFrameClock frameClock;
-    field public static final androidx.compose.Recomposer.Companion Companion;
+    field public static final androidx.compose.runtime.Recomposer.Companion Companion;
   }
 
   public static final class Recomposer.Companion {
-    method @org.jetbrains.annotations.TestOnly public androidx.compose.Recomposer current();
+    method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.Recomposer current();
   }
 
   public final class RecomposerKt {
-    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class RememberKt {
-    method @androidx.compose.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
   }
 
-  @androidx.compose.ComposeCompilerApi public interface ScopeUpdateScope {
-    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
+  @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.runtime.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotReader {
-    ctor public SlotReader(androidx.compose.SlotTable table);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotReader {
+    ctor public SlotReader(androidx.compose.runtime.SlotTable table);
     method public void beginEmpty();
     method public void close();
     method public void endEmpty();
     method public void endGroup();
     method public void endNode();
-    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public java.util.List<androidx.compose.runtime.KeyInfo> extractKeys();
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public int getCurrent();
     method public int getCurrentEnd();
@@ -374,7 +374,7 @@
     method public int getParentLocation();
     method public int getParentNodes();
     method public int getParentSlots();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupEnd(int index);
     method public int groupKey(int index);
     method public int groupSize(int index);
@@ -413,17 +413,17 @@
     ctor public SlotTable(internal Object![] slots);
     ctor public SlotTable();
     method public int getSize();
-    method @androidx.compose.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotReader openReader();
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotWriter openWriter();
-    method @androidx.compose.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
-    method @androidx.compose.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
-    method @androidx.compose.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotReader openReader();
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotWriter openWriter();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotReader,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotWriter,? extends T> block);
     property public final int size;
-    field public static final androidx.compose.SlotTable.Companion Companion;
+    field public static final androidx.compose.runtime.SlotTable.Companion Companion;
   }
 
-  @androidx.compose.InternalComposeApi public static final class SlotTable.Companion {
+  @androidx.compose.runtime.InternalComposeApi public static final class SlotTable.Companion {
     method public Object getEMPTY();
     property public final Object EMPTY;
   }
@@ -431,8 +431,8 @@
   public final class SlotTableKt {
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotWriter {
-    method public androidx.compose.Anchor anchor(int index = current);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotWriter {
+    method public androidx.compose.runtime.Anchor anchor(int index = current);
     method public void beginInsert();
     method public void close();
     method public int endData();
@@ -440,8 +440,8 @@
     method public void endInsert();
     method public int endNode();
     method public void ensureStarted(int location);
-    method public void ensureStarted(androidx.compose.Anchor anchor);
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public void ensureStarted(androidx.compose.runtime.Anchor anchor);
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public boolean getClosed();
     method public int getCurrent();
@@ -449,15 +449,15 @@
     method public int getNodeIndex();
     method public int getParentLocation();
     method public int getParentNodes();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupSize(int index);
     method public java.util.Iterator<java.lang.Object> groupSlots();
     method public boolean isGroup();
     method public boolean isGroup(int index);
     method public boolean isNode();
-    method public java.util.List<androidx.compose.Anchor> moveFrom(androidx.compose.SlotTable table, int location);
+    method public java.util.List<androidx.compose.runtime.Anchor> moveFrom(androidx.compose.runtime.SlotTable table, int location);
     method public void moveGroup(int offset);
-    method public int parentIndex(androidx.compose.Anchor anchor);
+    method public int parentIndex(androidx.compose.runtime.Anchor anchor);
     method public boolean removeGroup();
     method public void set(Object? value);
     method public void setCurrent(int p);
@@ -488,40 +488,40 @@
 
   public interface SnapshotMutationPolicy<T> {
     method public boolean equivalent(T? a, T? b);
-    method @androidx.compose.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
+    method @androidx.compose.runtime.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
   }
 
   @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
   }
 
-  @androidx.compose.Stable public interface State<T> {
+  @androidx.compose.runtime.Stable public interface State<T> {
     method public T! getValue();
     property public abstract T! value;
   }
 
   public final class SuspendingEffectsKt {
-    method public static suspend Object? awaitDispose(androidx.compose.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
-    method @androidx.compose.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
+    method public static suspend Object? awaitDispose(androidx.compose.runtime.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
+    method @androidx.compose.runtime.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
   }
 
   public final class TraceKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+  @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
     method public abstract Class<?>[] types();
   }
 
   public final class Updater<T> {
-    ctor public Updater(androidx.compose.Composer<?> composer, T! node);
-    method public androidx.compose.Composer<?> getComposer();
+    ctor public Updater(androidx.compose.runtime.Composer<?> composer, T! node);
+    method public androidx.compose.runtime.Composer<?> getComposer();
     method public T! getNode();
     method public inline void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
@@ -532,18 +532,18 @@
 
 }
 
-package androidx.compose.collection {
+package androidx.compose.runtime.collection {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for fast access collections and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalCollectionApi {
   }
 
-  @androidx.compose.collection.ExperimentalCollectionApi public final class MutableVector<T> {
+  @androidx.compose.runtime.collection.ExperimentalCollectionApi public final class MutableVector<T> {
     method public boolean add(T? element);
     method public void add(int index, T? element);
     method public boolean addAll(int index, java.util.List<? extends T> elements);
-    method public boolean addAll(int index, androidx.compose.collection.MutableVector<T> elements);
+    method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
     method public inline boolean addAll(java.util.List<? extends T> elements);
-    method public inline boolean addAll(androidx.compose.collection.MutableVector<T> elements);
+    method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean addAll(T![] elements);
     method public boolean addAll(int index, java.util.Collection<? extends T> elements);
     method public boolean addAll(java.util.Collection<? extends T> elements);
@@ -553,8 +553,8 @@
     method public operator boolean contains(T? element);
     method public boolean containsAll(java.util.List<? extends T> elements);
     method public boolean containsAll(java.util.Collection<? extends T> elements);
-    method public boolean containsAll(androidx.compose.collection.MutableVector<T> elements);
-    method public boolean contentEquals(androidx.compose.collection.MutableVector<T> other);
+    method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+    method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
     method public void ensureCapacity(int capacity);
     method public T! first();
     method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
@@ -584,12 +584,12 @@
     method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method public inline <reified R> R![]! map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline <reified R> R![]! mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline operator void plusAssign(T? element);
     method public boolean remove(T? element);
     method public boolean removeAll(java.util.List<? extends T> elements);
-    method public boolean removeAll(androidx.compose.collection.MutableVector<T> elements);
+    method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean removeAll(java.util.Collection<? extends T> elements);
     method public T! removeAt(int index);
     method public void removeRange(int start, int end);
@@ -603,24 +603,24 @@
   }
 
   public final class MutableVectorKt {
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int capacity = 16);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf();
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf(T? elements);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int capacity = 16);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf(T? elements);
   }
 
 }
 
-package androidx.compose.frames {
+package androidx.compose.runtime.frames {
 
-  @Deprecated public abstract class AbstractRecord implements androidx.compose.frames.Record {
+  @Deprecated public abstract class AbstractRecord implements androidx.compose.runtime.frames.Record {
     ctor @Deprecated public AbstractRecord();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public int frameId;
-    property public androidx.compose.frames.Record? next;
+    property public androidx.compose.runtime.frames.Record? next;
   }
 
   public final class Frame {
@@ -631,54 +631,54 @@
   }
 
   @Deprecated public final class FrameAborted extends java.lang.RuntimeException {
-    ctor @Deprecated public FrameAborted(androidx.compose.frames.Frame frame);
-    method @Deprecated public androidx.compose.frames.Frame getFrame();
+    ctor @Deprecated public FrameAborted(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public androidx.compose.runtime.frames.Frame getFrame();
   }
 
   public final class FrameContainersKt {
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf();
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf();
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T? element);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T?... elements);
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf();
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
   }
 
   public final class FrameIdSetKt {
   }
 
   @Deprecated public interface Framed {
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
-    property public abstract androidx.compose.frames.Record firstFrameRecord;
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
+    property public abstract androidx.compose.runtime.frames.Record firstFrameRecord;
   }
 
   public final class FramesKt {
-    method @Deprecated public static void _created(androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method @Deprecated public static void _created(androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _readable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _writable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
     method @Deprecated public static void abort();
-    method @Deprecated public static void abort(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abort(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void abortHandler();
-    method @Deprecated public static void abortHandler(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abortHandler(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commit();
-    method @Deprecated public static void commit(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void commit(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commitHandler();
-    method @Deprecated public static androidx.compose.frames.Frame currentFrame();
+    method @Deprecated public static androidx.compose.runtime.frames.Frame currentFrame();
     method @Deprecated public static boolean getInFrame();
     method @Deprecated public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method @Deprecated public static void open(boolean readOnly = false);
     method @Deprecated public static void open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function2<java.lang.Object,? super java.lang.Boolean,kotlin.Unit>? writeObserver = null);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.frames.Frame,kotlin.Unit> observer);
-    method @Deprecated public static void restore(androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame suspend();
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T readable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.frames.Frame,kotlin.Unit> observer);
+    method @Deprecated public static void restore(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame suspend();
     method @Deprecated public static boolean wasModified(Object value);
-    method @Deprecated public static inline <T extends androidx.compose.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+    method @Deprecated public static inline <T extends androidx.compose.runtime.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed, androidx.compose.runtime.frames.Frame frame);
   }
 
-  @Deprecated public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+  @Deprecated public final class ModelList<T> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
     ctor @Deprecated public ModelList();
     method @Deprecated public boolean add(T? element);
     method @Deprecated public void add(int index, T? element);
@@ -688,7 +688,7 @@
     method @Deprecated public boolean contains(Object? element);
     method @Deprecated public boolean containsAll(java.util.Collection<?> elements);
     method @Deprecated public T! get(int index);
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public int getSize();
     method @Deprecated public int indexOf(Object? element);
     method @Deprecated public boolean isEmpty();
@@ -696,86 +696,86 @@
     method @Deprecated public int lastIndexOf(Object? element);
     method @Deprecated public java.util.ListIterator<T> listIterator();
     method @Deprecated public java.util.ListIterator<T> listIterator(int index);
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public boolean remove(Object? element);
     method @Deprecated public boolean removeAll(java.util.Collection<?> elements);
     method @Deprecated public T! removeAt(int index);
     method @Deprecated public boolean retainAll(java.util.Collection<?> elements);
     method @Deprecated public T! set(int index, T? element);
     method @Deprecated public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public int size;
   }
 
-  @Deprecated public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+  @Deprecated public final class ModelMap<K, V> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
     ctor @Deprecated public ModelMap();
     method @Deprecated public void clear();
     method @Deprecated public boolean containsKey(Object? key);
     method @Deprecated public boolean containsValue(Object? value);
     method @Deprecated public V? get(Object? key);
     method @Deprecated public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public java.util.Set<K> getKeys();
     method @Deprecated public int getSize();
     method @Deprecated public java.util.Collection<V> getValues();
     method @Deprecated public boolean isEmpty();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public V? put(K? key, V? value);
     method @Deprecated public void putAll(java.util.Map<? extends K,? extends V> from);
     method @Deprecated public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
   @Deprecated public interface Record {
-    method @Deprecated public void assign(androidx.compose.frames.Record value);
-    method @Deprecated public androidx.compose.frames.Record create();
+    method @Deprecated public void assign(androidx.compose.runtime.frames.Record value);
+    method @Deprecated public androidx.compose.runtime.frames.Record create();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public abstract int frameId;
-    property public abstract androidx.compose.frames.Record? next;
+    property public abstract androidx.compose.runtime.frames.Record? next;
   }
 
 }
 
-package androidx.compose.internal {
+package androidx.compose.runtime.internal {
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
     ctor public ComposableLambda(int key, boolean tracked, String? sourceInformation);
     method public int getKey();
-    method public operator R! invoke(androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
     method public void update(Object block);
   }
 
   public final class ComposableLambdaKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
     ctor public ComposableLambdaN(int key, boolean tracked, String? sourceInformation, int arity);
     method public int getArity();
     method public int getKey();
@@ -784,82 +784,82 @@
   }
 
   public final class ComposableLambdaNKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
     method public abstract String file();
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
     method public abstract String key();
     method public abstract int offset();
   }
 
   public final class LiveLiteralKt {
-    method @androidx.compose.InternalComposeApi public static <T> androidx.compose.State<T> liveLiteral(String key, T? value);
-    method @androidx.compose.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+    method @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+    method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
   }
 
 }
 
-package androidx.compose.snapshots {
+package androidx.compose.runtime.snapshots {
 
   public final class ListUtilsKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.snapshots.Snapshot {
-    method public androidx.compose.snapshots.SnapshotApplyResult apply();
+  @androidx.compose.runtime.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+    method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
     method public void close$lintWithKotlin();
-    method public java.util.Set<androidx.compose.snapshots.StateObject>? getModified$lintWithKotlin();
+    method public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? getModified$lintWithKotlin();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver$lintWithKotlin();
     method public boolean getReadonly();
-    method public androidx.compose.snapshots.Snapshot getRoot();
+    method public androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver$lintWithKotlin();
     method public boolean hasPendingChanges();
-    method public void nestedActivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
-    method public void nestedDeactivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
+    method public void nestedActivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public void nestedDeactivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void notifyObjectsInitialized$lintWithKotlin();
-    method public void recordModified$lintWithKotlin(androidx.compose.snapshots.StateObject state);
-    method public void setModified(java.util.Set<androidx.compose.snapshots.StateObject>? p);
-    method public androidx.compose.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
-    property public java.util.Set<androidx.compose.snapshots.StateObject>? modified;
+    method public void recordModified$lintWithKotlin(androidx.compose.runtime.snapshots.StateObject state);
+    method public void setModified(java.util.Set<androidx.compose.runtime.snapshots.StateObject>? p);
+    method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+    property public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? modified;
     property public boolean readonly;
-    property public androidx.compose.snapshots.Snapshot root;
+    property public androidx.compose.runtime.snapshots.Snapshot root;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract sealed class Snapshot {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract sealed class Snapshot {
     method public void dispose();
     method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
     method public int getId();
     method public abstract boolean getReadonly();
-    method public abstract androidx.compose.snapshots.Snapshot getRoot();
+    method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public abstract boolean hasPendingChanges();
     method public void setId$lintWithKotlin(int p);
-    method public abstract androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
     property public int id;
     property public abstract boolean readonly;
-    property public abstract androidx.compose.snapshots.Snapshot root;
-    field public static final androidx.compose.snapshots.Snapshot.Companion Companion;
+    property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+    field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
   }
 
   public static final class Snapshot.Companion {
-    method public androidx.compose.snapshots.Snapshot! getCurrent();
+    method public androidx.compose.runtime.snapshots.Snapshot! getCurrent();
     method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public void notifyObjectsInitialized();
+    method @androidx.compose.runtime.ExperimentalComposeApi public void notifyObjectsInitialized();
     method public <T> T! observe(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.InternalComposeApi public int openSnapshotCount();
-    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.snapshots.Snapshot,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public void sendApplyNotifications();
-    property public final androidx.compose.snapshots.Snapshot! current;
+    method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public void sendApplyNotifications();
+    property public final androidx.compose.runtime.snapshots.Snapshot! current;
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
-    ctor public SnapshotApplyConflictException(androidx.compose.snapshots.Snapshot snapshot);
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
+    ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
   }
 
   public abstract sealed class SnapshotApplyResult {
@@ -868,35 +868,35 @@
     property public abstract boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Failure extends androidx.compose.snapshots.SnapshotApplyResult {
-    ctor public SnapshotApplyResult.Failure(androidx.compose.snapshots.Snapshot snapshot);
+  public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+    ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void check();
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
     method public boolean getSucceeded();
     property public boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Success extends androidx.compose.snapshots.SnapshotApplyResult {
+  public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
     method public void check();
     method public boolean getSucceeded();
     property public boolean succeeded;
-    field public static final androidx.compose.snapshots.SnapshotApplyResult.Success INSTANCE;
+    field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
   }
 
   public final class SnapshotIdSetKt {
   }
 
   public final class SnapshotKt {
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public static androidx.compose.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
-    method @androidx.compose.ExperimentalComposeApi public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static androidx.compose.runtime.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
   }
 
-  @androidx.compose.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public boolean add(T? element);
     method public void add(int index, T? element);
@@ -906,7 +906,7 @@
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<?> elements);
     method public T! get(int index);
-    method public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
     method public int getSize();
     method public int indexOf(Object? element);
     method public boolean isEmpty();
@@ -914,7 +914,7 @@
     method public int lastIndexOf(Object? element);
     method public java.util.ListIterator<T> listIterator();
     method public java.util.ListIterator<T> listIterator(int index);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public boolean remove(Object? element);
     method public boolean removeAll(java.util.Collection<?> elements);
     method public T! removeAt(int index);
@@ -922,50 +922,50 @@
     method public boolean retainAll(java.util.Collection<?> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
     property public int size;
   }
 
-  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateListKt {
   }
 
-  @androidx.compose.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateMap();
     method public void clear();
     method public boolean containsKey(Object? key);
     method public boolean containsValue(Object? value);
     method public V? get(Object? key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
     method public java.util.Set<K> getKeys();
     method public int getSize();
     method public java.util.Collection<V> getValues();
     method public boolean isEmpty();
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
-  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateMapKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotStateObserver {
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotStateObserver {
     ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
     method public void clear(Object target);
     method public void dispose();
@@ -974,25 +974,25 @@
     method public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface StateObject {
-    method public androidx.compose.snapshots.StateRecord getFirstStateRecord();
-    method public default androidx.compose.snapshots.StateRecord? mergeRecords(androidx.compose.snapshots.StateRecord previous, androidx.compose.snapshots.StateRecord current, androidx.compose.snapshots.StateRecord applied);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
-    property public abstract androidx.compose.snapshots.StateRecord firstStateRecord;
+  @androidx.compose.runtime.ExperimentalComposeApi public interface StateObject {
+    method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+    method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+    property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract class StateRecord {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class StateRecord {
     ctor public StateRecord();
-    method public abstract void assign(androidx.compose.snapshots.StateRecord value);
-    method public abstract androidx.compose.snapshots.StateRecord create();
+    method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public abstract androidx.compose.runtime.snapshots.StateRecord create();
   }
 
 }
 
-package androidx.compose.tooling {
+package androidx.compose.runtime.tooling {
 
   public final class InspectionTablesKt {
-    method public static androidx.compose.ProvidableAmbient<java.util.Set<androidx.compose.SlotTable>> getInspectionTables();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.util.Set<androidx.compose.runtime.SlotTable>> getInspectionTables();
   }
 
 }
diff --git a/compose/compose-runtime/api/api_lint.ignore b/compose/compose-runtime/api/api_lint.ignore
index b51eab4..f8a9922 100644
--- a/compose/compose-runtime/api/api_lint.ignore
+++ b/compose/compose-runtime/api/api_lint.ignore
@@ -1,91 +1,91 @@
 // Baseline format: 1.0
-AcronymName: androidx.compose.SlotTable.Companion#getEMPTY():
+AcronymName: androidx.compose.runtime.SlotTable.Companion#getEMPTY():
     Acronyms should not be capitalized in method names: was `getEMPTY`, should this be `getEmpty`?
 
 
-ArrayReturn: androidx.compose.AmbientKt#Providers(androidx.compose.ProvidedValue<?>[], kotlin.jvm.functions.Function0<kotlin.Unit>) parameter #0:
-    Method parameter should be Collection<ProvidedValue> (or subclass) instead of raw array; was `androidx.compose.ProvidedValue<?>[]`
-ArrayReturn: androidx.compose.EffectsKt#onCommit(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit>) parameter #0:
+ArrayReturn: androidx.compose.runtime.AmbientKt#Providers(androidx.compose.runtime.ProvidedValue<?>[], kotlin.jvm.functions.Function0<kotlin.Unit>) parameter #0:
+    Method parameter should be Collection<ProvidedValue> (or subclass) instead of raw array; was `androidx.compose.runtime.ProvidedValue<?>[]`
+ArrayReturn: androidx.compose.runtime.EffectsKt#onCommit(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.EffectsKt#onPreCommit(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit>) parameter #0:
+ArrayReturn: androidx.compose.runtime.EffectsKt#onPreCommit(Object[], kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.KeyKt#key(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
+ArrayReturn: androidx.compose.runtime.KeyKt#key(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.MutableStateKt#stateFor(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
+ArrayReturn: androidx.compose.runtime.MutableStateKt#stateFor(Object[], kotlin.jvm.functions.Function0<? extends T>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.RememberKt#remember(Object[], kotlin.jvm.functions.Function0<? extends V>) parameter #0:
+ArrayReturn: androidx.compose.runtime.RememberKt#remember(Object[], kotlin.jvm.functions.Function0<? extends V>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.SlotTable#SlotTable(Object[]) parameter #0:
+ArrayReturn: androidx.compose.runtime.SlotTable#SlotTable(Object[]) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.SuspendingEffectsKt#launchInComposition(Object[], kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?>) parameter #0:
+ArrayReturn: androidx.compose.runtime.SuspendingEffectsKt#launchInComposition(Object[], kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.UnionType#types():
+ArrayReturn: androidx.compose.runtime.UnionType#types():
     Method should return Collection<Class> (or subclass) instead of raw array; was `java.lang.Class<?>[]`
 
 
-CallbackName: androidx.compose.CompositionLifecycleObserver:
+CallbackName: androidx.compose.runtime.CompositionLifecycleObserver:
     Class should be named CompositionLifecycleCallback
-CallbackName: androidx.compose.snapshots.SnapshotStateObserver:
+CallbackName: androidx.compose.runtime.snapshots.SnapshotStateObserver:
     Class should be named SnapshotStateCallback
 
 
-DocumentExceptions: androidx.compose.ComposerKt#getCurrentComposer():
+DocumentExceptions: androidx.compose.runtime.ComposerKt#getCurrentComposer():
     Method ComposerKt.getCurrentComposer appears to be throwing kotlin.NotImplementedError; this should be listed in the documentation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
-DocumentExceptions: androidx.compose.snapshots.SnapshotApplyResult.Failure#check():
-    Method Failure.check appears to be throwing androidx.compose.snapshots.SnapshotApplyConflictException; this should be recorded with a @Throws annotation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
+DocumentExceptions: androidx.compose.runtime.snapshots.SnapshotApplyResult.Failure#check():
+    Method Failure.check appears to be throwing androidx.compose.runtime.snapshots.SnapshotApplyConflictException; this should be recorded with a @Throws annotation; see https://android.github.io/kotlin-guides/interop.html#document-exceptions
 
 
-KotlinOperator: androidx.compose.SlotReader#get(androidx.compose.Anchor):
+KotlinOperator: androidx.compose.runtime.SlotReader#get(androidx.compose.runtime.Anchor):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.compose.SlotReader#get(int):
+KotlinOperator: androidx.compose.runtime.SlotReader#get(int):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.compose.SlotWriter#get(androidx.compose.Anchor):
+KotlinOperator: androidx.compose.runtime.SlotWriter#get(androidx.compose.runtime.Anchor):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.compose.SlotWriter#get(int):
+KotlinOperator: androidx.compose.runtime.SlotWriter#get(int):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.compose.Updater#set(V, kotlin.jvm.functions.Function2<? super T,? super V,? extends kotlin.Unit>):
+KotlinOperator: androidx.compose.runtime.Updater#set(V, kotlin.jvm.functions.Function2<? super T,? super V,? extends kotlin.Unit>):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
-KotlinOperator: androidx.compose.Updater#set(int, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit>):
+KotlinOperator: androidx.compose.runtime.Updater#set(int, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit>):
     Note that adding the `operator` keyword would allow calling this method using operator syntax
 
 
-MissingNullability: androidx.compose.BuildableMap#containsKey(Object) parameter #0:
+MissingNullability: androidx.compose.runtime.BuildableMap#containsKey(Object) parameter #0:
     Missing nullability on parameter `key` in method `containsKey`
-MissingNullability: androidx.compose.BuildableMap#containsValue(Object) parameter #0:
+MissingNullability: androidx.compose.runtime.BuildableMap#containsValue(Object) parameter #0:
     Missing nullability on parameter `value` in method `containsValue`
-MissingNullability: androidx.compose.BuildableMap#get(Object) parameter #0:
+MissingNullability: androidx.compose.runtime.BuildableMap#get(Object) parameter #0:
     Missing nullability on parameter `key` in method `get`
-MissingNullability: androidx.compose.MutableStateKt#stateFor(V1, V2, kotlin.jvm.functions.Function0<? extends T>):
+MissingNullability: androidx.compose.runtime.MutableStateKt#stateFor(V1, V2, kotlin.jvm.functions.Function0<? extends T>):
     Missing nullability on method `stateFor` return
-MissingNullability: androidx.compose.SlotReader#getGroupData():
+MissingNullability: androidx.compose.runtime.SlotReader#getGroupData():
     Missing nullability on method `getGroupData` return
-MissingNullability: androidx.compose.SlotReader#getGroupDataKey():
+MissingNullability: androidx.compose.runtime.SlotReader#getGroupDataKey():
     Missing nullability on method `getGroupDataKey` return
-MissingNullability: androidx.compose.SlotReader#getGroupNode():
+MissingNullability: androidx.compose.runtime.SlotReader#getGroupNode():
     Missing nullability on method `getGroupNode` return
-MissingNullability: androidx.compose.collection.MutableVector#mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R>):
+MissingNullability: androidx.compose.runtime.collection.MutableVector#mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R>):
     Missing nullability on method `mapIndexedNotNull` return
-MissingNullability: androidx.compose.collection.MutableVector#mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R>):
+MissingNullability: androidx.compose.runtime.collection.MutableVector#mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R>):
     Missing nullability on method `mapNotNull` return
-MissingNullability: androidx.compose.collection.MutableVectorKt#MutableVector(int):
+MissingNullability: androidx.compose.runtime.collection.MutableVectorKt#MutableVector(int):
     Missing nullability on method `MutableVector` return
-MissingNullability: androidx.compose.collection.MutableVectorKt#MutableVector(int, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T>):
+MissingNullability: androidx.compose.runtime.collection.MutableVectorKt#MutableVector(int, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T>):
     Missing nullability on method `MutableVector` return
-MissingNullability: androidx.compose.collection.MutableVectorKt#mutableVectorOf():
+MissingNullability: androidx.compose.runtime.collection.MutableVectorKt#mutableVectorOf():
     Missing nullability on method `mutableVectorOf` return
-MissingNullability: androidx.compose.collection.MutableVectorKt#mutableVectorOf(T):
+MissingNullability: androidx.compose.runtime.collection.MutableVectorKt#mutableVectorOf(T):
     Missing nullability on method `mutableVectorOf` return
-MissingNullability: androidx.compose.snapshots.Snapshot.Companion#getCurrent():
+MissingNullability: androidx.compose.runtime.snapshots.Snapshot.Companion#getCurrent():
     Missing nullability on method `getCurrent` return
 
 
-NoByteOrShort: androidx.compose.Composer#changed(byte) parameter #0:
-    Should avoid odd sized primitives; use `int` instead of `byte` in parameter value in androidx.compose.Composer.changed(byte value)
-NoByteOrShort: androidx.compose.Composer#changed(short) parameter #0:
-    Should avoid odd sized primitives; use `int` instead of `short` in parameter value in androidx.compose.Composer.changed(short value)
+NoByteOrShort: androidx.compose.runtime.Composer#changed(byte) parameter #0:
+    Should avoid odd sized primitives; use `int` instead of `byte` in parameter value in androidx.compose.runtime.Composer.changed(byte value)
+NoByteOrShort: androidx.compose.runtime.Composer#changed(short) parameter #0:
+    Should avoid odd sized primitives; use `int` instead of `short` in parameter value in androidx.compose.runtime.Composer.changed(short value)
 
 
-NotCloseable: androidx.compose.SlotReader:
-    Classes that release resources (close()) should implement AutoClosable and CloseGuard: class androidx.compose.SlotReader
-NotCloseable: androidx.compose.SlotWriter:
-    Classes that release resources (close()) should implement AutoClosable and CloseGuard: class androidx.compose.SlotWriter
+NotCloseable: androidx.compose.runtime.SlotReader:
+    Classes that release resources (close()) should implement AutoClosable and CloseGuard: class androidx.compose.runtime.SlotReader
+NotCloseable: androidx.compose.runtime.SlotWriter:
+    Classes that release resources (close()) should implement AutoClosable and CloseGuard: class androidx.compose.runtime.SlotWriter
diff --git a/compose/compose-runtime/api/current.txt b/compose/compose-runtime/api/current.txt
index 24f6a02..f6960e5 100644
--- a/compose/compose-runtime/api/current.txt
+++ b/compose/compose-runtime/api/current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
-package androidx.compose {
+package androidx.compose.runtime {
 
-  @androidx.compose.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.Applier<T> {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
     ctor public AbstractApplier(T! root);
     method public final void clear();
     method public void down(T? node);
@@ -16,31 +16,31 @@
   }
 
   public final class ActualAndroidKt {
-    method public static androidx.compose.EmbeddingContext EmbeddingContext();
+    method public static androidx.compose.runtime.EmbeddingContext EmbeddingContext();
   }
 
   public final class ActualJvmKt {
   }
 
-  @androidx.compose.Stable public abstract sealed class Ambient<T> {
+  @androidx.compose.runtime.Stable public abstract sealed class Ambient<T> {
     method public final inline T! getCurrent();
     property public final inline T! current;
   }
 
   public final class AmbientKt {
-    method @androidx.compose.Composable public static void Providers(androidx.compose.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static <T> androidx.compose.ProvidableAmbient<T> ambientOf(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
-    method public static <T> androidx.compose.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method @androidx.compose.runtime.Composable public static void Providers(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> ambientOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
   }
 
-  @androidx.compose.InternalComposeApi public final class Anchor {
+  @androidx.compose.runtime.InternalComposeApi public final class Anchor {
     ctor public Anchor(internal int loc);
     method public boolean getValid();
-    method public int location(androidx.compose.SlotTable slots);
+    method public int location(androidx.compose.runtime.SlotTable slots);
     property public final boolean valid;
   }
 
-  public final class AndroidEmbeddingContext implements androidx.compose.EmbeddingContext {
+  public final class AndroidEmbeddingContext implements androidx.compose.runtime.EmbeddingContext {
     ctor public AndroidEmbeddingContext();
     method public void cancelFrameCallback(android.view.Choreographer.FrameCallback callback);
     method public boolean isMainThread();
@@ -49,7 +49,7 @@
     method public void postOnMainThread(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface Applier<N> {
+  @androidx.compose.runtime.ExperimentalComposeApi public interface Applier<N> {
     method public void clear();
     method public void down(N? node);
     method public N! getCurrent();
@@ -68,7 +68,7 @@
     method public kotlinx.collections.immutable.PersistentMap<K,V> component1();
     method public boolean containsKey(Object! key);
     method public boolean containsValue(Object! value);
-    method public androidx.compose.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
+    method public androidx.compose.runtime.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
     method public V? get(Object! key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
     method public java.util.Set<K> getKeys();
@@ -96,53 +96,53 @@
   }
 
   public final class ComposeKt {
-    method @androidx.compose.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
+    method @androidx.compose.runtime.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
     method public static inline kotlin.jvm.functions.Function0<kotlin.Unit> orEmpty(kotlin.jvm.functions.Function0<kotlin.Unit>?);
   }
 
   public final class Composer<N> {
-    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
-    method @androidx.compose.InternalComposeApi public void applyChanges();
-    method @androidx.compose.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(Object? value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(char value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(byte value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(short value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(boolean value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(float value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(long value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(double value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(int value);
-    method @androidx.compose.InternalComposeApi public void collectKeySourceInformation();
-    method @androidx.compose.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method @androidx.compose.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
-    method @androidx.compose.ComposeCompilerApi public void emitNode(Object? node);
-    method @androidx.compose.ComposeCompilerApi public void endDefaults();
-    method @androidx.compose.ComposeCompilerApi public void endMovableGroup();
-    method @androidx.compose.ComposeCompilerApi public void endNode();
-    method @androidx.compose.ComposeCompilerApi public void endReplaceableGroup();
-    method @androidx.compose.ComposeCompilerApi public androidx.compose.ScopeUpdateScope? endRestartGroup();
-    method public androidx.compose.Applier<N> getApplier();
+    ctor public Composer(androidx.compose.runtime.SlotTable slotTable, androidx.compose.runtime.Applier<N> applier, androidx.compose.runtime.Recomposer recomposer);
+    method @androidx.compose.runtime.InternalComposeApi public void applyChanges();
+    method @androidx.compose.runtime.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(char value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(byte value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(short value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(boolean value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(float value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(long value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(double value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(int value);
+    method @androidx.compose.runtime.InternalComposeApi public void collectKeySourceInformation();
+    method @androidx.compose.runtime.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method @androidx.compose.runtime.ComposeCompilerApi public void emitNode(Object? node);
+    method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+    method public androidx.compose.runtime.Applier<N> getApplier();
     method public int getCurrentCompoundKeyHash();
     method public boolean getDefaultsInvalid();
     method public boolean getInserting();
-    method public androidx.compose.Recomposer getRecomposer();
+    method public androidx.compose.runtime.Recomposer getRecomposer();
     method public boolean getSkipping();
-    method public androidx.compose.SlotTable getSlotTable();
-    method @androidx.compose.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
-    method @androidx.compose.ComposeCompilerApi public Object? nextSlot();
-    method @androidx.compose.InternalComposeApi public boolean recompose();
-    method @androidx.compose.ComposeCompilerApi public void skipCurrentGroup();
-    method @androidx.compose.ComposeCompilerApi public void skipToGroupEnd();
-    method @androidx.compose.ComposeCompilerApi public void startDefaults();
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startNode();
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public N! useNode();
+    method public androidx.compose.runtime.SlotTable getSlotTable();
+    method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+    method @androidx.compose.runtime.ComposeCompilerApi public Object? nextSlot();
+    method @androidx.compose.runtime.InternalComposeApi public boolean recompose();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public N! useNode();
     property public final int currentCompoundKeyHash;
     property public final boolean defaultsInvalid;
     property public final boolean inserting;
@@ -150,7 +150,7 @@
   }
 
   public final class ComposerKt {
-    method public static androidx.compose.Composer<?> getCurrentComposer();
+    method public static androidx.compose.runtime.Composer<?> getCurrentComposer();
   }
 
   public interface Composition {
@@ -168,14 +168,14 @@
   }
 
   public final class CompositionFrameClockKt {
-    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
-    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
   }
 
   public final class CompositionKt {
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.Composition compositionFor(Object key, androidx.compose.Applier<?> applier, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition compositionFor(Object key, androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
   }
 
   public interface CompositionLifecycleObserver {
@@ -187,18 +187,18 @@
   }
 
   public final class EffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.CompositionReference compositionReference();
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionReference compositionReference();
     method public static kotlin.jvm.functions.Function0<kotlin.Unit> getInvalidate();
-    method @androidx.compose.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
   }
 
   public interface EmbeddingContext {
@@ -210,8 +210,8 @@
   }
 
   public final class EmitKt {
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
   }
 
   public final class ExpectKt {
@@ -221,8 +221,8 @@
   }
 
   public final class FlowAdapterKt {
-    method @androidx.compose.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
-    method @androidx.compose.Composable public static <T extends R, R> androidx.compose.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
   }
 
   public final class FrameManager {
@@ -231,22 +231,22 @@
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
     method @Deprecated public void nextFrame();
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
-    field public static final androidx.compose.FrameManager INSTANCE;
+    field public static final androidx.compose.runtime.FrameManager INSTANCE;
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules that may change frequently " + "and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalComposeApi {
   }
 
   public final class JoinedKeyKt {
-    method @androidx.compose.InternalComposeApi public static boolean isJoinedKey(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyRight(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static boolean isJoinedKey(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyRight(Object? key);
   }
 
-  @androidx.compose.InternalComposeApi public final class KeyInfo {
+  @androidx.compose.runtime.InternalComposeApi public final class KeyInfo {
     method public Object? getDataKey();
     method public int getIndex();
     method public int getKey();
@@ -255,15 +255,15 @@
   }
 
   public final class KeyKt {
-    method @androidx.compose.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
   }
 
   public final class KeySourceInfoKt {
-    method @androidx.compose.InternalComposeApi public static String? keySourceInfoOf(Object key);
-    method @androidx.compose.InternalComposeApi public static void resetSourceInfo();
+    method @androidx.compose.runtime.InternalComposeApi public static String? keySourceInfoOf(Object key);
+    method @androidx.compose.runtime.InternalComposeApi public static void resetSourceInfo();
   }
 
-  @androidx.compose.Stable public interface MutableState<T> extends androidx.compose.State<T> {
+  @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
     method public operator T! component1();
     method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
     method public void setValue(T! p);
@@ -274,22 +274,22 @@
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getNeverEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getReferentiallyEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getStructurallyEqual();
-    method public static inline operator <T> T! getValue(androidx.compose.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-    method public static <T> androidx.compose.MutableState<T> mutableStateOf(T? value, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> referentialEqualityPolicy();
-    method public static inline operator <T> void setValue(androidx.compose.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> state(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, V1> androidx.compose.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, reified V1, reified V2> androidx.compose.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> structuralEqualityPolicy();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+    method public static inline operator <T> T! getValue(androidx.compose.runtime.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+    method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> state(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> androidx.compose.runtime.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, reified V1, reified V2> androidx.compose.runtime.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
   }
 
   @kotlin.annotation.Retention(AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.FILE}) public @interface NoLiveLiterals {
@@ -308,58 +308,58 @@
     method public void removeValue(V value);
   }
 
-  @androidx.compose.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.Ambient<T> {
-    method public final infix androidx.compose.ProvidedValue<T> provides(T? value);
+  @androidx.compose.runtime.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.runtime.Ambient<T> {
+    method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
   }
 
   public final class ProvidedValue<T> {
-    method public androidx.compose.Ambient<T> getAmbient();
+    method public androidx.compose.runtime.Ambient<T> getAmbient();
     method public T! getValue();
   }
 
   public final class Recomposer {
-    ctor public Recomposer(androidx.compose.EmbeddingContext embeddingContext);
+    ctor public Recomposer(androidx.compose.runtime.EmbeddingContext embeddingContext);
     ctor public Recomposer();
     method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
-    method public androidx.compose.EmbeddingContext getEmbeddingContext();
+    method public androidx.compose.runtime.EmbeddingContext getEmbeddingContext();
     method public androidx.compose.runtime.dispatch.MonotonicFrameClock getFrameClock();
     method public boolean hasPendingChanges();
     method public suspend Object? recomposeAndApplyChanges(kotlinx.coroutines.CoroutineScope applyCoroutineScope, long frameCount, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<?> p);
-    method public void setEmbeddingContext(androidx.compose.EmbeddingContext p);
+    method public void setEmbeddingContext(androidx.compose.runtime.EmbeddingContext p);
     property public final androidx.compose.runtime.dispatch.MonotonicFrameClock frameClock;
-    field public static final androidx.compose.Recomposer.Companion Companion;
+    field public static final androidx.compose.runtime.Recomposer.Companion Companion;
   }
 
   public static final class Recomposer.Companion {
-    method @org.jetbrains.annotations.TestOnly public androidx.compose.Recomposer current();
+    method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.Recomposer current();
   }
 
   public final class RecomposerKt {
-    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class RememberKt {
-    method @androidx.compose.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
   }
 
-  @androidx.compose.ComposeCompilerApi public interface ScopeUpdateScope {
-    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
+  @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.runtime.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotReader {
-    ctor public SlotReader(androidx.compose.SlotTable table);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotReader {
+    ctor public SlotReader(androidx.compose.runtime.SlotTable table);
     method public void beginEmpty();
     method public void close();
     method public void endEmpty();
     method public void endGroup();
     method public void endNode();
-    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public java.util.List<androidx.compose.runtime.KeyInfo> extractKeys();
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public int getCurrent();
     method public int getCurrentEnd();
@@ -374,7 +374,7 @@
     method public int getParentLocation();
     method public int getParentNodes();
     method public int getParentSlots();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupEnd(int index);
     method public int groupKey(int index);
     method public int groupSize(int index);
@@ -413,17 +413,17 @@
     ctor public SlotTable(internal Object![] slots);
     ctor public SlotTable();
     method public int getSize();
-    method @androidx.compose.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotReader openReader();
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotWriter openWriter();
-    method @androidx.compose.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
-    method @androidx.compose.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
-    method @androidx.compose.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotReader openReader();
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotWriter openWriter();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotReader,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotWriter,? extends T> block);
     property public final int size;
-    field public static final androidx.compose.SlotTable.Companion Companion;
+    field public static final androidx.compose.runtime.SlotTable.Companion Companion;
   }
 
-  @androidx.compose.InternalComposeApi public static final class SlotTable.Companion {
+  @androidx.compose.runtime.InternalComposeApi public static final class SlotTable.Companion {
     method public Object getEMPTY();
     property public final Object EMPTY;
   }
@@ -431,8 +431,8 @@
   public final class SlotTableKt {
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotWriter {
-    method public androidx.compose.Anchor anchor(int index = current);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotWriter {
+    method public androidx.compose.runtime.Anchor anchor(int index = current);
     method public void beginInsert();
     method public void close();
     method public int endData();
@@ -440,8 +440,8 @@
     method public void endInsert();
     method public int endNode();
     method public void ensureStarted(int location);
-    method public void ensureStarted(androidx.compose.Anchor anchor);
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public void ensureStarted(androidx.compose.runtime.Anchor anchor);
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public boolean getClosed();
     method public int getCurrent();
@@ -449,15 +449,15 @@
     method public int getNodeIndex();
     method public int getParentLocation();
     method public int getParentNodes();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupSize(int index);
     method public java.util.Iterator<java.lang.Object> groupSlots();
     method public boolean isGroup();
     method public boolean isGroup(int index);
     method public boolean isNode();
-    method public java.util.List<androidx.compose.Anchor> moveFrom(androidx.compose.SlotTable table, int location);
+    method public java.util.List<androidx.compose.runtime.Anchor> moveFrom(androidx.compose.runtime.SlotTable table, int location);
     method public void moveGroup(int offset);
-    method public int parentIndex(androidx.compose.Anchor anchor);
+    method public int parentIndex(androidx.compose.runtime.Anchor anchor);
     method public boolean removeGroup();
     method public void set(Object? value);
     method public void setCurrent(int p);
@@ -488,40 +488,40 @@
 
   public interface SnapshotMutationPolicy<T> {
     method public boolean equivalent(T? a, T? b);
-    method @androidx.compose.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
+    method @androidx.compose.runtime.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
   }
 
   @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
   }
 
-  @androidx.compose.Stable public interface State<T> {
+  @androidx.compose.runtime.Stable public interface State<T> {
     method public T! getValue();
     property public abstract T! value;
   }
 
   public final class SuspendingEffectsKt {
-    method public static suspend Object? awaitDispose(androidx.compose.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
-    method @androidx.compose.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
+    method public static suspend Object? awaitDispose(androidx.compose.runtime.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
+    method @androidx.compose.runtime.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
   }
 
   public final class TraceKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+  @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
     method public abstract Class<?>[] types();
   }
 
   public final class Updater<T> {
-    ctor public Updater(androidx.compose.Composer<?> composer, T! node);
-    method public androidx.compose.Composer<?> getComposer();
+    ctor public Updater(androidx.compose.runtime.Composer<?> composer, T! node);
+    method public androidx.compose.runtime.Composer<?> getComposer();
     method public T! getNode();
     method public inline void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
@@ -532,18 +532,18 @@
 
 }
 
-package androidx.compose.collection {
+package androidx.compose.runtime.collection {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for fast access collections and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalCollectionApi {
   }
 
-  @androidx.compose.collection.ExperimentalCollectionApi public final class MutableVector<T> {
+  @androidx.compose.runtime.collection.ExperimentalCollectionApi public final class MutableVector<T> {
     method public boolean add(T? element);
     method public void add(int index, T? element);
     method public boolean addAll(int index, java.util.List<? extends T> elements);
-    method public boolean addAll(int index, androidx.compose.collection.MutableVector<T> elements);
+    method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
     method public inline boolean addAll(java.util.List<? extends T> elements);
-    method public inline boolean addAll(androidx.compose.collection.MutableVector<T> elements);
+    method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean addAll(T![] elements);
     method public boolean addAll(int index, java.util.Collection<? extends T> elements);
     method public boolean addAll(java.util.Collection<? extends T> elements);
@@ -553,8 +553,8 @@
     method public operator boolean contains(T? element);
     method public boolean containsAll(java.util.List<? extends T> elements);
     method public boolean containsAll(java.util.Collection<? extends T> elements);
-    method public boolean containsAll(androidx.compose.collection.MutableVector<T> elements);
-    method public boolean contentEquals(androidx.compose.collection.MutableVector<T> other);
+    method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+    method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
     method public void ensureCapacity(int capacity);
     method public T! first();
     method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
@@ -584,12 +584,12 @@
     method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method public inline <reified R> R![]! map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline <reified R> R![]! mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline operator void plusAssign(T? element);
     method public boolean remove(T? element);
     method public boolean removeAll(java.util.List<? extends T> elements);
-    method public boolean removeAll(androidx.compose.collection.MutableVector<T> elements);
+    method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean removeAll(java.util.Collection<? extends T> elements);
     method public T! removeAt(int index);
     method public void removeRange(int start, int end);
@@ -603,24 +603,24 @@
   }
 
   public final class MutableVectorKt {
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int capacity = 16);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf();
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf(T? elements);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int capacity = 16);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf(T? elements);
   }
 
 }
 
-package androidx.compose.frames {
+package androidx.compose.runtime.frames {
 
-  @Deprecated public abstract class AbstractRecord implements androidx.compose.frames.Record {
+  @Deprecated public abstract class AbstractRecord implements androidx.compose.runtime.frames.Record {
     ctor @Deprecated public AbstractRecord();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public int frameId;
-    property public androidx.compose.frames.Record? next;
+    property public androidx.compose.runtime.frames.Record? next;
   }
 
   public final class Frame {
@@ -631,54 +631,54 @@
   }
 
   @Deprecated public final class FrameAborted extends java.lang.RuntimeException {
-    ctor @Deprecated public FrameAborted(androidx.compose.frames.Frame frame);
-    method @Deprecated public androidx.compose.frames.Frame getFrame();
+    ctor @Deprecated public FrameAborted(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public androidx.compose.runtime.frames.Frame getFrame();
   }
 
   public final class FrameContainersKt {
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf();
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf();
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T? element);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T?... elements);
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf();
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
   }
 
   public final class FrameIdSetKt {
   }
 
   @Deprecated public interface Framed {
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
-    property public abstract androidx.compose.frames.Record firstFrameRecord;
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
+    property public abstract androidx.compose.runtime.frames.Record firstFrameRecord;
   }
 
   public final class FramesKt {
-    method @Deprecated public static void _created(androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method @Deprecated public static void _created(androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _readable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _writable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
     method @Deprecated public static void abort();
-    method @Deprecated public static void abort(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abort(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void abortHandler();
-    method @Deprecated public static void abortHandler(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abortHandler(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commit();
-    method @Deprecated public static void commit(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void commit(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commitHandler();
-    method @Deprecated public static androidx.compose.frames.Frame currentFrame();
+    method @Deprecated public static androidx.compose.runtime.frames.Frame currentFrame();
     method @Deprecated public static boolean getInFrame();
     method @Deprecated public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method @Deprecated public static void open(boolean readOnly = false);
     method @Deprecated public static void open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function2<java.lang.Object,? super java.lang.Boolean,kotlin.Unit>? writeObserver = null);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.frames.Frame,kotlin.Unit> observer);
-    method @Deprecated public static void restore(androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame suspend();
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T readable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.frames.Frame,kotlin.Unit> observer);
+    method @Deprecated public static void restore(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame suspend();
     method @Deprecated public static boolean wasModified(Object value);
-    method @Deprecated public static inline <T extends androidx.compose.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+    method @Deprecated public static inline <T extends androidx.compose.runtime.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed, androidx.compose.runtime.frames.Frame frame);
   }
 
-  @Deprecated public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+  @Deprecated public final class ModelList<T> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
     ctor @Deprecated public ModelList();
     method @Deprecated public boolean add(T? element);
     method @Deprecated public void add(int index, T? element);
@@ -688,7 +688,7 @@
     method @Deprecated public boolean contains(Object? element);
     method @Deprecated public boolean containsAll(java.util.Collection<?> elements);
     method @Deprecated public T! get(int index);
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public int getSize();
     method @Deprecated public int indexOf(Object? element);
     method @Deprecated public boolean isEmpty();
@@ -696,86 +696,86 @@
     method @Deprecated public int lastIndexOf(Object? element);
     method @Deprecated public java.util.ListIterator<T> listIterator();
     method @Deprecated public java.util.ListIterator<T> listIterator(int index);
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public boolean remove(Object? element);
     method @Deprecated public boolean removeAll(java.util.Collection<?> elements);
     method @Deprecated public T! removeAt(int index);
     method @Deprecated public boolean retainAll(java.util.Collection<?> elements);
     method @Deprecated public T! set(int index, T? element);
     method @Deprecated public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public int size;
   }
 
-  @Deprecated public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+  @Deprecated public final class ModelMap<K, V> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
     ctor @Deprecated public ModelMap();
     method @Deprecated public void clear();
     method @Deprecated public boolean containsKey(Object? key);
     method @Deprecated public boolean containsValue(Object? value);
     method @Deprecated public V? get(Object? key);
     method @Deprecated public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public java.util.Set<K> getKeys();
     method @Deprecated public int getSize();
     method @Deprecated public java.util.Collection<V> getValues();
     method @Deprecated public boolean isEmpty();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public V? put(K? key, V? value);
     method @Deprecated public void putAll(java.util.Map<? extends K,? extends V> from);
     method @Deprecated public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
   @Deprecated public interface Record {
-    method @Deprecated public void assign(androidx.compose.frames.Record value);
-    method @Deprecated public androidx.compose.frames.Record create();
+    method @Deprecated public void assign(androidx.compose.runtime.frames.Record value);
+    method @Deprecated public androidx.compose.runtime.frames.Record create();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public abstract int frameId;
-    property public abstract androidx.compose.frames.Record? next;
+    property public abstract androidx.compose.runtime.frames.Record? next;
   }
 
 }
 
-package androidx.compose.internal {
+package androidx.compose.runtime.internal {
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
     ctor public ComposableLambda(int key, boolean tracked, String? sourceInformation);
     method public int getKey();
-    method public operator R! invoke(androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
     method public void update(Object block);
   }
 
   public final class ComposableLambdaKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
     ctor public ComposableLambdaN(int key, boolean tracked, String? sourceInformation, int arity);
     method public int getArity();
     method public int getKey();
@@ -784,82 +784,82 @@
   }
 
   public final class ComposableLambdaNKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
     method public abstract String file();
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
     method public abstract String key();
     method public abstract int offset();
   }
 
   public final class LiveLiteralKt {
-    method @androidx.compose.InternalComposeApi public static <T> androidx.compose.State<T> liveLiteral(String key, T? value);
-    method @androidx.compose.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+    method @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+    method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
   }
 
 }
 
-package androidx.compose.snapshots {
+package androidx.compose.runtime.snapshots {
 
   public final class ListUtilsKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.snapshots.Snapshot {
-    method public androidx.compose.snapshots.SnapshotApplyResult apply();
+  @androidx.compose.runtime.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+    method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
     method public void close$lintWithKotlin();
-    method public java.util.Set<androidx.compose.snapshots.StateObject>? getModified$lintWithKotlin();
+    method public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? getModified$lintWithKotlin();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver$lintWithKotlin();
     method public boolean getReadonly();
-    method public androidx.compose.snapshots.Snapshot getRoot();
+    method public androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver$lintWithKotlin();
     method public boolean hasPendingChanges();
-    method public void nestedActivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
-    method public void nestedDeactivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
+    method public void nestedActivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public void nestedDeactivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void notifyObjectsInitialized$lintWithKotlin();
-    method public void recordModified$lintWithKotlin(androidx.compose.snapshots.StateObject state);
-    method public void setModified(java.util.Set<androidx.compose.snapshots.StateObject>? p);
-    method public androidx.compose.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
-    property public java.util.Set<androidx.compose.snapshots.StateObject>? modified;
+    method public void recordModified$lintWithKotlin(androidx.compose.runtime.snapshots.StateObject state);
+    method public void setModified(java.util.Set<androidx.compose.runtime.snapshots.StateObject>? p);
+    method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+    property public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? modified;
     property public boolean readonly;
-    property public androidx.compose.snapshots.Snapshot root;
+    property public androidx.compose.runtime.snapshots.Snapshot root;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract sealed class Snapshot {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract sealed class Snapshot {
     method public void dispose();
     method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
     method public int getId();
     method public abstract boolean getReadonly();
-    method public abstract androidx.compose.snapshots.Snapshot getRoot();
+    method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public abstract boolean hasPendingChanges();
     method public void setId$lintWithKotlin(int p);
-    method public abstract androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
     property public int id;
     property public abstract boolean readonly;
-    property public abstract androidx.compose.snapshots.Snapshot root;
-    field public static final androidx.compose.snapshots.Snapshot.Companion Companion;
+    property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+    field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
   }
 
   public static final class Snapshot.Companion {
-    method public androidx.compose.snapshots.Snapshot! getCurrent();
+    method public androidx.compose.runtime.snapshots.Snapshot! getCurrent();
     method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public void notifyObjectsInitialized();
+    method @androidx.compose.runtime.ExperimentalComposeApi public void notifyObjectsInitialized();
     method public <T> T! observe(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.InternalComposeApi public int openSnapshotCount();
-    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.snapshots.Snapshot,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public void sendApplyNotifications();
-    property public final androidx.compose.snapshots.Snapshot! current;
+    method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public void sendApplyNotifications();
+    property public final androidx.compose.runtime.snapshots.Snapshot! current;
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
-    ctor public SnapshotApplyConflictException(androidx.compose.snapshots.Snapshot snapshot);
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
+    ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
   }
 
   public abstract sealed class SnapshotApplyResult {
@@ -868,35 +868,35 @@
     property public abstract boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Failure extends androidx.compose.snapshots.SnapshotApplyResult {
-    ctor public SnapshotApplyResult.Failure(androidx.compose.snapshots.Snapshot snapshot);
+  public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+    ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void check();
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
     method public boolean getSucceeded();
     property public boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Success extends androidx.compose.snapshots.SnapshotApplyResult {
+  public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
     method public void check();
     method public boolean getSucceeded();
     property public boolean succeeded;
-    field public static final androidx.compose.snapshots.SnapshotApplyResult.Success INSTANCE;
+    field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
   }
 
   public final class SnapshotIdSetKt {
   }
 
   public final class SnapshotKt {
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public static androidx.compose.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
-    method @androidx.compose.ExperimentalComposeApi public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static androidx.compose.runtime.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
   }
 
-  @androidx.compose.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public boolean add(T? element);
     method public void add(int index, T? element);
@@ -906,7 +906,7 @@
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<?> elements);
     method public T! get(int index);
-    method public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
     method public int getSize();
     method public int indexOf(Object? element);
     method public boolean isEmpty();
@@ -914,7 +914,7 @@
     method public int lastIndexOf(Object? element);
     method public java.util.ListIterator<T> listIterator();
     method public java.util.ListIterator<T> listIterator(int index);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public boolean remove(Object? element);
     method public boolean removeAll(java.util.Collection<?> elements);
     method public T! removeAt(int index);
@@ -922,50 +922,50 @@
     method public boolean retainAll(java.util.Collection<?> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
     property public int size;
   }
 
-  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateListKt {
   }
 
-  @androidx.compose.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateMap();
     method public void clear();
     method public boolean containsKey(Object? key);
     method public boolean containsValue(Object? value);
     method public V? get(Object? key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
     method public java.util.Set<K> getKeys();
     method public int getSize();
     method public java.util.Collection<V> getValues();
     method public boolean isEmpty();
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
-  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateMapKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotStateObserver {
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotStateObserver {
     ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
     method public void clear(Object target);
     method public void dispose();
@@ -974,25 +974,25 @@
     method public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface StateObject {
-    method public androidx.compose.snapshots.StateRecord getFirstStateRecord();
-    method public default androidx.compose.snapshots.StateRecord? mergeRecords(androidx.compose.snapshots.StateRecord previous, androidx.compose.snapshots.StateRecord current, androidx.compose.snapshots.StateRecord applied);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
-    property public abstract androidx.compose.snapshots.StateRecord firstStateRecord;
+  @androidx.compose.runtime.ExperimentalComposeApi public interface StateObject {
+    method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+    method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+    property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract class StateRecord {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class StateRecord {
     ctor public StateRecord();
-    method public abstract void assign(androidx.compose.snapshots.StateRecord value);
-    method public abstract androidx.compose.snapshots.StateRecord create();
+    method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public abstract androidx.compose.runtime.snapshots.StateRecord create();
   }
 
 }
 
-package androidx.compose.tooling {
+package androidx.compose.runtime.tooling {
 
   public final class InspectionTablesKt {
-    method public static androidx.compose.ProvidableAmbient<java.util.Set<androidx.compose.SlotTable>> getInspectionTables();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.util.Set<androidx.compose.runtime.SlotTable>> getInspectionTables();
   }
 
 }
diff --git a/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev16.txt b/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev16.txt
index 24f6a02..f6960e5 100644
--- a/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/compose/compose-runtime/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
-package androidx.compose {
+package androidx.compose.runtime {
 
-  @androidx.compose.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.Applier<T> {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
     ctor public AbstractApplier(T! root);
     method public final void clear();
     method public void down(T? node);
@@ -16,31 +16,31 @@
   }
 
   public final class ActualAndroidKt {
-    method public static androidx.compose.EmbeddingContext EmbeddingContext();
+    method public static androidx.compose.runtime.EmbeddingContext EmbeddingContext();
   }
 
   public final class ActualJvmKt {
   }
 
-  @androidx.compose.Stable public abstract sealed class Ambient<T> {
+  @androidx.compose.runtime.Stable public abstract sealed class Ambient<T> {
     method public final inline T! getCurrent();
     property public final inline T! current;
   }
 
   public final class AmbientKt {
-    method @androidx.compose.Composable public static void Providers(androidx.compose.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static <T> androidx.compose.ProvidableAmbient<T> ambientOf(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
-    method public static <T> androidx.compose.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method @androidx.compose.runtime.Composable public static void Providers(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> ambientOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
   }
 
-  @androidx.compose.InternalComposeApi public final class Anchor {
+  @androidx.compose.runtime.InternalComposeApi public final class Anchor {
     ctor public Anchor(internal int loc);
     method public boolean getValid();
-    method public int location(androidx.compose.SlotTable slots);
+    method public int location(androidx.compose.runtime.SlotTable slots);
     property public final boolean valid;
   }
 
-  public final class AndroidEmbeddingContext implements androidx.compose.EmbeddingContext {
+  public final class AndroidEmbeddingContext implements androidx.compose.runtime.EmbeddingContext {
     ctor public AndroidEmbeddingContext();
     method public void cancelFrameCallback(android.view.Choreographer.FrameCallback callback);
     method public boolean isMainThread();
@@ -49,7 +49,7 @@
     method public void postOnMainThread(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface Applier<N> {
+  @androidx.compose.runtime.ExperimentalComposeApi public interface Applier<N> {
     method public void clear();
     method public void down(N? node);
     method public N! getCurrent();
@@ -68,7 +68,7 @@
     method public kotlinx.collections.immutable.PersistentMap<K,V> component1();
     method public boolean containsKey(Object! key);
     method public boolean containsValue(Object! value);
-    method public androidx.compose.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
+    method public androidx.compose.runtime.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
     method public V? get(Object! key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
     method public java.util.Set<K> getKeys();
@@ -96,53 +96,53 @@
   }
 
   public final class ComposeKt {
-    method @androidx.compose.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
+    method @androidx.compose.runtime.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
     method public static inline kotlin.jvm.functions.Function0<kotlin.Unit> orEmpty(kotlin.jvm.functions.Function0<kotlin.Unit>?);
   }
 
   public final class Composer<N> {
-    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
-    method @androidx.compose.InternalComposeApi public void applyChanges();
-    method @androidx.compose.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(Object? value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(char value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(byte value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(short value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(boolean value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(float value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(long value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(double value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(int value);
-    method @androidx.compose.InternalComposeApi public void collectKeySourceInformation();
-    method @androidx.compose.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method @androidx.compose.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
-    method @androidx.compose.ComposeCompilerApi public void emitNode(Object? node);
-    method @androidx.compose.ComposeCompilerApi public void endDefaults();
-    method @androidx.compose.ComposeCompilerApi public void endMovableGroup();
-    method @androidx.compose.ComposeCompilerApi public void endNode();
-    method @androidx.compose.ComposeCompilerApi public void endReplaceableGroup();
-    method @androidx.compose.ComposeCompilerApi public androidx.compose.ScopeUpdateScope? endRestartGroup();
-    method public androidx.compose.Applier<N> getApplier();
+    ctor public Composer(androidx.compose.runtime.SlotTable slotTable, androidx.compose.runtime.Applier<N> applier, androidx.compose.runtime.Recomposer recomposer);
+    method @androidx.compose.runtime.InternalComposeApi public void applyChanges();
+    method @androidx.compose.runtime.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(char value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(byte value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(short value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(boolean value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(float value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(long value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(double value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(int value);
+    method @androidx.compose.runtime.InternalComposeApi public void collectKeySourceInformation();
+    method @androidx.compose.runtime.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method @androidx.compose.runtime.ComposeCompilerApi public void emitNode(Object? node);
+    method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+    method public androidx.compose.runtime.Applier<N> getApplier();
     method public int getCurrentCompoundKeyHash();
     method public boolean getDefaultsInvalid();
     method public boolean getInserting();
-    method public androidx.compose.Recomposer getRecomposer();
+    method public androidx.compose.runtime.Recomposer getRecomposer();
     method public boolean getSkipping();
-    method public androidx.compose.SlotTable getSlotTable();
-    method @androidx.compose.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
-    method @androidx.compose.ComposeCompilerApi public Object? nextSlot();
-    method @androidx.compose.InternalComposeApi public boolean recompose();
-    method @androidx.compose.ComposeCompilerApi public void skipCurrentGroup();
-    method @androidx.compose.ComposeCompilerApi public void skipToGroupEnd();
-    method @androidx.compose.ComposeCompilerApi public void startDefaults();
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startNode();
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public N! useNode();
+    method public androidx.compose.runtime.SlotTable getSlotTable();
+    method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+    method @androidx.compose.runtime.ComposeCompilerApi public Object? nextSlot();
+    method @androidx.compose.runtime.InternalComposeApi public boolean recompose();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public N! useNode();
     property public final int currentCompoundKeyHash;
     property public final boolean defaultsInvalid;
     property public final boolean inserting;
@@ -150,7 +150,7 @@
   }
 
   public final class ComposerKt {
-    method public static androidx.compose.Composer<?> getCurrentComposer();
+    method public static androidx.compose.runtime.Composer<?> getCurrentComposer();
   }
 
   public interface Composition {
@@ -168,14 +168,14 @@
   }
 
   public final class CompositionFrameClockKt {
-    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
-    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
   }
 
   public final class CompositionKt {
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.Composition compositionFor(Object key, androidx.compose.Applier<?> applier, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition compositionFor(Object key, androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
   }
 
   public interface CompositionLifecycleObserver {
@@ -187,18 +187,18 @@
   }
 
   public final class EffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.CompositionReference compositionReference();
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionReference compositionReference();
     method public static kotlin.jvm.functions.Function0<kotlin.Unit> getInvalidate();
-    method @androidx.compose.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
   }
 
   public interface EmbeddingContext {
@@ -210,8 +210,8 @@
   }
 
   public final class EmitKt {
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
   }
 
   public final class ExpectKt {
@@ -221,8 +221,8 @@
   }
 
   public final class FlowAdapterKt {
-    method @androidx.compose.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
-    method @androidx.compose.Composable public static <T extends R, R> androidx.compose.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
   }
 
   public final class FrameManager {
@@ -231,22 +231,22 @@
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
     method @Deprecated public void nextFrame();
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
-    field public static final androidx.compose.FrameManager INSTANCE;
+    field public static final androidx.compose.runtime.FrameManager INSTANCE;
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules that may change frequently " + "and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalComposeApi {
   }
 
   public final class JoinedKeyKt {
-    method @androidx.compose.InternalComposeApi public static boolean isJoinedKey(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyRight(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static boolean isJoinedKey(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyRight(Object? key);
   }
 
-  @androidx.compose.InternalComposeApi public final class KeyInfo {
+  @androidx.compose.runtime.InternalComposeApi public final class KeyInfo {
     method public Object? getDataKey();
     method public int getIndex();
     method public int getKey();
@@ -255,15 +255,15 @@
   }
 
   public final class KeyKt {
-    method @androidx.compose.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
   }
 
   public final class KeySourceInfoKt {
-    method @androidx.compose.InternalComposeApi public static String? keySourceInfoOf(Object key);
-    method @androidx.compose.InternalComposeApi public static void resetSourceInfo();
+    method @androidx.compose.runtime.InternalComposeApi public static String? keySourceInfoOf(Object key);
+    method @androidx.compose.runtime.InternalComposeApi public static void resetSourceInfo();
   }
 
-  @androidx.compose.Stable public interface MutableState<T> extends androidx.compose.State<T> {
+  @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
     method public operator T! component1();
     method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
     method public void setValue(T! p);
@@ -274,22 +274,22 @@
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getNeverEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getReferentiallyEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getStructurallyEqual();
-    method public static inline operator <T> T! getValue(androidx.compose.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-    method public static <T> androidx.compose.MutableState<T> mutableStateOf(T? value, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> referentialEqualityPolicy();
-    method public static inline operator <T> void setValue(androidx.compose.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> state(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, V1> androidx.compose.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, reified V1, reified V2> androidx.compose.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> structuralEqualityPolicy();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+    method public static inline operator <T> T! getValue(androidx.compose.runtime.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+    method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> state(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> androidx.compose.runtime.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, reified V1, reified V2> androidx.compose.runtime.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
   }
 
   @kotlin.annotation.Retention(AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.FILE}) public @interface NoLiveLiterals {
@@ -308,58 +308,58 @@
     method public void removeValue(V value);
   }
 
-  @androidx.compose.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.Ambient<T> {
-    method public final infix androidx.compose.ProvidedValue<T> provides(T? value);
+  @androidx.compose.runtime.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.runtime.Ambient<T> {
+    method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
   }
 
   public final class ProvidedValue<T> {
-    method public androidx.compose.Ambient<T> getAmbient();
+    method public androidx.compose.runtime.Ambient<T> getAmbient();
     method public T! getValue();
   }
 
   public final class Recomposer {
-    ctor public Recomposer(androidx.compose.EmbeddingContext embeddingContext);
+    ctor public Recomposer(androidx.compose.runtime.EmbeddingContext embeddingContext);
     ctor public Recomposer();
     method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
-    method public androidx.compose.EmbeddingContext getEmbeddingContext();
+    method public androidx.compose.runtime.EmbeddingContext getEmbeddingContext();
     method public androidx.compose.runtime.dispatch.MonotonicFrameClock getFrameClock();
     method public boolean hasPendingChanges();
     method public suspend Object? recomposeAndApplyChanges(kotlinx.coroutines.CoroutineScope applyCoroutineScope, long frameCount, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<?> p);
-    method public void setEmbeddingContext(androidx.compose.EmbeddingContext p);
+    method public void setEmbeddingContext(androidx.compose.runtime.EmbeddingContext p);
     property public final androidx.compose.runtime.dispatch.MonotonicFrameClock frameClock;
-    field public static final androidx.compose.Recomposer.Companion Companion;
+    field public static final androidx.compose.runtime.Recomposer.Companion Companion;
   }
 
   public static final class Recomposer.Companion {
-    method @org.jetbrains.annotations.TestOnly public androidx.compose.Recomposer current();
+    method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.Recomposer current();
   }
 
   public final class RecomposerKt {
-    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class RememberKt {
-    method @androidx.compose.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
   }
 
-  @androidx.compose.ComposeCompilerApi public interface ScopeUpdateScope {
-    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
+  @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.runtime.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotReader {
-    ctor public SlotReader(androidx.compose.SlotTable table);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotReader {
+    ctor public SlotReader(androidx.compose.runtime.SlotTable table);
     method public void beginEmpty();
     method public void close();
     method public void endEmpty();
     method public void endGroup();
     method public void endNode();
-    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public java.util.List<androidx.compose.runtime.KeyInfo> extractKeys();
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public int getCurrent();
     method public int getCurrentEnd();
@@ -374,7 +374,7 @@
     method public int getParentLocation();
     method public int getParentNodes();
     method public int getParentSlots();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupEnd(int index);
     method public int groupKey(int index);
     method public int groupSize(int index);
@@ -413,17 +413,17 @@
     ctor public SlotTable(internal Object![] slots);
     ctor public SlotTable();
     method public int getSize();
-    method @androidx.compose.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotReader openReader();
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotWriter openWriter();
-    method @androidx.compose.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
-    method @androidx.compose.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
-    method @androidx.compose.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotReader openReader();
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotWriter openWriter();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotReader,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotWriter,? extends T> block);
     property public final int size;
-    field public static final androidx.compose.SlotTable.Companion Companion;
+    field public static final androidx.compose.runtime.SlotTable.Companion Companion;
   }
 
-  @androidx.compose.InternalComposeApi public static final class SlotTable.Companion {
+  @androidx.compose.runtime.InternalComposeApi public static final class SlotTable.Companion {
     method public Object getEMPTY();
     property public final Object EMPTY;
   }
@@ -431,8 +431,8 @@
   public final class SlotTableKt {
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotWriter {
-    method public androidx.compose.Anchor anchor(int index = current);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotWriter {
+    method public androidx.compose.runtime.Anchor anchor(int index = current);
     method public void beginInsert();
     method public void close();
     method public int endData();
@@ -440,8 +440,8 @@
     method public void endInsert();
     method public int endNode();
     method public void ensureStarted(int location);
-    method public void ensureStarted(androidx.compose.Anchor anchor);
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public void ensureStarted(androidx.compose.runtime.Anchor anchor);
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public boolean getClosed();
     method public int getCurrent();
@@ -449,15 +449,15 @@
     method public int getNodeIndex();
     method public int getParentLocation();
     method public int getParentNodes();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupSize(int index);
     method public java.util.Iterator<java.lang.Object> groupSlots();
     method public boolean isGroup();
     method public boolean isGroup(int index);
     method public boolean isNode();
-    method public java.util.List<androidx.compose.Anchor> moveFrom(androidx.compose.SlotTable table, int location);
+    method public java.util.List<androidx.compose.runtime.Anchor> moveFrom(androidx.compose.runtime.SlotTable table, int location);
     method public void moveGroup(int offset);
-    method public int parentIndex(androidx.compose.Anchor anchor);
+    method public int parentIndex(androidx.compose.runtime.Anchor anchor);
     method public boolean removeGroup();
     method public void set(Object? value);
     method public void setCurrent(int p);
@@ -488,40 +488,40 @@
 
   public interface SnapshotMutationPolicy<T> {
     method public boolean equivalent(T? a, T? b);
-    method @androidx.compose.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
+    method @androidx.compose.runtime.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
   }
 
   @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
   }
 
-  @androidx.compose.Stable public interface State<T> {
+  @androidx.compose.runtime.Stable public interface State<T> {
     method public T! getValue();
     property public abstract T! value;
   }
 
   public final class SuspendingEffectsKt {
-    method public static suspend Object? awaitDispose(androidx.compose.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
-    method @androidx.compose.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
+    method public static suspend Object? awaitDispose(androidx.compose.runtime.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
+    method @androidx.compose.runtime.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
   }
 
   public final class TraceKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+  @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
     method public abstract Class<?>[] types();
   }
 
   public final class Updater<T> {
-    ctor public Updater(androidx.compose.Composer<?> composer, T! node);
-    method public androidx.compose.Composer<?> getComposer();
+    ctor public Updater(androidx.compose.runtime.Composer<?> composer, T! node);
+    method public androidx.compose.runtime.Composer<?> getComposer();
     method public T! getNode();
     method public inline void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
@@ -532,18 +532,18 @@
 
 }
 
-package androidx.compose.collection {
+package androidx.compose.runtime.collection {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for fast access collections and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalCollectionApi {
   }
 
-  @androidx.compose.collection.ExperimentalCollectionApi public final class MutableVector<T> {
+  @androidx.compose.runtime.collection.ExperimentalCollectionApi public final class MutableVector<T> {
     method public boolean add(T? element);
     method public void add(int index, T? element);
     method public boolean addAll(int index, java.util.List<? extends T> elements);
-    method public boolean addAll(int index, androidx.compose.collection.MutableVector<T> elements);
+    method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
     method public inline boolean addAll(java.util.List<? extends T> elements);
-    method public inline boolean addAll(androidx.compose.collection.MutableVector<T> elements);
+    method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean addAll(T![] elements);
     method public boolean addAll(int index, java.util.Collection<? extends T> elements);
     method public boolean addAll(java.util.Collection<? extends T> elements);
@@ -553,8 +553,8 @@
     method public operator boolean contains(T? element);
     method public boolean containsAll(java.util.List<? extends T> elements);
     method public boolean containsAll(java.util.Collection<? extends T> elements);
-    method public boolean containsAll(androidx.compose.collection.MutableVector<T> elements);
-    method public boolean contentEquals(androidx.compose.collection.MutableVector<T> other);
+    method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+    method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
     method public void ensureCapacity(int capacity);
     method public T! first();
     method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
@@ -584,12 +584,12 @@
     method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method public inline <reified R> R![]! map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline <reified R> R![]! mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline operator void plusAssign(T? element);
     method public boolean remove(T? element);
     method public boolean removeAll(java.util.List<? extends T> elements);
-    method public boolean removeAll(androidx.compose.collection.MutableVector<T> elements);
+    method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean removeAll(java.util.Collection<? extends T> elements);
     method public T! removeAt(int index);
     method public void removeRange(int start, int end);
@@ -603,24 +603,24 @@
   }
 
   public final class MutableVectorKt {
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int capacity = 16);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf();
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf(T? elements);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int capacity = 16);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf(T? elements);
   }
 
 }
 
-package androidx.compose.frames {
+package androidx.compose.runtime.frames {
 
-  @Deprecated public abstract class AbstractRecord implements androidx.compose.frames.Record {
+  @Deprecated public abstract class AbstractRecord implements androidx.compose.runtime.frames.Record {
     ctor @Deprecated public AbstractRecord();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public int frameId;
-    property public androidx.compose.frames.Record? next;
+    property public androidx.compose.runtime.frames.Record? next;
   }
 
   public final class Frame {
@@ -631,54 +631,54 @@
   }
 
   @Deprecated public final class FrameAborted extends java.lang.RuntimeException {
-    ctor @Deprecated public FrameAborted(androidx.compose.frames.Frame frame);
-    method @Deprecated public androidx.compose.frames.Frame getFrame();
+    ctor @Deprecated public FrameAborted(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public androidx.compose.runtime.frames.Frame getFrame();
   }
 
   public final class FrameContainersKt {
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf();
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf();
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T? element);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T?... elements);
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf();
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
   }
 
   public final class FrameIdSetKt {
   }
 
   @Deprecated public interface Framed {
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
-    property public abstract androidx.compose.frames.Record firstFrameRecord;
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
+    property public abstract androidx.compose.runtime.frames.Record firstFrameRecord;
   }
 
   public final class FramesKt {
-    method @Deprecated public static void _created(androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method @Deprecated public static void _created(androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _readable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _writable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
     method @Deprecated public static void abort();
-    method @Deprecated public static void abort(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abort(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void abortHandler();
-    method @Deprecated public static void abortHandler(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abortHandler(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commit();
-    method @Deprecated public static void commit(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void commit(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commitHandler();
-    method @Deprecated public static androidx.compose.frames.Frame currentFrame();
+    method @Deprecated public static androidx.compose.runtime.frames.Frame currentFrame();
     method @Deprecated public static boolean getInFrame();
     method @Deprecated public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method @Deprecated public static void open(boolean readOnly = false);
     method @Deprecated public static void open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function2<java.lang.Object,? super java.lang.Boolean,kotlin.Unit>? writeObserver = null);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.frames.Frame,kotlin.Unit> observer);
-    method @Deprecated public static void restore(androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame suspend();
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T readable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.frames.Frame,kotlin.Unit> observer);
+    method @Deprecated public static void restore(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame suspend();
     method @Deprecated public static boolean wasModified(Object value);
-    method @Deprecated public static inline <T extends androidx.compose.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+    method @Deprecated public static inline <T extends androidx.compose.runtime.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed, androidx.compose.runtime.frames.Frame frame);
   }
 
-  @Deprecated public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+  @Deprecated public final class ModelList<T> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
     ctor @Deprecated public ModelList();
     method @Deprecated public boolean add(T? element);
     method @Deprecated public void add(int index, T? element);
@@ -688,7 +688,7 @@
     method @Deprecated public boolean contains(Object? element);
     method @Deprecated public boolean containsAll(java.util.Collection<?> elements);
     method @Deprecated public T! get(int index);
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public int getSize();
     method @Deprecated public int indexOf(Object? element);
     method @Deprecated public boolean isEmpty();
@@ -696,86 +696,86 @@
     method @Deprecated public int lastIndexOf(Object? element);
     method @Deprecated public java.util.ListIterator<T> listIterator();
     method @Deprecated public java.util.ListIterator<T> listIterator(int index);
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public boolean remove(Object? element);
     method @Deprecated public boolean removeAll(java.util.Collection<?> elements);
     method @Deprecated public T! removeAt(int index);
     method @Deprecated public boolean retainAll(java.util.Collection<?> elements);
     method @Deprecated public T! set(int index, T? element);
     method @Deprecated public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public int size;
   }
 
-  @Deprecated public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+  @Deprecated public final class ModelMap<K, V> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
     ctor @Deprecated public ModelMap();
     method @Deprecated public void clear();
     method @Deprecated public boolean containsKey(Object? key);
     method @Deprecated public boolean containsValue(Object? value);
     method @Deprecated public V? get(Object? key);
     method @Deprecated public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public java.util.Set<K> getKeys();
     method @Deprecated public int getSize();
     method @Deprecated public java.util.Collection<V> getValues();
     method @Deprecated public boolean isEmpty();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public V? put(K? key, V? value);
     method @Deprecated public void putAll(java.util.Map<? extends K,? extends V> from);
     method @Deprecated public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
   @Deprecated public interface Record {
-    method @Deprecated public void assign(androidx.compose.frames.Record value);
-    method @Deprecated public androidx.compose.frames.Record create();
+    method @Deprecated public void assign(androidx.compose.runtime.frames.Record value);
+    method @Deprecated public androidx.compose.runtime.frames.Record create();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public abstract int frameId;
-    property public abstract androidx.compose.frames.Record? next;
+    property public abstract androidx.compose.runtime.frames.Record? next;
   }
 
 }
 
-package androidx.compose.internal {
+package androidx.compose.runtime.internal {
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
     ctor public ComposableLambda(int key, boolean tracked, String? sourceInformation);
     method public int getKey();
-    method public operator R! invoke(androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
     method public void update(Object block);
   }
 
   public final class ComposableLambdaKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
     ctor public ComposableLambdaN(int key, boolean tracked, String? sourceInformation, int arity);
     method public int getArity();
     method public int getKey();
@@ -784,82 +784,82 @@
   }
 
   public final class ComposableLambdaNKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
     method public abstract String file();
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
     method public abstract String key();
     method public abstract int offset();
   }
 
   public final class LiveLiteralKt {
-    method @androidx.compose.InternalComposeApi public static <T> androidx.compose.State<T> liveLiteral(String key, T? value);
-    method @androidx.compose.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+    method @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+    method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
   }
 
 }
 
-package androidx.compose.snapshots {
+package androidx.compose.runtime.snapshots {
 
   public final class ListUtilsKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.snapshots.Snapshot {
-    method public androidx.compose.snapshots.SnapshotApplyResult apply();
+  @androidx.compose.runtime.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+    method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
     method public void close$lintWithKotlin();
-    method public java.util.Set<androidx.compose.snapshots.StateObject>? getModified$lintWithKotlin();
+    method public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? getModified$lintWithKotlin();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver$lintWithKotlin();
     method public boolean getReadonly();
-    method public androidx.compose.snapshots.Snapshot getRoot();
+    method public androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver$lintWithKotlin();
     method public boolean hasPendingChanges();
-    method public void nestedActivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
-    method public void nestedDeactivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
+    method public void nestedActivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public void nestedDeactivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void notifyObjectsInitialized$lintWithKotlin();
-    method public void recordModified$lintWithKotlin(androidx.compose.snapshots.StateObject state);
-    method public void setModified(java.util.Set<androidx.compose.snapshots.StateObject>? p);
-    method public androidx.compose.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
-    property public java.util.Set<androidx.compose.snapshots.StateObject>? modified;
+    method public void recordModified$lintWithKotlin(androidx.compose.runtime.snapshots.StateObject state);
+    method public void setModified(java.util.Set<androidx.compose.runtime.snapshots.StateObject>? p);
+    method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+    property public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? modified;
     property public boolean readonly;
-    property public androidx.compose.snapshots.Snapshot root;
+    property public androidx.compose.runtime.snapshots.Snapshot root;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract sealed class Snapshot {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract sealed class Snapshot {
     method public void dispose();
     method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
     method public int getId();
     method public abstract boolean getReadonly();
-    method public abstract androidx.compose.snapshots.Snapshot getRoot();
+    method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public abstract boolean hasPendingChanges();
     method public void setId$lintWithKotlin(int p);
-    method public abstract androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
     property public int id;
     property public abstract boolean readonly;
-    property public abstract androidx.compose.snapshots.Snapshot root;
-    field public static final androidx.compose.snapshots.Snapshot.Companion Companion;
+    property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+    field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
   }
 
   public static final class Snapshot.Companion {
-    method public androidx.compose.snapshots.Snapshot! getCurrent();
+    method public androidx.compose.runtime.snapshots.Snapshot! getCurrent();
     method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public void notifyObjectsInitialized();
+    method @androidx.compose.runtime.ExperimentalComposeApi public void notifyObjectsInitialized();
     method public <T> T! observe(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.InternalComposeApi public int openSnapshotCount();
-    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.snapshots.Snapshot,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public void sendApplyNotifications();
-    property public final androidx.compose.snapshots.Snapshot! current;
+    method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public void sendApplyNotifications();
+    property public final androidx.compose.runtime.snapshots.Snapshot! current;
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
-    ctor public SnapshotApplyConflictException(androidx.compose.snapshots.Snapshot snapshot);
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
+    ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
   }
 
   public abstract sealed class SnapshotApplyResult {
@@ -868,35 +868,35 @@
     property public abstract boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Failure extends androidx.compose.snapshots.SnapshotApplyResult {
-    ctor public SnapshotApplyResult.Failure(androidx.compose.snapshots.Snapshot snapshot);
+  public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+    ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void check();
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
     method public boolean getSucceeded();
     property public boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Success extends androidx.compose.snapshots.SnapshotApplyResult {
+  public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
     method public void check();
     method public boolean getSucceeded();
     property public boolean succeeded;
-    field public static final androidx.compose.snapshots.SnapshotApplyResult.Success INSTANCE;
+    field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
   }
 
   public final class SnapshotIdSetKt {
   }
 
   public final class SnapshotKt {
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public static androidx.compose.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
-    method @androidx.compose.ExperimentalComposeApi public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static androidx.compose.runtime.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
   }
 
-  @androidx.compose.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public boolean add(T? element);
     method public void add(int index, T? element);
@@ -906,7 +906,7 @@
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<?> elements);
     method public T! get(int index);
-    method public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
     method public int getSize();
     method public int indexOf(Object? element);
     method public boolean isEmpty();
@@ -914,7 +914,7 @@
     method public int lastIndexOf(Object? element);
     method public java.util.ListIterator<T> listIterator();
     method public java.util.ListIterator<T> listIterator(int index);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public boolean remove(Object? element);
     method public boolean removeAll(java.util.Collection<?> elements);
     method public T! removeAt(int index);
@@ -922,50 +922,50 @@
     method public boolean retainAll(java.util.Collection<?> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
     property public int size;
   }
 
-  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateListKt {
   }
 
-  @androidx.compose.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateMap();
     method public void clear();
     method public boolean containsKey(Object? key);
     method public boolean containsValue(Object? value);
     method public V? get(Object? key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
     method public java.util.Set<K> getKeys();
     method public int getSize();
     method public java.util.Collection<V> getValues();
     method public boolean isEmpty();
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
-  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateMapKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotStateObserver {
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotStateObserver {
     ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
     method public void clear(Object target);
     method public void dispose();
@@ -974,25 +974,25 @@
     method public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface StateObject {
-    method public androidx.compose.snapshots.StateRecord getFirstStateRecord();
-    method public default androidx.compose.snapshots.StateRecord? mergeRecords(androidx.compose.snapshots.StateRecord previous, androidx.compose.snapshots.StateRecord current, androidx.compose.snapshots.StateRecord applied);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
-    property public abstract androidx.compose.snapshots.StateRecord firstStateRecord;
+  @androidx.compose.runtime.ExperimentalComposeApi public interface StateObject {
+    method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+    method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+    property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract class StateRecord {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class StateRecord {
     ctor public StateRecord();
-    method public abstract void assign(androidx.compose.snapshots.StateRecord value);
-    method public abstract androidx.compose.snapshots.StateRecord create();
+    method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public abstract androidx.compose.runtime.snapshots.StateRecord create();
   }
 
 }
 
-package androidx.compose.tooling {
+package androidx.compose.runtime.tooling {
 
   public final class InspectionTablesKt {
-    method public static androidx.compose.ProvidableAmbient<java.util.Set<androidx.compose.SlotTable>> getInspectionTables();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.util.Set<androidx.compose.runtime.SlotTable>> getInspectionTables();
   }
 
 }
diff --git a/compose/compose-runtime/api/public_plus_experimental_current.txt b/compose/compose-runtime/api/public_plus_experimental_current.txt
index 24f6a02..f6960e5 100644
--- a/compose/compose-runtime/api/public_plus_experimental_current.txt
+++ b/compose/compose-runtime/api/public_plus_experimental_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
-package androidx.compose {
+package androidx.compose.runtime {
 
-  @androidx.compose.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.Applier<T> {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
     ctor public AbstractApplier(T! root);
     method public final void clear();
     method public void down(T? node);
@@ -16,31 +16,31 @@
   }
 
   public final class ActualAndroidKt {
-    method public static androidx.compose.EmbeddingContext EmbeddingContext();
+    method public static androidx.compose.runtime.EmbeddingContext EmbeddingContext();
   }
 
   public final class ActualJvmKt {
   }
 
-  @androidx.compose.Stable public abstract sealed class Ambient<T> {
+  @androidx.compose.runtime.Stable public abstract sealed class Ambient<T> {
     method public final inline T! getCurrent();
     property public final inline T! current;
   }
 
   public final class AmbientKt {
-    method @androidx.compose.Composable public static void Providers(androidx.compose.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static <T> androidx.compose.ProvidableAmbient<T> ambientOf(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
-    method public static <T> androidx.compose.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method @androidx.compose.runtime.Composable public static void Providers(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> ambientOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
   }
 
-  @androidx.compose.InternalComposeApi public final class Anchor {
+  @androidx.compose.runtime.InternalComposeApi public final class Anchor {
     ctor public Anchor(internal int loc);
     method public boolean getValid();
-    method public int location(androidx.compose.SlotTable slots);
+    method public int location(androidx.compose.runtime.SlotTable slots);
     property public final boolean valid;
   }
 
-  public final class AndroidEmbeddingContext implements androidx.compose.EmbeddingContext {
+  public final class AndroidEmbeddingContext implements androidx.compose.runtime.EmbeddingContext {
     ctor public AndroidEmbeddingContext();
     method public void cancelFrameCallback(android.view.Choreographer.FrameCallback callback);
     method public boolean isMainThread();
@@ -49,7 +49,7 @@
     method public void postOnMainThread(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface Applier<N> {
+  @androidx.compose.runtime.ExperimentalComposeApi public interface Applier<N> {
     method public void clear();
     method public void down(N? node);
     method public N! getCurrent();
@@ -68,7 +68,7 @@
     method public kotlinx.collections.immutable.PersistentMap<K,V> component1();
     method public boolean containsKey(Object! key);
     method public boolean containsValue(Object! value);
-    method public androidx.compose.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
+    method public androidx.compose.runtime.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
     method public V? get(Object! key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
     method public java.util.Set<K> getKeys();
@@ -96,53 +96,53 @@
   }
 
   public final class ComposeKt {
-    method @androidx.compose.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
+    method @androidx.compose.runtime.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
     method public static inline kotlin.jvm.functions.Function0<kotlin.Unit> orEmpty(kotlin.jvm.functions.Function0<kotlin.Unit>?);
   }
 
   public final class Composer<N> {
-    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
-    method @androidx.compose.InternalComposeApi public void applyChanges();
-    method @androidx.compose.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(Object? value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(char value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(byte value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(short value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(boolean value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(float value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(long value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(double value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(int value);
-    method @androidx.compose.InternalComposeApi public void collectKeySourceInformation();
-    method @androidx.compose.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method @androidx.compose.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
-    method @androidx.compose.ComposeCompilerApi public void emitNode(Object? node);
-    method @androidx.compose.ComposeCompilerApi public void endDefaults();
-    method @androidx.compose.ComposeCompilerApi public void endMovableGroup();
-    method @androidx.compose.ComposeCompilerApi public void endNode();
-    method @androidx.compose.ComposeCompilerApi public void endReplaceableGroup();
-    method @androidx.compose.ComposeCompilerApi public androidx.compose.ScopeUpdateScope? endRestartGroup();
-    method public androidx.compose.Applier<N> getApplier();
+    ctor public Composer(androidx.compose.runtime.SlotTable slotTable, androidx.compose.runtime.Applier<N> applier, androidx.compose.runtime.Recomposer recomposer);
+    method @androidx.compose.runtime.InternalComposeApi public void applyChanges();
+    method @androidx.compose.runtime.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(char value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(byte value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(short value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(boolean value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(float value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(long value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(double value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(int value);
+    method @androidx.compose.runtime.InternalComposeApi public void collectKeySourceInformation();
+    method @androidx.compose.runtime.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method @androidx.compose.runtime.ComposeCompilerApi public void emitNode(Object? node);
+    method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+    method public androidx.compose.runtime.Applier<N> getApplier();
     method public int getCurrentCompoundKeyHash();
     method public boolean getDefaultsInvalid();
     method public boolean getInserting();
-    method public androidx.compose.Recomposer getRecomposer();
+    method public androidx.compose.runtime.Recomposer getRecomposer();
     method public boolean getSkipping();
-    method public androidx.compose.SlotTable getSlotTable();
-    method @androidx.compose.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
-    method @androidx.compose.ComposeCompilerApi public Object? nextSlot();
-    method @androidx.compose.InternalComposeApi public boolean recompose();
-    method @androidx.compose.ComposeCompilerApi public void skipCurrentGroup();
-    method @androidx.compose.ComposeCompilerApi public void skipToGroupEnd();
-    method @androidx.compose.ComposeCompilerApi public void startDefaults();
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startNode();
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public N! useNode();
+    method public androidx.compose.runtime.SlotTable getSlotTable();
+    method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+    method @androidx.compose.runtime.ComposeCompilerApi public Object? nextSlot();
+    method @androidx.compose.runtime.InternalComposeApi public boolean recompose();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public N! useNode();
     property public final int currentCompoundKeyHash;
     property public final boolean defaultsInvalid;
     property public final boolean inserting;
@@ -150,7 +150,7 @@
   }
 
   public final class ComposerKt {
-    method public static androidx.compose.Composer<?> getCurrentComposer();
+    method public static androidx.compose.runtime.Composer<?> getCurrentComposer();
   }
 
   public interface Composition {
@@ -168,14 +168,14 @@
   }
 
   public final class CompositionFrameClockKt {
-    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
-    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
   }
 
   public final class CompositionKt {
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.Composition compositionFor(Object key, androidx.compose.Applier<?> applier, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition compositionFor(Object key, androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
   }
 
   public interface CompositionLifecycleObserver {
@@ -187,18 +187,18 @@
   }
 
   public final class EffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.CompositionReference compositionReference();
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionReference compositionReference();
     method public static kotlin.jvm.functions.Function0<kotlin.Unit> getInvalidate();
-    method @androidx.compose.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
   }
 
   public interface EmbeddingContext {
@@ -210,8 +210,8 @@
   }
 
   public final class EmitKt {
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
   }
 
   public final class ExpectKt {
@@ -221,8 +221,8 @@
   }
 
   public final class FlowAdapterKt {
-    method @androidx.compose.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
-    method @androidx.compose.Composable public static <T extends R, R> androidx.compose.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
   }
 
   public final class FrameManager {
@@ -231,22 +231,22 @@
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
     method @Deprecated public void nextFrame();
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
-    field public static final androidx.compose.FrameManager INSTANCE;
+    field public static final androidx.compose.runtime.FrameManager INSTANCE;
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules that may change frequently " + "and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalComposeApi {
   }
 
   public final class JoinedKeyKt {
-    method @androidx.compose.InternalComposeApi public static boolean isJoinedKey(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyRight(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static boolean isJoinedKey(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyRight(Object? key);
   }
 
-  @androidx.compose.InternalComposeApi public final class KeyInfo {
+  @androidx.compose.runtime.InternalComposeApi public final class KeyInfo {
     method public Object? getDataKey();
     method public int getIndex();
     method public int getKey();
@@ -255,15 +255,15 @@
   }
 
   public final class KeyKt {
-    method @androidx.compose.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
   }
 
   public final class KeySourceInfoKt {
-    method @androidx.compose.InternalComposeApi public static String? keySourceInfoOf(Object key);
-    method @androidx.compose.InternalComposeApi public static void resetSourceInfo();
+    method @androidx.compose.runtime.InternalComposeApi public static String? keySourceInfoOf(Object key);
+    method @androidx.compose.runtime.InternalComposeApi public static void resetSourceInfo();
   }
 
-  @androidx.compose.Stable public interface MutableState<T> extends androidx.compose.State<T> {
+  @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
     method public operator T! component1();
     method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
     method public void setValue(T! p);
@@ -274,22 +274,22 @@
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getNeverEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getReferentiallyEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getStructurallyEqual();
-    method public static inline operator <T> T! getValue(androidx.compose.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-    method public static <T> androidx.compose.MutableState<T> mutableStateOf(T? value, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> referentialEqualityPolicy();
-    method public static inline operator <T> void setValue(androidx.compose.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> state(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, V1> androidx.compose.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, reified V1, reified V2> androidx.compose.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> structuralEqualityPolicy();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+    method public static inline operator <T> T! getValue(androidx.compose.runtime.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+    method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> state(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> androidx.compose.runtime.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, reified V1, reified V2> androidx.compose.runtime.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
   }
 
   @kotlin.annotation.Retention(AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.FILE}) public @interface NoLiveLiterals {
@@ -308,58 +308,58 @@
     method public void removeValue(V value);
   }
 
-  @androidx.compose.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.Ambient<T> {
-    method public final infix androidx.compose.ProvidedValue<T> provides(T? value);
+  @androidx.compose.runtime.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.runtime.Ambient<T> {
+    method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
   }
 
   public final class ProvidedValue<T> {
-    method public androidx.compose.Ambient<T> getAmbient();
+    method public androidx.compose.runtime.Ambient<T> getAmbient();
     method public T! getValue();
   }
 
   public final class Recomposer {
-    ctor public Recomposer(androidx.compose.EmbeddingContext embeddingContext);
+    ctor public Recomposer(androidx.compose.runtime.EmbeddingContext embeddingContext);
     ctor public Recomposer();
     method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
-    method public androidx.compose.EmbeddingContext getEmbeddingContext();
+    method public androidx.compose.runtime.EmbeddingContext getEmbeddingContext();
     method public androidx.compose.runtime.dispatch.MonotonicFrameClock getFrameClock();
     method public boolean hasPendingChanges();
     method public suspend Object? recomposeAndApplyChanges(kotlinx.coroutines.CoroutineScope applyCoroutineScope, long frameCount, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<?> p);
-    method public void setEmbeddingContext(androidx.compose.EmbeddingContext p);
+    method public void setEmbeddingContext(androidx.compose.runtime.EmbeddingContext p);
     property public final androidx.compose.runtime.dispatch.MonotonicFrameClock frameClock;
-    field public static final androidx.compose.Recomposer.Companion Companion;
+    field public static final androidx.compose.runtime.Recomposer.Companion Companion;
   }
 
   public static final class Recomposer.Companion {
-    method @org.jetbrains.annotations.TestOnly public androidx.compose.Recomposer current();
+    method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.Recomposer current();
   }
 
   public final class RecomposerKt {
-    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class RememberKt {
-    method @androidx.compose.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
   }
 
-  @androidx.compose.ComposeCompilerApi public interface ScopeUpdateScope {
-    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
+  @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.runtime.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotReader {
-    ctor public SlotReader(androidx.compose.SlotTable table);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotReader {
+    ctor public SlotReader(androidx.compose.runtime.SlotTable table);
     method public void beginEmpty();
     method public void close();
     method public void endEmpty();
     method public void endGroup();
     method public void endNode();
-    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public java.util.List<androidx.compose.runtime.KeyInfo> extractKeys();
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public int getCurrent();
     method public int getCurrentEnd();
@@ -374,7 +374,7 @@
     method public int getParentLocation();
     method public int getParentNodes();
     method public int getParentSlots();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupEnd(int index);
     method public int groupKey(int index);
     method public int groupSize(int index);
@@ -413,17 +413,17 @@
     ctor public SlotTable(internal Object![] slots);
     ctor public SlotTable();
     method public int getSize();
-    method @androidx.compose.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotReader openReader();
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotWriter openWriter();
-    method @androidx.compose.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
-    method @androidx.compose.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
-    method @androidx.compose.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotReader openReader();
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotWriter openWriter();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotReader,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotWriter,? extends T> block);
     property public final int size;
-    field public static final androidx.compose.SlotTable.Companion Companion;
+    field public static final androidx.compose.runtime.SlotTable.Companion Companion;
   }
 
-  @androidx.compose.InternalComposeApi public static final class SlotTable.Companion {
+  @androidx.compose.runtime.InternalComposeApi public static final class SlotTable.Companion {
     method public Object getEMPTY();
     property public final Object EMPTY;
   }
@@ -431,8 +431,8 @@
   public final class SlotTableKt {
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotWriter {
-    method public androidx.compose.Anchor anchor(int index = current);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotWriter {
+    method public androidx.compose.runtime.Anchor anchor(int index = current);
     method public void beginInsert();
     method public void close();
     method public int endData();
@@ -440,8 +440,8 @@
     method public void endInsert();
     method public int endNode();
     method public void ensureStarted(int location);
-    method public void ensureStarted(androidx.compose.Anchor anchor);
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public void ensureStarted(androidx.compose.runtime.Anchor anchor);
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public boolean getClosed();
     method public int getCurrent();
@@ -449,15 +449,15 @@
     method public int getNodeIndex();
     method public int getParentLocation();
     method public int getParentNodes();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupSize(int index);
     method public java.util.Iterator<java.lang.Object> groupSlots();
     method public boolean isGroup();
     method public boolean isGroup(int index);
     method public boolean isNode();
-    method public java.util.List<androidx.compose.Anchor> moveFrom(androidx.compose.SlotTable table, int location);
+    method public java.util.List<androidx.compose.runtime.Anchor> moveFrom(androidx.compose.runtime.SlotTable table, int location);
     method public void moveGroup(int offset);
-    method public int parentIndex(androidx.compose.Anchor anchor);
+    method public int parentIndex(androidx.compose.runtime.Anchor anchor);
     method public boolean removeGroup();
     method public void set(Object? value);
     method public void setCurrent(int p);
@@ -488,40 +488,40 @@
 
   public interface SnapshotMutationPolicy<T> {
     method public boolean equivalent(T? a, T? b);
-    method @androidx.compose.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
+    method @androidx.compose.runtime.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
   }
 
   @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
   }
 
-  @androidx.compose.Stable public interface State<T> {
+  @androidx.compose.runtime.Stable public interface State<T> {
     method public T! getValue();
     property public abstract T! value;
   }
 
   public final class SuspendingEffectsKt {
-    method public static suspend Object? awaitDispose(androidx.compose.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
-    method @androidx.compose.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
+    method public static suspend Object? awaitDispose(androidx.compose.runtime.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
+    method @androidx.compose.runtime.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
   }
 
   public final class TraceKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+  @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
     method public abstract Class<?>[] types();
   }
 
   public final class Updater<T> {
-    ctor public Updater(androidx.compose.Composer<?> composer, T! node);
-    method public androidx.compose.Composer<?> getComposer();
+    ctor public Updater(androidx.compose.runtime.Composer<?> composer, T! node);
+    method public androidx.compose.runtime.Composer<?> getComposer();
     method public T! getNode();
     method public inline void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
@@ -532,18 +532,18 @@
 
 }
 
-package androidx.compose.collection {
+package androidx.compose.runtime.collection {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for fast access collections and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalCollectionApi {
   }
 
-  @androidx.compose.collection.ExperimentalCollectionApi public final class MutableVector<T> {
+  @androidx.compose.runtime.collection.ExperimentalCollectionApi public final class MutableVector<T> {
     method public boolean add(T? element);
     method public void add(int index, T? element);
     method public boolean addAll(int index, java.util.List<? extends T> elements);
-    method public boolean addAll(int index, androidx.compose.collection.MutableVector<T> elements);
+    method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
     method public inline boolean addAll(java.util.List<? extends T> elements);
-    method public inline boolean addAll(androidx.compose.collection.MutableVector<T> elements);
+    method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean addAll(T![] elements);
     method public boolean addAll(int index, java.util.Collection<? extends T> elements);
     method public boolean addAll(java.util.Collection<? extends T> elements);
@@ -553,8 +553,8 @@
     method public operator boolean contains(T? element);
     method public boolean containsAll(java.util.List<? extends T> elements);
     method public boolean containsAll(java.util.Collection<? extends T> elements);
-    method public boolean containsAll(androidx.compose.collection.MutableVector<T> elements);
-    method public boolean contentEquals(androidx.compose.collection.MutableVector<T> other);
+    method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+    method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
     method public void ensureCapacity(int capacity);
     method public T! first();
     method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
@@ -584,12 +584,12 @@
     method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method public inline <reified R> R![]! map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline <reified R> R![]! mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline operator void plusAssign(T? element);
     method public boolean remove(T? element);
     method public boolean removeAll(java.util.List<? extends T> elements);
-    method public boolean removeAll(androidx.compose.collection.MutableVector<T> elements);
+    method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean removeAll(java.util.Collection<? extends T> elements);
     method public T! removeAt(int index);
     method public void removeRange(int start, int end);
@@ -603,24 +603,24 @@
   }
 
   public final class MutableVectorKt {
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int capacity = 16);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf();
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf(T? elements);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int capacity = 16);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf(T? elements);
   }
 
 }
 
-package androidx.compose.frames {
+package androidx.compose.runtime.frames {
 
-  @Deprecated public abstract class AbstractRecord implements androidx.compose.frames.Record {
+  @Deprecated public abstract class AbstractRecord implements androidx.compose.runtime.frames.Record {
     ctor @Deprecated public AbstractRecord();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public int frameId;
-    property public androidx.compose.frames.Record? next;
+    property public androidx.compose.runtime.frames.Record? next;
   }
 
   public final class Frame {
@@ -631,54 +631,54 @@
   }
 
   @Deprecated public final class FrameAborted extends java.lang.RuntimeException {
-    ctor @Deprecated public FrameAborted(androidx.compose.frames.Frame frame);
-    method @Deprecated public androidx.compose.frames.Frame getFrame();
+    ctor @Deprecated public FrameAborted(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public androidx.compose.runtime.frames.Frame getFrame();
   }
 
   public final class FrameContainersKt {
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf();
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf();
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T? element);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T?... elements);
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf();
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
   }
 
   public final class FrameIdSetKt {
   }
 
   @Deprecated public interface Framed {
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
-    property public abstract androidx.compose.frames.Record firstFrameRecord;
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
+    property public abstract androidx.compose.runtime.frames.Record firstFrameRecord;
   }
 
   public final class FramesKt {
-    method @Deprecated public static void _created(androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method @Deprecated public static void _created(androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _readable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _writable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
     method @Deprecated public static void abort();
-    method @Deprecated public static void abort(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abort(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void abortHandler();
-    method @Deprecated public static void abortHandler(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abortHandler(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commit();
-    method @Deprecated public static void commit(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void commit(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commitHandler();
-    method @Deprecated public static androidx.compose.frames.Frame currentFrame();
+    method @Deprecated public static androidx.compose.runtime.frames.Frame currentFrame();
     method @Deprecated public static boolean getInFrame();
     method @Deprecated public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method @Deprecated public static void open(boolean readOnly = false);
     method @Deprecated public static void open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function2<java.lang.Object,? super java.lang.Boolean,kotlin.Unit>? writeObserver = null);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.frames.Frame,kotlin.Unit> observer);
-    method @Deprecated public static void restore(androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame suspend();
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T readable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.frames.Frame,kotlin.Unit> observer);
+    method @Deprecated public static void restore(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame suspend();
     method @Deprecated public static boolean wasModified(Object value);
-    method @Deprecated public static inline <T extends androidx.compose.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+    method @Deprecated public static inline <T extends androidx.compose.runtime.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed, androidx.compose.runtime.frames.Frame frame);
   }
 
-  @Deprecated public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+  @Deprecated public final class ModelList<T> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
     ctor @Deprecated public ModelList();
     method @Deprecated public boolean add(T? element);
     method @Deprecated public void add(int index, T? element);
@@ -688,7 +688,7 @@
     method @Deprecated public boolean contains(Object? element);
     method @Deprecated public boolean containsAll(java.util.Collection<?> elements);
     method @Deprecated public T! get(int index);
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public int getSize();
     method @Deprecated public int indexOf(Object? element);
     method @Deprecated public boolean isEmpty();
@@ -696,86 +696,86 @@
     method @Deprecated public int lastIndexOf(Object? element);
     method @Deprecated public java.util.ListIterator<T> listIterator();
     method @Deprecated public java.util.ListIterator<T> listIterator(int index);
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public boolean remove(Object? element);
     method @Deprecated public boolean removeAll(java.util.Collection<?> elements);
     method @Deprecated public T! removeAt(int index);
     method @Deprecated public boolean retainAll(java.util.Collection<?> elements);
     method @Deprecated public T! set(int index, T? element);
     method @Deprecated public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public int size;
   }
 
-  @Deprecated public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+  @Deprecated public final class ModelMap<K, V> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
     ctor @Deprecated public ModelMap();
     method @Deprecated public void clear();
     method @Deprecated public boolean containsKey(Object? key);
     method @Deprecated public boolean containsValue(Object? value);
     method @Deprecated public V? get(Object? key);
     method @Deprecated public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public java.util.Set<K> getKeys();
     method @Deprecated public int getSize();
     method @Deprecated public java.util.Collection<V> getValues();
     method @Deprecated public boolean isEmpty();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public V? put(K? key, V? value);
     method @Deprecated public void putAll(java.util.Map<? extends K,? extends V> from);
     method @Deprecated public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
   @Deprecated public interface Record {
-    method @Deprecated public void assign(androidx.compose.frames.Record value);
-    method @Deprecated public androidx.compose.frames.Record create();
+    method @Deprecated public void assign(androidx.compose.runtime.frames.Record value);
+    method @Deprecated public androidx.compose.runtime.frames.Record create();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public abstract int frameId;
-    property public abstract androidx.compose.frames.Record? next;
+    property public abstract androidx.compose.runtime.frames.Record? next;
   }
 
 }
 
-package androidx.compose.internal {
+package androidx.compose.runtime.internal {
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
     ctor public ComposableLambda(int key, boolean tracked, String? sourceInformation);
     method public int getKey();
-    method public operator R! invoke(androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
     method public void update(Object block);
   }
 
   public final class ComposableLambdaKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
     ctor public ComposableLambdaN(int key, boolean tracked, String? sourceInformation, int arity);
     method public int getArity();
     method public int getKey();
@@ -784,82 +784,82 @@
   }
 
   public final class ComposableLambdaNKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
     method public abstract String file();
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
     method public abstract String key();
     method public abstract int offset();
   }
 
   public final class LiveLiteralKt {
-    method @androidx.compose.InternalComposeApi public static <T> androidx.compose.State<T> liveLiteral(String key, T? value);
-    method @androidx.compose.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+    method @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+    method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
   }
 
 }
 
-package androidx.compose.snapshots {
+package androidx.compose.runtime.snapshots {
 
   public final class ListUtilsKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.snapshots.Snapshot {
-    method public androidx.compose.snapshots.SnapshotApplyResult apply();
+  @androidx.compose.runtime.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+    method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
     method public void close$lintWithKotlin();
-    method public java.util.Set<androidx.compose.snapshots.StateObject>? getModified$lintWithKotlin();
+    method public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? getModified$lintWithKotlin();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver$lintWithKotlin();
     method public boolean getReadonly();
-    method public androidx.compose.snapshots.Snapshot getRoot();
+    method public androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver$lintWithKotlin();
     method public boolean hasPendingChanges();
-    method public void nestedActivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
-    method public void nestedDeactivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
+    method public void nestedActivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public void nestedDeactivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void notifyObjectsInitialized$lintWithKotlin();
-    method public void recordModified$lintWithKotlin(androidx.compose.snapshots.StateObject state);
-    method public void setModified(java.util.Set<androidx.compose.snapshots.StateObject>? p);
-    method public androidx.compose.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
-    property public java.util.Set<androidx.compose.snapshots.StateObject>? modified;
+    method public void recordModified$lintWithKotlin(androidx.compose.runtime.snapshots.StateObject state);
+    method public void setModified(java.util.Set<androidx.compose.runtime.snapshots.StateObject>? p);
+    method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+    property public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? modified;
     property public boolean readonly;
-    property public androidx.compose.snapshots.Snapshot root;
+    property public androidx.compose.runtime.snapshots.Snapshot root;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract sealed class Snapshot {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract sealed class Snapshot {
     method public void dispose();
     method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
     method public int getId();
     method public abstract boolean getReadonly();
-    method public abstract androidx.compose.snapshots.Snapshot getRoot();
+    method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public abstract boolean hasPendingChanges();
     method public void setId$lintWithKotlin(int p);
-    method public abstract androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
     property public int id;
     property public abstract boolean readonly;
-    property public abstract androidx.compose.snapshots.Snapshot root;
-    field public static final androidx.compose.snapshots.Snapshot.Companion Companion;
+    property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+    field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
   }
 
   public static final class Snapshot.Companion {
-    method public androidx.compose.snapshots.Snapshot! getCurrent();
+    method public androidx.compose.runtime.snapshots.Snapshot! getCurrent();
     method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public void notifyObjectsInitialized();
+    method @androidx.compose.runtime.ExperimentalComposeApi public void notifyObjectsInitialized();
     method public <T> T! observe(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.InternalComposeApi public int openSnapshotCount();
-    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.snapshots.Snapshot,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public void sendApplyNotifications();
-    property public final androidx.compose.snapshots.Snapshot! current;
+    method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public void sendApplyNotifications();
+    property public final androidx.compose.runtime.snapshots.Snapshot! current;
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
-    ctor public SnapshotApplyConflictException(androidx.compose.snapshots.Snapshot snapshot);
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
+    ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
   }
 
   public abstract sealed class SnapshotApplyResult {
@@ -868,35 +868,35 @@
     property public abstract boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Failure extends androidx.compose.snapshots.SnapshotApplyResult {
-    ctor public SnapshotApplyResult.Failure(androidx.compose.snapshots.Snapshot snapshot);
+  public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+    ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void check();
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
     method public boolean getSucceeded();
     property public boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Success extends androidx.compose.snapshots.SnapshotApplyResult {
+  public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
     method public void check();
     method public boolean getSucceeded();
     property public boolean succeeded;
-    field public static final androidx.compose.snapshots.SnapshotApplyResult.Success INSTANCE;
+    field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
   }
 
   public final class SnapshotIdSetKt {
   }
 
   public final class SnapshotKt {
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public static androidx.compose.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
-    method @androidx.compose.ExperimentalComposeApi public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static androidx.compose.runtime.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
   }
 
-  @androidx.compose.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public boolean add(T? element);
     method public void add(int index, T? element);
@@ -906,7 +906,7 @@
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<?> elements);
     method public T! get(int index);
-    method public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
     method public int getSize();
     method public int indexOf(Object? element);
     method public boolean isEmpty();
@@ -914,7 +914,7 @@
     method public int lastIndexOf(Object? element);
     method public java.util.ListIterator<T> listIterator();
     method public java.util.ListIterator<T> listIterator(int index);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public boolean remove(Object? element);
     method public boolean removeAll(java.util.Collection<?> elements);
     method public T! removeAt(int index);
@@ -922,50 +922,50 @@
     method public boolean retainAll(java.util.Collection<?> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
     property public int size;
   }
 
-  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateListKt {
   }
 
-  @androidx.compose.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateMap();
     method public void clear();
     method public boolean containsKey(Object? key);
     method public boolean containsValue(Object? value);
     method public V? get(Object? key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
     method public java.util.Set<K> getKeys();
     method public int getSize();
     method public java.util.Collection<V> getValues();
     method public boolean isEmpty();
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
-  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateMapKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotStateObserver {
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotStateObserver {
     ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
     method public void clear(Object target);
     method public void dispose();
@@ -974,25 +974,25 @@
     method public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface StateObject {
-    method public androidx.compose.snapshots.StateRecord getFirstStateRecord();
-    method public default androidx.compose.snapshots.StateRecord? mergeRecords(androidx.compose.snapshots.StateRecord previous, androidx.compose.snapshots.StateRecord current, androidx.compose.snapshots.StateRecord applied);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
-    property public abstract androidx.compose.snapshots.StateRecord firstStateRecord;
+  @androidx.compose.runtime.ExperimentalComposeApi public interface StateObject {
+    method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+    method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+    property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract class StateRecord {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class StateRecord {
     ctor public StateRecord();
-    method public abstract void assign(androidx.compose.snapshots.StateRecord value);
-    method public abstract androidx.compose.snapshots.StateRecord create();
+    method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public abstract androidx.compose.runtime.snapshots.StateRecord create();
   }
 
 }
 
-package androidx.compose.tooling {
+package androidx.compose.runtime.tooling {
 
   public final class InspectionTablesKt {
-    method public static androidx.compose.ProvidableAmbient<java.util.Set<androidx.compose.SlotTable>> getInspectionTables();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.util.Set<androidx.compose.runtime.SlotTable>> getInspectionTables();
   }
 
 }
diff --git a/compose/compose-runtime/api/restricted_0.1.0-dev16.txt b/compose/compose-runtime/api/restricted_0.1.0-dev16.txt
index 0199d12..876c4e2 100644
--- a/compose/compose-runtime/api/restricted_0.1.0-dev16.txt
+++ b/compose/compose-runtime/api/restricted_0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
-package androidx.compose {
+package androidx.compose.runtime {
 
-  @androidx.compose.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.Applier<T> {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
     ctor public AbstractApplier(T! root);
     method public final void clear();
     method public void down(T? node);
@@ -16,31 +16,31 @@
   }
 
   public final class ActualAndroidKt {
-    method public static androidx.compose.EmbeddingContext EmbeddingContext();
+    method public static androidx.compose.runtime.EmbeddingContext EmbeddingContext();
   }
 
   public final class ActualJvmKt {
   }
 
-  @androidx.compose.Stable public abstract sealed class Ambient<T> {
+  @androidx.compose.runtime.Stable public abstract sealed class Ambient<T> {
     method public final inline T! getCurrent();
     property public final inline T! current;
   }
 
   public final class AmbientKt {
-    method @androidx.compose.Composable public static void Providers(androidx.compose.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static <T> androidx.compose.ProvidableAmbient<T> ambientOf(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
-    method public static <T> androidx.compose.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method @androidx.compose.runtime.Composable public static void Providers(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> ambientOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
   }
 
-  @androidx.compose.InternalComposeApi public final class Anchor {
+  @androidx.compose.runtime.InternalComposeApi public final class Anchor {
     ctor public Anchor(internal int loc);
     method public boolean getValid();
-    method public int location(androidx.compose.SlotTable slots);
+    method public int location(androidx.compose.runtime.SlotTable slots);
     property public final boolean valid;
   }
 
-  public final class AndroidEmbeddingContext implements androidx.compose.EmbeddingContext {
+  public final class AndroidEmbeddingContext implements androidx.compose.runtime.EmbeddingContext {
     ctor public AndroidEmbeddingContext();
     method public void cancelFrameCallback(android.view.Choreographer.FrameCallback callback);
     method public boolean isMainThread();
@@ -49,7 +49,7 @@
     method public void postOnMainThread(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface Applier<N> {
+  @androidx.compose.runtime.ExperimentalComposeApi public interface Applier<N> {
     method public void clear();
     method public void down(N? node);
     method public N! getCurrent();
@@ -68,7 +68,7 @@
     method public kotlinx.collections.immutable.PersistentMap<K,V> component1();
     method public boolean containsKey(Object! key);
     method public boolean containsValue(Object! value);
-    method public androidx.compose.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
+    method public androidx.compose.runtime.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
     method public V? get(Object! key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
     method public java.util.Set<K> getKeys();
@@ -96,55 +96,55 @@
   }
 
   public final class ComposeKt {
-    method @androidx.compose.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
+    method @androidx.compose.runtime.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
     method public static inline kotlin.jvm.functions.Function0<kotlin.Unit> orEmpty(kotlin.jvm.functions.Function0<kotlin.Unit>?);
   }
 
   public final class Composer<N> {
-    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
-    method @androidx.compose.InternalComposeApi public void applyChanges();
-    method @androidx.compose.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(Object? value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(char value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(byte value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(short value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(boolean value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(float value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(long value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(double value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(int value);
-    method @androidx.compose.InternalComposeApi public void collectKeySourceInformation();
-    method @androidx.compose.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method @kotlin.PublishedApi internal <T> T! consume(androidx.compose.Ambient<T> key);
-    method @androidx.compose.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
-    method @androidx.compose.ComposeCompilerApi public void emitNode(Object? node);
-    method @androidx.compose.ComposeCompilerApi public void endDefaults();
-    method @androidx.compose.ComposeCompilerApi public void endMovableGroup();
-    method @androidx.compose.ComposeCompilerApi public void endNode();
-    method @androidx.compose.ComposeCompilerApi public void endReplaceableGroup();
-    method @androidx.compose.ComposeCompilerApi public androidx.compose.ScopeUpdateScope? endRestartGroup();
-    method public androidx.compose.Applier<N> getApplier();
+    ctor public Composer(androidx.compose.runtime.SlotTable slotTable, androidx.compose.runtime.Applier<N> applier, androidx.compose.runtime.Recomposer recomposer);
+    method @androidx.compose.runtime.InternalComposeApi public void applyChanges();
+    method @androidx.compose.runtime.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(char value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(byte value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(short value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(boolean value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(float value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(long value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(double value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(int value);
+    method @androidx.compose.runtime.InternalComposeApi public void collectKeySourceInformation();
+    method @androidx.compose.runtime.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method @kotlin.PublishedApi internal <T> T! consume(androidx.compose.runtime.Ambient<T> key);
+    method @androidx.compose.runtime.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method @androidx.compose.runtime.ComposeCompilerApi public void emitNode(Object? node);
+    method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+    method public androidx.compose.runtime.Applier<N> getApplier();
     method public int getCurrentCompoundKeyHash();
     method public boolean getDefaultsInvalid();
     method public boolean getInserting();
-    method public androidx.compose.Recomposer getRecomposer();
+    method public androidx.compose.runtime.Recomposer getRecomposer();
     method public boolean getSkipping();
-    method public androidx.compose.SlotTable getSlotTable();
-    method @androidx.compose.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
-    method @androidx.compose.ComposeCompilerApi public Object? nextSlot();
-    method @androidx.compose.InternalComposeApi public boolean recompose();
-    method @androidx.compose.ComposeCompilerApi public void skipCurrentGroup();
-    method @androidx.compose.ComposeCompilerApi public void skipToGroupEnd();
-    method @androidx.compose.ComposeCompilerApi public void startDefaults();
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startNode();
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
+    method public androidx.compose.runtime.SlotTable getSlotTable();
+    method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+    method @androidx.compose.runtime.ComposeCompilerApi public Object? nextSlot();
+    method @androidx.compose.runtime.InternalComposeApi public boolean recompose();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
     method @kotlin.PublishedApi internal void updateValue(Object? value);
-    method @androidx.compose.ComposeCompilerApi public N! useNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public N! useNode();
     property public final int currentCompoundKeyHash;
     property public final boolean defaultsInvalid;
     property public final boolean inserting;
@@ -152,18 +152,18 @@
   }
 
   public final class ComposerKt {
-    method public static androidx.compose.Composer<?> getCurrentComposer();
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey ambientMap;
+    method public static androidx.compose.runtime.Composer<?> getCurrentComposer();
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey ambientMap;
     field @kotlin.PublishedApi internal static final int ambientMapKey = 202; // 0xca
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey invocation;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey invocation;
     field @kotlin.PublishedApi internal static final int invocationKey = 200; // 0xc8
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey provider;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey provider;
     field @kotlin.PublishedApi internal static final int providerKey = 201; // 0xc9
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey providerMaps;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey providerMaps;
     field @kotlin.PublishedApi internal static final int providerMapsKey = 204; // 0xcc
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey providerValues;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey providerValues;
     field @kotlin.PublishedApi internal static final int providerValuesKey = 203; // 0xcb
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey reference;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey reference;
     field @kotlin.PublishedApi internal static final int referenceKey = 206; // 0xce
   }
 
@@ -182,14 +182,14 @@
   }
 
   public final class CompositionFrameClockKt {
-    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
-    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
   }
 
   public final class CompositionKt {
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.Composition compositionFor(Object key, androidx.compose.Applier<?> applier, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition compositionFor(Object key, androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
   }
 
   public interface CompositionLifecycleObserver {
@@ -200,24 +200,24 @@
   public abstract class CompositionReference {
   }
 
-  @kotlin.PublishedApi internal final class CompositionScopedCoroutineScopeCanceller implements androidx.compose.CompositionLifecycleObserver {
+  @kotlin.PublishedApi internal final class CompositionScopedCoroutineScopeCanceller implements androidx.compose.runtime.CompositionLifecycleObserver {
     ctor public CompositionScopedCoroutineScopeCanceller(kotlinx.coroutines.CoroutineScope coroutineScope);
     method public kotlinx.coroutines.CoroutineScope getCoroutineScope();
   }
 
   public final class EffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.CompositionReference compositionReference();
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionReference compositionReference();
     method public static kotlin.jvm.functions.Function0<kotlin.Unit> getInvalidate();
-    method @androidx.compose.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
   }
 
   public interface EmbeddingContext {
@@ -229,8 +229,8 @@
   }
 
   public final class EmitKt {
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
     method @kotlin.PublishedApi internal static Void invalidApplier();
   }
 
@@ -241,8 +241,8 @@
   }
 
   public final class FlowAdapterKt {
-    method @androidx.compose.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
-    method @androidx.compose.Composable public static <T extends R, R> androidx.compose.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
   }
 
   public final class FrameManager {
@@ -251,22 +251,22 @@
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
     method @Deprecated public void nextFrame();
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
-    field public static final androidx.compose.FrameManager INSTANCE;
+    field public static final androidx.compose.runtime.FrameManager INSTANCE;
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules that may change frequently " + "and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalComposeApi {
   }
 
   public final class JoinedKeyKt {
-    method @androidx.compose.InternalComposeApi public static boolean isJoinedKey(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyRight(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static boolean isJoinedKey(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyRight(Object? key);
   }
 
-  @androidx.compose.InternalComposeApi public final class KeyInfo {
+  @androidx.compose.runtime.InternalComposeApi public final class KeyInfo {
     method public Object? getDataKey();
     method public int getIndex();
     method public int getKey();
@@ -275,15 +275,15 @@
   }
 
   public final class KeyKt {
-    method @androidx.compose.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
   }
 
   public final class KeySourceInfoKt {
-    method @androidx.compose.InternalComposeApi public static String? keySourceInfoOf(Object key);
-    method @androidx.compose.InternalComposeApi public static void resetSourceInfo();
+    method @androidx.compose.runtime.InternalComposeApi public static String? keySourceInfoOf(Object key);
+    method @androidx.compose.runtime.InternalComposeApi public static void resetSourceInfo();
   }
 
-  @androidx.compose.Stable public interface MutableState<T> extends androidx.compose.State<T> {
+  @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
     method public operator T! component1();
     method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
     method public void setValue(T! p);
@@ -294,22 +294,22 @@
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getNeverEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getReferentiallyEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getStructurallyEqual();
-    method public static inline operator <T> T! getValue(androidx.compose.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-    method public static <T> androidx.compose.MutableState<T> mutableStateOf(T? value, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> referentialEqualityPolicy();
-    method public static inline operator <T> void setValue(androidx.compose.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> state(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, V1> androidx.compose.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, reified V1, reified V2> androidx.compose.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> structuralEqualityPolicy();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+    method public static inline operator <T> T! getValue(androidx.compose.runtime.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+    method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> state(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> androidx.compose.runtime.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, reified V1, reified V2> androidx.compose.runtime.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
   }
 
   @kotlin.annotation.Retention(AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.FILE}) public @interface NoLiveLiterals {
@@ -328,69 +328,69 @@
     method public void removeValue(V value);
   }
 
-  @kotlin.PublishedApi internal final class PostCommitScopeImpl implements android.view.Choreographer.FrameCallback androidx.compose.CommitScope androidx.compose.CompositionLifecycleObserver {
-    ctor public PostCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> onCommit, androidx.compose.EmbeddingContext embeddingContext);
+  @kotlin.PublishedApi internal final class PostCommitScopeImpl implements android.view.Choreographer.FrameCallback androidx.compose.runtime.CommitScope androidx.compose.runtime.CompositionLifecycleObserver {
+    ctor public PostCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> onCommit, androidx.compose.runtime.EmbeddingContext embeddingContext);
     method public void doFrame(long frameTimeNanos);
     method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
   }
 
-  @kotlin.PublishedApi internal final class PreCommitScopeImpl implements androidx.compose.CommitScope androidx.compose.CompositionLifecycleObserver {
-    ctor public PreCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> onCommit);
+  @kotlin.PublishedApi internal final class PreCommitScopeImpl implements androidx.compose.runtime.CommitScope androidx.compose.runtime.CompositionLifecycleObserver {
+    ctor public PreCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> onCommit);
     method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
   }
 
-  @androidx.compose.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.Ambient<T> {
-    method public final infix androidx.compose.ProvidedValue<T> provides(T? value);
+  @androidx.compose.runtime.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.runtime.Ambient<T> {
+    method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
   }
 
   public final class ProvidedValue<T> {
-    method public androidx.compose.Ambient<T> getAmbient();
+    method public androidx.compose.runtime.Ambient<T> getAmbient();
     method public T! getValue();
   }
 
   public final class Recomposer {
-    ctor public Recomposer(androidx.compose.EmbeddingContext embeddingContext);
+    ctor public Recomposer(androidx.compose.runtime.EmbeddingContext embeddingContext);
     ctor public Recomposer();
     method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
-    method public androidx.compose.EmbeddingContext getEmbeddingContext();
+    method public androidx.compose.runtime.EmbeddingContext getEmbeddingContext();
     method public androidx.compose.runtime.dispatch.MonotonicFrameClock getFrameClock();
     method public boolean hasPendingChanges();
     method public suspend Object? recomposeAndApplyChanges(kotlinx.coroutines.CoroutineScope applyCoroutineScope, long frameCount, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<?> p);
-    method public void setEmbeddingContext(androidx.compose.EmbeddingContext p);
+    method public void setEmbeddingContext(androidx.compose.runtime.EmbeddingContext p);
     property public final androidx.compose.runtime.dispatch.MonotonicFrameClock frameClock;
-    field public static final androidx.compose.Recomposer.Companion Companion;
+    field public static final androidx.compose.runtime.Recomposer.Companion Companion;
   }
 
   public static final class Recomposer.Companion {
-    method @org.jetbrains.annotations.TestOnly public androidx.compose.Recomposer current();
+    method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.Recomposer current();
   }
 
   public final class RecomposerKt {
-    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class RememberKt {
-    method @androidx.compose.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
   }
 
-  @androidx.compose.ComposeCompilerApi public interface ScopeUpdateScope {
-    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
+  @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.runtime.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotReader {
-    ctor public SlotReader(androidx.compose.SlotTable table);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotReader {
+    ctor public SlotReader(androidx.compose.runtime.SlotTable table);
     method public void beginEmpty();
     method public void close();
     method public void endEmpty();
     method public void endGroup();
     method public void endNode();
-    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public java.util.List<androidx.compose.runtime.KeyInfo> extractKeys();
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public int getCurrent();
     method public int getCurrentEnd();
@@ -405,7 +405,7 @@
     method public int getParentLocation();
     method public int getParentNodes();
     method public int getParentSlots();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupEnd(int index);
     method public int groupKey(int index);
     method public int groupSize(int index);
@@ -444,17 +444,17 @@
     ctor public SlotTable(internal Object![] slots);
     ctor public SlotTable();
     method public int getSize();
-    method @androidx.compose.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotReader openReader();
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotWriter openWriter();
-    method @androidx.compose.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
-    method @androidx.compose.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
-    method @androidx.compose.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotReader openReader();
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotWriter openWriter();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotReader,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotWriter,? extends T> block);
     property public final int size;
-    field public static final androidx.compose.SlotTable.Companion Companion;
+    field public static final androidx.compose.runtime.SlotTable.Companion Companion;
   }
 
-  @androidx.compose.InternalComposeApi public static final class SlotTable.Companion {
+  @androidx.compose.runtime.InternalComposeApi public static final class SlotTable.Companion {
     method public Object getEMPTY();
     property public final Object EMPTY;
   }
@@ -463,8 +463,8 @@
     field @kotlin.PublishedApi internal static final Object EMPTY;
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotWriter {
-    method public androidx.compose.Anchor anchor(int index = current);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotWriter {
+    method public androidx.compose.runtime.Anchor anchor(int index = current);
     method public void beginInsert();
     method public void close();
     method public int endData();
@@ -472,8 +472,8 @@
     method public void endInsert();
     method public int endNode();
     method public void ensureStarted(int location);
-    method public void ensureStarted(androidx.compose.Anchor anchor);
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public void ensureStarted(androidx.compose.runtime.Anchor anchor);
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public boolean getClosed();
     method public int getCurrent();
@@ -481,15 +481,15 @@
     method public int getNodeIndex();
     method public int getParentLocation();
     method public int getParentNodes();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupSize(int index);
     method public java.util.Iterator<java.lang.Object> groupSlots();
     method public boolean isGroup();
     method public boolean isGroup(int index);
     method public boolean isNode();
-    method public java.util.List<androidx.compose.Anchor> moveFrom(androidx.compose.SlotTable table, int location);
+    method public java.util.List<androidx.compose.runtime.Anchor> moveFrom(androidx.compose.runtime.SlotTable table, int location);
     method public void moveGroup(int offset);
-    method public int parentIndex(androidx.compose.Anchor anchor);
+    method public int parentIndex(androidx.compose.runtime.Anchor anchor);
     method public boolean removeGroup();
     method public void set(Object? value);
     method public void setCurrent(int p);
@@ -520,41 +520,41 @@
 
   public interface SnapshotMutationPolicy<T> {
     method public boolean equivalent(T? a, T? b);
-    method @androidx.compose.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
+    method @androidx.compose.runtime.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
   }
 
   @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
   }
 
-  @androidx.compose.Stable public interface State<T> {
+  @androidx.compose.runtime.Stable public interface State<T> {
     method public T! getValue();
     property public abstract T! value;
   }
 
   public final class SuspendingEffectsKt {
-    method public static suspend Object? awaitDispose(androidx.compose.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
-    method @kotlin.PublishedApi internal static kotlinx.coroutines.CoroutineScope createCompositionCoroutineScope(kotlin.coroutines.CoroutineContext coroutineContext, androidx.compose.Composer<?> composer);
-    method @androidx.compose.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
+    method public static suspend Object? awaitDispose(androidx.compose.runtime.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
+    method @kotlin.PublishedApi internal static kotlinx.coroutines.CoroutineScope createCompositionCoroutineScope(kotlin.coroutines.CoroutineContext coroutineContext, androidx.compose.runtime.Composer<?> composer);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
   }
 
   public final class TraceKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+  @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
     method public abstract Class<?>[] types();
   }
 
   public final class Updater<T> {
-    ctor public Updater(androidx.compose.Composer<?> composer, T! node);
-    method public androidx.compose.Composer<?> getComposer();
+    ctor public Updater(androidx.compose.runtime.Composer<?> composer, T! node);
+    method public androidx.compose.runtime.Composer<?> getComposer();
     method public T! getNode();
     method public inline void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
@@ -565,19 +565,19 @@
 
 }
 
-package androidx.compose.collection {
+package androidx.compose.runtime.collection {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for fast access collections and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalCollectionApi {
   }
 
-  @androidx.compose.collection.ExperimentalCollectionApi public final class MutableVector<T> {
+  @androidx.compose.runtime.collection.ExperimentalCollectionApi public final class MutableVector<T> {
     ctor @kotlin.PublishedApi internal MutableVector(internal T![] content, int size);
     method public boolean add(T? element);
     method public void add(int index, T? element);
     method public boolean addAll(int index, java.util.List<? extends T> elements);
-    method public boolean addAll(int index, androidx.compose.collection.MutableVector<T> elements);
+    method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
     method public inline boolean addAll(java.util.List<? extends T> elements);
-    method public inline boolean addAll(androidx.compose.collection.MutableVector<T> elements);
+    method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean addAll(T![] elements);
     method public boolean addAll(int index, java.util.Collection<? extends T> elements);
     method public boolean addAll(java.util.Collection<? extends T> elements);
@@ -587,8 +587,8 @@
     method public operator boolean contains(T? element);
     method public boolean containsAll(java.util.List<? extends T> elements);
     method public boolean containsAll(java.util.Collection<? extends T> elements);
-    method public boolean containsAll(androidx.compose.collection.MutableVector<T> elements);
-    method public boolean contentEquals(androidx.compose.collection.MutableVector<T> other);
+    method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+    method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
     method public void ensureCapacity(int capacity);
     method public T! first();
     method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
@@ -618,12 +618,12 @@
     method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method public inline <reified R> R![]! map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline <reified R> R![]! mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline operator void plusAssign(T? element);
     method public boolean remove(T? element);
     method public boolean removeAll(java.util.List<? extends T> elements);
-    method public boolean removeAll(androidx.compose.collection.MutableVector<T> elements);
+    method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean removeAll(java.util.Collection<? extends T> elements);
     method public T! removeAt(int index);
     method public void removeRange(int start, int end);
@@ -638,24 +638,24 @@
   }
 
   public final class MutableVectorKt {
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int capacity = 16);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf();
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf(T? elements);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int capacity = 16);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf(T? elements);
   }
 
 }
 
-package androidx.compose.frames {
+package androidx.compose.runtime.frames {
 
-  @Deprecated public abstract class AbstractRecord implements androidx.compose.frames.Record {
+  @Deprecated public abstract class AbstractRecord implements androidx.compose.runtime.frames.Record {
     ctor @Deprecated public AbstractRecord();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public int frameId;
-    property public androidx.compose.frames.Record? next;
+    property public androidx.compose.runtime.frames.Record? next;
   }
 
   public final class Frame {
@@ -666,55 +666,55 @@
   }
 
   @Deprecated public final class FrameAborted extends java.lang.RuntimeException {
-    ctor @Deprecated public FrameAborted(androidx.compose.frames.Frame frame);
-    method @Deprecated public androidx.compose.frames.Frame getFrame();
+    ctor @Deprecated public FrameAborted(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public androidx.compose.runtime.frames.Frame getFrame();
   }
 
   public final class FrameContainersKt {
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf();
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf();
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T? element);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T?... elements);
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf();
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
   }
 
   public final class FrameIdSetKt {
   }
 
   @Deprecated public interface Framed {
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
-    property public abstract androidx.compose.frames.Record firstFrameRecord;
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
+    property public abstract androidx.compose.runtime.frames.Record firstFrameRecord;
   }
 
   public final class FramesKt {
-    method @Deprecated public static void _created(androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method @Deprecated public static void _created(androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _readable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _writable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
     method @Deprecated public static void abort();
-    method @Deprecated public static void abort(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abort(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void abortHandler();
-    method @Deprecated public static void abortHandler(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abortHandler(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commit();
-    method @Deprecated public static void commit(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void commit(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commitHandler();
-    method @kotlin.PublishedApi internal static <T extends androidx.compose.frames.Record> T current(T r, androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame currentFrame();
+    method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.frames.Record> T current(T r, androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame currentFrame();
     method @Deprecated public static boolean getInFrame();
     method @Deprecated public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method @Deprecated public static void open(boolean readOnly = false);
     method @Deprecated public static void open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function2<java.lang.Object,? super java.lang.Boolean,kotlin.Unit>? writeObserver = null);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.frames.Frame,kotlin.Unit> observer);
-    method @Deprecated public static void restore(androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame suspend();
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T readable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.frames.Frame,kotlin.Unit> observer);
+    method @Deprecated public static void restore(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame suspend();
     method @Deprecated public static boolean wasModified(Object value);
-    method @Deprecated public static inline <T extends androidx.compose.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+    method @Deprecated public static inline <T extends androidx.compose.runtime.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed, androidx.compose.runtime.frames.Frame frame);
   }
 
-  @Deprecated public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+  @Deprecated public final class ModelList<T> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
     ctor @Deprecated public ModelList();
     method @Deprecated public boolean add(T? element);
     method @Deprecated public void add(int index, T? element);
@@ -724,7 +724,7 @@
     method @Deprecated public boolean contains(Object? element);
     method @Deprecated public boolean containsAll(java.util.Collection<?> elements);
     method @Deprecated public T! get(int index);
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public int getSize();
     method @Deprecated public int indexOf(Object? element);
     method @Deprecated public boolean isEmpty();
@@ -732,86 +732,86 @@
     method @Deprecated public int lastIndexOf(Object? element);
     method @Deprecated public java.util.ListIterator<T> listIterator();
     method @Deprecated public java.util.ListIterator<T> listIterator(int index);
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public boolean remove(Object? element);
     method @Deprecated public boolean removeAll(java.util.Collection<?> elements);
     method @Deprecated public T! removeAt(int index);
     method @Deprecated public boolean retainAll(java.util.Collection<?> elements);
     method @Deprecated public T! set(int index, T? element);
     method @Deprecated public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public int size;
   }
 
-  @Deprecated public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+  @Deprecated public final class ModelMap<K, V> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
     ctor @Deprecated public ModelMap();
     method @Deprecated public void clear();
     method @Deprecated public boolean containsKey(Object? key);
     method @Deprecated public boolean containsValue(Object? value);
     method @Deprecated public V? get(Object? key);
     method @Deprecated public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public java.util.Set<K> getKeys();
     method @Deprecated public int getSize();
     method @Deprecated public java.util.Collection<V> getValues();
     method @Deprecated public boolean isEmpty();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public V? put(K? key, V? value);
     method @Deprecated public void putAll(java.util.Map<? extends K,? extends V> from);
     method @Deprecated public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
   @Deprecated public interface Record {
-    method @Deprecated public void assign(androidx.compose.frames.Record value);
-    method @Deprecated public androidx.compose.frames.Record create();
+    method @Deprecated public void assign(androidx.compose.runtime.frames.Record value);
+    method @Deprecated public androidx.compose.runtime.frames.Record create();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public abstract int frameId;
-    property public abstract androidx.compose.frames.Record? next;
+    property public abstract androidx.compose.runtime.frames.Record? next;
   }
 
 }
 
-package androidx.compose.internal {
+package androidx.compose.runtime.internal {
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
     ctor public ComposableLambda(int key, boolean tracked, String? sourceInformation);
     method public int getKey();
-    method public operator R! invoke(androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
     method public void update(Object block);
   }
 
   public final class ComposableLambdaKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
     ctor public ComposableLambdaN(int key, boolean tracked, String? sourceInformation, int arity);
     method public int getArity();
     method public int getKey();
@@ -820,86 +820,86 @@
   }
 
   public final class ComposableLambdaNKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
     method public abstract String file();
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
     method public abstract String key();
     method public abstract int offset();
   }
 
   public final class LiveLiteralKt {
-    method @androidx.compose.InternalComposeApi public static <T> androidx.compose.State<T> liveLiteral(String key, T? value);
-    method @androidx.compose.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+    method @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+    method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
   }
 
 }
 
-package androidx.compose.snapshots {
+package androidx.compose.runtime.snapshots {
 
   public final class ListUtilsKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.snapshots.Snapshot {
-    method public androidx.compose.snapshots.SnapshotApplyResult apply();
+  @androidx.compose.runtime.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+    method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
     method public void close$lintWithKotlin();
-    method public java.util.Set<androidx.compose.snapshots.StateObject>? getModified$lintWithKotlin();
+    method public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? getModified$lintWithKotlin();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver$lintWithKotlin();
     method public boolean getReadonly();
-    method public androidx.compose.snapshots.Snapshot getRoot();
+    method public androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver$lintWithKotlin();
     method public boolean hasPendingChanges();
-    method public void nestedActivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
-    method public void nestedDeactivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
+    method public void nestedActivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public void nestedDeactivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void notifyObjectsInitialized$lintWithKotlin();
-    method public void recordModified$lintWithKotlin(androidx.compose.snapshots.StateObject state);
-    method public void setModified(java.util.Set<androidx.compose.snapshots.StateObject>? p);
-    method public androidx.compose.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
-    property public java.util.Set<androidx.compose.snapshots.StateObject>? modified;
+    method public void recordModified$lintWithKotlin(androidx.compose.runtime.snapshots.StateObject state);
+    method public void setModified(java.util.Set<androidx.compose.runtime.snapshots.StateObject>? p);
+    method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+    property public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? modified;
     property public boolean readonly;
-    property public androidx.compose.snapshots.Snapshot root;
+    property public androidx.compose.runtime.snapshots.Snapshot root;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract sealed class Snapshot {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract sealed class Snapshot {
     method public void dispose();
     method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
     method public int getId();
     method public abstract boolean getReadonly();
-    method public abstract androidx.compose.snapshots.Snapshot getRoot();
+    method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public abstract boolean hasPendingChanges();
-    method @kotlin.PublishedApi internal androidx.compose.snapshots.Snapshot? makeCurrent();
-    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.snapshots.Snapshot? snapshot);
+    method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot? makeCurrent();
+    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.runtime.snapshots.Snapshot? snapshot);
     method public void setId$lintWithKotlin(int p);
-    method public abstract androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
     property public int id;
     property public abstract boolean readonly;
-    property public abstract androidx.compose.snapshots.Snapshot root;
-    field public static final androidx.compose.snapshots.Snapshot.Companion Companion;
+    property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+    field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
   }
 
   public static final class Snapshot.Companion {
-    method public androidx.compose.snapshots.Snapshot! getCurrent();
+    method public androidx.compose.runtime.snapshots.Snapshot! getCurrent();
     method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public void notifyObjectsInitialized();
+    method @androidx.compose.runtime.ExperimentalComposeApi public void notifyObjectsInitialized();
     method public <T> T! observe(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.InternalComposeApi public int openSnapshotCount();
-    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.snapshots.Snapshot,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
-    method @kotlin.PublishedApi internal androidx.compose.snapshots.Snapshot? removeCurrent();
-    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.snapshots.Snapshot? previous);
-    method @androidx.compose.ExperimentalComposeApi public void sendApplyNotifications();
-    property public final androidx.compose.snapshots.Snapshot! current;
+    method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+    method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot? removeCurrent();
+    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.runtime.snapshots.Snapshot? previous);
+    method @androidx.compose.runtime.ExperimentalComposeApi public void sendApplyNotifications();
+    property public final androidx.compose.runtime.snapshots.Snapshot! current;
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
-    ctor public SnapshotApplyConflictException(androidx.compose.snapshots.Snapshot snapshot);
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
+    ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
   }
 
   public abstract sealed class SnapshotApplyResult {
@@ -908,40 +908,40 @@
     property public abstract boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Failure extends androidx.compose.snapshots.SnapshotApplyResult {
-    ctor public SnapshotApplyResult.Failure(androidx.compose.snapshots.Snapshot snapshot);
+  public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+    ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void check();
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
     method public boolean getSucceeded();
     property public boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Success extends androidx.compose.snapshots.SnapshotApplyResult {
+  public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
     method public void check();
     method public boolean getSucceeded();
     property public boolean succeeded;
-    field public static final androidx.compose.snapshots.SnapshotApplyResult.Success INSTANCE;
+    field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
   }
 
   public final class SnapshotIdSetKt {
   }
 
   public final class SnapshotKt {
-    method @kotlin.PublishedApi internal static <T extends androidx.compose.snapshots.StateRecord> T current(T r, androidx.compose.snapshots.Snapshot snapshot);
-    method @kotlin.PublishedApi internal static void notifyWrite(androidx.compose.snapshots.Snapshot snapshot, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
+    method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r, androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method @kotlin.PublishedApi internal static void notifyWrite(androidx.compose.runtime.snapshots.Snapshot snapshot, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
     method @kotlin.PublishedApi internal static inline <T> T! sync(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public static androidx.compose.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
-    method @androidx.compose.ExperimentalComposeApi public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method @kotlin.PublishedApi internal static <T extends androidx.compose.snapshots.StateRecord> T writableRecord(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static androidx.compose.runtime.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T writableRecord(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
     field @kotlin.PublishedApi internal static final Object lock;
   }
 
-  @androidx.compose.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public boolean add(T? element);
     method public void add(int index, T? element);
@@ -951,7 +951,7 @@
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<?> elements);
     method public T! get(int index);
-    method public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
     method public int getSize();
     method public int indexOf(Object? element);
     method public boolean isEmpty();
@@ -959,7 +959,7 @@
     method public int lastIndexOf(Object? element);
     method public java.util.ListIterator<T> listIterator();
     method public java.util.ListIterator<T> listIterator(int index);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public boolean remove(Object? element);
     method public boolean removeAll(java.util.Collection<?> elements);
     method public T! removeAt(int index);
@@ -967,50 +967,50 @@
     method public boolean retainAll(java.util.Collection<?> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
     property public int size;
   }
 
-  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateListKt {
   }
 
-  @androidx.compose.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateMap();
     method public void clear();
     method public boolean containsKey(Object? key);
     method public boolean containsValue(Object? value);
     method public V? get(Object? key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
     method public java.util.Set<K> getKeys();
     method public int getSize();
     method public java.util.Collection<V> getValues();
     method public boolean isEmpty();
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
-  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateMapKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotStateObserver {
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotStateObserver {
     ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
     method public void clear(Object target);
     method public void dispose();
@@ -1019,25 +1019,25 @@
     method public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface StateObject {
-    method public androidx.compose.snapshots.StateRecord getFirstStateRecord();
-    method public default androidx.compose.snapshots.StateRecord? mergeRecords(androidx.compose.snapshots.StateRecord previous, androidx.compose.snapshots.StateRecord current, androidx.compose.snapshots.StateRecord applied);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
-    property public abstract androidx.compose.snapshots.StateRecord firstStateRecord;
+  @androidx.compose.runtime.ExperimentalComposeApi public interface StateObject {
+    method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+    method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+    property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract class StateRecord {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class StateRecord {
     ctor public StateRecord();
-    method public abstract void assign(androidx.compose.snapshots.StateRecord value);
-    method public abstract androidx.compose.snapshots.StateRecord create();
+    method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public abstract androidx.compose.runtime.snapshots.StateRecord create();
   }
 
 }
 
-package androidx.compose.tooling {
+package androidx.compose.runtime.tooling {
 
   public final class InspectionTablesKt {
-    method public static androidx.compose.ProvidableAmbient<java.util.Set<androidx.compose.SlotTable>> getInspectionTables();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.util.Set<androidx.compose.runtime.SlotTable>> getInspectionTables();
   }
 
 }
diff --git a/compose/compose-runtime/api/restricted_current.txt b/compose/compose-runtime/api/restricted_current.txt
index 0199d12..876c4e2 100644
--- a/compose/compose-runtime/api/restricted_current.txt
+++ b/compose/compose-runtime/api/restricted_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
-package androidx.compose {
+package androidx.compose.runtime {
 
-  @androidx.compose.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.Applier<T> {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class AbstractApplier<T> implements androidx.compose.runtime.Applier<T> {
     ctor public AbstractApplier(T! root);
     method public final void clear();
     method public void down(T? node);
@@ -16,31 +16,31 @@
   }
 
   public final class ActualAndroidKt {
-    method public static androidx.compose.EmbeddingContext EmbeddingContext();
+    method public static androidx.compose.runtime.EmbeddingContext EmbeddingContext();
   }
 
   public final class ActualJvmKt {
   }
 
-  @androidx.compose.Stable public abstract sealed class Ambient<T> {
+  @androidx.compose.runtime.Stable public abstract sealed class Ambient<T> {
     method public final inline T! getCurrent();
     property public final inline T! current;
   }
 
   public final class AmbientKt {
-    method @androidx.compose.Composable public static void Providers(androidx.compose.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method public static <T> androidx.compose.ProvidableAmbient<T> ambientOf(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
-    method public static <T> androidx.compose.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method @androidx.compose.runtime.Composable public static void Providers(androidx.compose.runtime.ProvidedValue<?>![] values, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> ambientOf(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
+    method public static <T> androidx.compose.runtime.ProvidableAmbient<T> staticAmbientOf(kotlin.jvm.functions.Function0<? extends T>? defaultFactory = null);
   }
 
-  @androidx.compose.InternalComposeApi public final class Anchor {
+  @androidx.compose.runtime.InternalComposeApi public final class Anchor {
     ctor public Anchor(internal int loc);
     method public boolean getValid();
-    method public int location(androidx.compose.SlotTable slots);
+    method public int location(androidx.compose.runtime.SlotTable slots);
     property public final boolean valid;
   }
 
-  public final class AndroidEmbeddingContext implements androidx.compose.EmbeddingContext {
+  public final class AndroidEmbeddingContext implements androidx.compose.runtime.EmbeddingContext {
     ctor public AndroidEmbeddingContext();
     method public void cancelFrameCallback(android.view.Choreographer.FrameCallback callback);
     method public boolean isMainThread();
@@ -49,7 +49,7 @@
     method public void postOnMainThread(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface Applier<N> {
+  @androidx.compose.runtime.ExperimentalComposeApi public interface Applier<N> {
     method public void clear();
     method public void down(N? node);
     method public N! getCurrent();
@@ -68,7 +68,7 @@
     method public kotlinx.collections.immutable.PersistentMap<K,V> component1();
     method public boolean containsKey(Object! key);
     method public boolean containsValue(Object! value);
-    method public androidx.compose.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
+    method public androidx.compose.runtime.BuildableMap<K,V> copy(kotlinx.collections.immutable.PersistentMap<K,? extends V> map);
     method public V? get(Object! key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
     method public java.util.Set<K> getKeys();
@@ -96,55 +96,55 @@
   }
 
   public final class ComposeKt {
-    method @androidx.compose.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
+    method @androidx.compose.runtime.Stable public static kotlin.jvm.functions.Function0<kotlin.Unit> emptyContent();
     method public static inline kotlin.jvm.functions.Function0<kotlin.Unit> orEmpty(kotlin.jvm.functions.Function0<kotlin.Unit>?);
   }
 
   public final class Composer<N> {
-    ctor public Composer(androidx.compose.SlotTable slotTable, androidx.compose.Applier<N> applier, androidx.compose.Recomposer recomposer);
-    method @androidx.compose.InternalComposeApi public void applyChanges();
-    method @androidx.compose.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(Object? value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(char value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(byte value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(short value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(boolean value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(float value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(long value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(double value);
-    method @androidx.compose.ComposeCompilerApi public boolean changed(int value);
-    method @androidx.compose.InternalComposeApi public void collectKeySourceInformation();
-    method @androidx.compose.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
-    method @kotlin.PublishedApi internal <T> T! consume(androidx.compose.Ambient<T> key);
-    method @androidx.compose.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
-    method @androidx.compose.ComposeCompilerApi public void emitNode(Object? node);
-    method @androidx.compose.ComposeCompilerApi public void endDefaults();
-    method @androidx.compose.ComposeCompilerApi public void endMovableGroup();
-    method @androidx.compose.ComposeCompilerApi public void endNode();
-    method @androidx.compose.ComposeCompilerApi public void endReplaceableGroup();
-    method @androidx.compose.ComposeCompilerApi public androidx.compose.ScopeUpdateScope? endRestartGroup();
-    method public androidx.compose.Applier<N> getApplier();
+    ctor public Composer(androidx.compose.runtime.SlotTable slotTable, androidx.compose.runtime.Applier<N> applier, androidx.compose.runtime.Recomposer recomposer);
+    method @androidx.compose.runtime.InternalComposeApi public void applyChanges();
+    method @androidx.compose.runtime.ComposeCompilerApi public inline <T> T! cache(boolean invalid, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(Object? value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(char value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(byte value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(short value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(boolean value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(float value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(long value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(double value);
+    method @androidx.compose.runtime.ComposeCompilerApi public boolean changed(int value);
+    method @androidx.compose.runtime.InternalComposeApi public void collectKeySourceInformation();
+    method @androidx.compose.runtime.InternalComposeApi public void composeRoot(kotlin.jvm.functions.Function0<kotlin.Unit> block);
+    method @kotlin.PublishedApi internal <T> T! consume(androidx.compose.runtime.Ambient<T> key);
+    method @androidx.compose.runtime.ComposeCompilerApi public <T extends N> void createNode(kotlin.jvm.functions.Function0<? extends T> factory);
+    method @androidx.compose.runtime.ComposeCompilerApi public void emitNode(Object? node);
+    method @androidx.compose.runtime.ComposeCompilerApi public void endDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endMovableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void endReplaceableGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public androidx.compose.runtime.ScopeUpdateScope? endRestartGroup();
+    method public androidx.compose.runtime.Applier<N> getApplier();
     method public int getCurrentCompoundKeyHash();
     method public boolean getDefaultsInvalid();
     method public boolean getInserting();
-    method public androidx.compose.Recomposer getRecomposer();
+    method public androidx.compose.runtime.Recomposer getRecomposer();
     method public boolean getSkipping();
-    method public androidx.compose.SlotTable getSlotTable();
-    method @androidx.compose.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
-    method @androidx.compose.ComposeCompilerApi public Object? nextSlot();
-    method @androidx.compose.InternalComposeApi public boolean recompose();
-    method @androidx.compose.ComposeCompilerApi public void skipCurrentGroup();
-    method @androidx.compose.ComposeCompilerApi public void skipToGroupEnd();
-    method @androidx.compose.ComposeCompilerApi public void startDefaults();
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
-    method @androidx.compose.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startNode();
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key);
-    method @androidx.compose.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
+    method public androidx.compose.runtime.SlotTable getSlotTable();
+    method @androidx.compose.runtime.ComposeCompilerApi public Object joinKey(Object? left, Object? right);
+    method @androidx.compose.runtime.ComposeCompilerApi public Object? nextSlot();
+    method @androidx.compose.runtime.InternalComposeApi public boolean recompose();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipCurrentGroup();
+    method @androidx.compose.runtime.ComposeCompilerApi public void skipToGroupEnd();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startDefaults();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startMovableGroup(int key, Object? dataKey, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startReplaceableGroup(int key, String? sourceInformation);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key);
+    method @androidx.compose.runtime.ComposeCompilerApi public void startRestartGroup(int key, String? sourceInformation);
     method @kotlin.PublishedApi internal void updateValue(Object? value);
-    method @androidx.compose.ComposeCompilerApi public N! useNode();
+    method @androidx.compose.runtime.ComposeCompilerApi public N! useNode();
     property public final int currentCompoundKeyHash;
     property public final boolean defaultsInvalid;
     property public final boolean inserting;
@@ -152,18 +152,18 @@
   }
 
   public final class ComposerKt {
-    method public static androidx.compose.Composer<?> getCurrentComposer();
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey ambientMap;
+    method public static androidx.compose.runtime.Composer<?> getCurrentComposer();
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey ambientMap;
     field @kotlin.PublishedApi internal static final int ambientMapKey = 202; // 0xca
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey invocation;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey invocation;
     field @kotlin.PublishedApi internal static final int invocationKey = 200; // 0xc8
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey provider;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey provider;
     field @kotlin.PublishedApi internal static final int providerKey = 201; // 0xc9
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey providerMaps;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey providerMaps;
     field @kotlin.PublishedApi internal static final int providerMapsKey = 204; // 0xcc
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey providerValues;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey providerValues;
     field @kotlin.PublishedApi internal static final int providerValuesKey = 203; // 0xcb
-    field @kotlin.PublishedApi internal static final androidx.compose.OpaqueKey reference;
+    field @kotlin.PublishedApi internal static final androidx.compose.runtime.OpaqueKey reference;
     field @kotlin.PublishedApi internal static final int referenceKey = 206; // 0xce
   }
 
@@ -182,14 +182,14 @@
   }
 
   public final class CompositionFrameClockKt {
-    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
-    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
-    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend inline <R> Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
+    method @Deprecated public static suspend Object? awaitFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend Object? awaitFrameNanos(androidx.compose.runtime.CompositionFrameClock, kotlin.coroutines.Continuation<? super java.lang.Long> p);
+    method @Deprecated public static suspend inline <R> Object? withFrameMillis(androidx.compose.runtime.CompositionFrameClock, kotlin.jvm.functions.Function1<? super java.lang.Long,? extends R> onFrame, kotlin.coroutines.Continuation<? super R> p);
   }
 
   public final class CompositionKt {
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.Composition compositionFor(Object key, androidx.compose.Applier<?> applier, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.Composition compositionFor(Object key, androidx.compose.runtime.Applier<?> applier, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> onCreated = {});
   }
 
   public interface CompositionLifecycleObserver {
@@ -200,24 +200,24 @@
   public abstract class CompositionReference {
   }
 
-  @kotlin.PublishedApi internal final class CompositionScopedCoroutineScopeCanceller implements androidx.compose.CompositionLifecycleObserver {
+  @kotlin.PublishedApi internal final class CompositionScopedCoroutineScopeCanceller implements androidx.compose.runtime.CompositionLifecycleObserver {
     ctor public CompositionScopedCoroutineScopeCanceller(kotlinx.coroutines.CoroutineScope coroutineScope);
     method public kotlinx.coroutines.CoroutineScope getCoroutineScope();
   }
 
   public final class EffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.CompositionReference compositionReference();
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.CompositionReference compositionReference();
     method public static kotlin.jvm.functions.Function0<kotlin.Unit> getInvalidate();
-    method @androidx.compose.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
-    method @androidx.compose.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
-    method @androidx.compose.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onActive(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static inline void onPreCommit(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1> void onPreCommit(V1? v1, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static <V1, V2> void onPreCommit(V1? v1, V2? v2, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
+    method @androidx.compose.runtime.Composable public static void onPreCommit(Object![]? inputs, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> callback);
   }
 
   public interface EmbeddingContext {
@@ -229,8 +229,8 @@
   }
 
   public final class EmitKt {
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update);
-    method @androidx.compose.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static inline <T extends java.lang.Object, reified E extends androidx.compose.runtime.Applier<?>> void emit(kotlin.jvm.functions.Function0<? extends T> ctor, kotlin.jvm.functions.Function1<? super androidx.compose.runtime.Updater<T>,? extends kotlin.Unit> update, kotlin.jvm.functions.Function0<? extends kotlin.Unit> children);
     method @kotlin.PublishedApi internal static Void invalidApplier();
   }
 
@@ -241,8 +241,8 @@
   }
 
   public final class FlowAdapterKt {
-    method @androidx.compose.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
-    method @androidx.compose.Composable public static <T extends R, R> androidx.compose.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable @kotlinx.coroutines.ExperimentalCoroutinesApi public static inline <T> androidx.compose.runtime.State<T> collectAsState(kotlinx.coroutines.flow.StateFlow<? extends T>, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
+    method @androidx.compose.runtime.Composable public static <T extends R, R> androidx.compose.runtime.State<R> collectAsState(kotlinx.coroutines.flow.Flow<? extends T>, R? initial, kotlin.coroutines.CoroutineContext context = Dispatchers.Main);
   }
 
   public final class FrameManager {
@@ -251,22 +251,22 @@
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! isolated(kotlin.jvm.functions.Function0<? extends T> block);
     method @Deprecated public void nextFrame();
     method @Deprecated @org.jetbrains.annotations.TestOnly public <T> T! unframed(kotlin.jvm.functions.Function0<? extends T> block);
-    field public static final androidx.compose.FrameManager INSTANCE;
+    field public static final androidx.compose.runtime.FrameManager INSTANCE;
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets=AnnotationTarget.CLASS) public @interface Immutable {
   }
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is internal API for Compose modules that may change frequently " + "and without warning.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface InternalComposeApi {
   }
 
   public final class JoinedKeyKt {
-    method @androidx.compose.InternalComposeApi public static boolean isJoinedKey(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
-    method @androidx.compose.InternalComposeApi public static Object? joinedKeyRight(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static boolean isJoinedKey(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyLeft(Object? key);
+    method @androidx.compose.runtime.InternalComposeApi public static Object? joinedKeyRight(Object? key);
   }
 
-  @androidx.compose.InternalComposeApi public final class KeyInfo {
+  @androidx.compose.runtime.InternalComposeApi public final class KeyInfo {
     method public Object? getDataKey();
     method public int getIndex();
     method public int getKey();
@@ -275,15 +275,15 @@
   }
 
   public final class KeyKt {
-    method @androidx.compose.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
+    method @androidx.compose.runtime.Composable public static inline <T> T! key(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> block);
   }
 
   public final class KeySourceInfoKt {
-    method @androidx.compose.InternalComposeApi public static String? keySourceInfoOf(Object key);
-    method @androidx.compose.InternalComposeApi public static void resetSourceInfo();
+    method @androidx.compose.runtime.InternalComposeApi public static String? keySourceInfoOf(Object key);
+    method @androidx.compose.runtime.InternalComposeApi public static void resetSourceInfo();
   }
 
-  @androidx.compose.Stable public interface MutableState<T> extends androidx.compose.State<T> {
+  @androidx.compose.runtime.Stable public interface MutableState<T> extends androidx.compose.runtime.State<T> {
     method public operator T! component1();
     method public operator kotlin.jvm.functions.Function1<T,kotlin.Unit> component2();
     method public void setValue(T! p);
@@ -294,22 +294,22 @@
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getNeverEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getReferentiallyEqual();
     method @Deprecated public static kotlin.jvm.functions.Function2<java.lang.Object,java.lang.Object,java.lang.Boolean> getStructurallyEqual();
-    method public static inline operator <T> T! getValue(androidx.compose.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
-    method public static <T> androidx.compose.MutableState<T> mutableStateOf(T? value, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> neverEqualPolicy();
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> referentialEqualityPolicy();
-    method public static inline operator <T> void setValue(androidx.compose.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> state(androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, V1> androidx.compose.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T> androidx.compose.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
-    method @androidx.compose.Composable public static inline <T, reified V1, reified V2> androidx.compose.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
-    method public static <T> androidx.compose.SnapshotMutationPolicy<T> structuralEqualityPolicy();
-    method public static <T> androidx.compose.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
-    method public static <K, V> androidx.compose.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
+    method public static inline operator <T> T! getValue(androidx.compose.runtime.State<T>, Object? thisObj, kotlin.reflect.KProperty<?> property);
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> mutableStateListOf(T?... elements);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf();
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> mutableStateMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method public static <T> androidx.compose.runtime.MutableState<T> mutableStateOf(T? value, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy());
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> neverEqualPolicy();
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> referentialEqualityPolicy();
+    method public static inline operator <T> void setValue(androidx.compose.runtime.MutableState<T>, Object? thisObj, kotlin.reflect.KProperty<?> property, T? value);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> state(androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> androidx.compose.runtime.MutableState<T> stateFor(V1? v1, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.MutableState<T> stateFor(Object![]? inputs, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static inline <T, reified V1, reified V2> androidx.compose.runtime.MutableState<T>! stateFor(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> init);
+    method public static <T> androidx.compose.runtime.SnapshotMutationPolicy<T> structuralEqualityPolicy();
+    method public static <T> androidx.compose.runtime.snapshots.SnapshotStateList<T> toMutableStateList(java.util.Collection<? extends T>);
+    method public static <K, V> androidx.compose.runtime.snapshots.SnapshotStateMap<K,V> toMutableStateMap(Iterable<? extends kotlin.Pair<? extends K,? extends V>>);
   }
 
   @kotlin.annotation.Retention(AnnotationRetention.SOURCE) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION, AnnotationTarget.CLASS, AnnotationTarget.FILE}) public @interface NoLiveLiterals {
@@ -328,69 +328,69 @@
     method public void removeValue(V value);
   }
 
-  @kotlin.PublishedApi internal final class PostCommitScopeImpl implements android.view.Choreographer.FrameCallback androidx.compose.CommitScope androidx.compose.CompositionLifecycleObserver {
-    ctor public PostCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> onCommit, androidx.compose.EmbeddingContext embeddingContext);
+  @kotlin.PublishedApi internal final class PostCommitScopeImpl implements android.view.Choreographer.FrameCallback androidx.compose.runtime.CommitScope androidx.compose.runtime.CompositionLifecycleObserver {
+    ctor public PostCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> onCommit, androidx.compose.runtime.EmbeddingContext embeddingContext);
     method public void doFrame(long frameTimeNanos);
     method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
   }
 
-  @kotlin.PublishedApi internal final class PreCommitScopeImpl implements androidx.compose.CommitScope androidx.compose.CompositionLifecycleObserver {
-    ctor public PreCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.CommitScope,kotlin.Unit> onCommit);
+  @kotlin.PublishedApi internal final class PreCommitScopeImpl implements androidx.compose.runtime.CommitScope androidx.compose.runtime.CompositionLifecycleObserver {
+    ctor public PreCommitScopeImpl(internal kotlin.jvm.functions.Function1<? super androidx.compose.runtime.CommitScope,kotlin.Unit> onCommit);
     method public void onDispose(kotlin.jvm.functions.Function0<kotlin.Unit> callback);
   }
 
-  @androidx.compose.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.Ambient<T> {
-    method public final infix androidx.compose.ProvidedValue<T> provides(T? value);
+  @androidx.compose.runtime.Stable public abstract class ProvidableAmbient<T> extends androidx.compose.runtime.Ambient<T> {
+    method public final infix androidx.compose.runtime.ProvidedValue<T> provides(T? value);
   }
 
   public final class ProvidedValue<T> {
-    method public androidx.compose.Ambient<T> getAmbient();
+    method public androidx.compose.runtime.Ambient<T> getAmbient();
     method public T! getValue();
   }
 
   public final class Recomposer {
-    ctor public Recomposer(androidx.compose.EmbeddingContext embeddingContext);
+    ctor public Recomposer(androidx.compose.runtime.EmbeddingContext embeddingContext);
     ctor public Recomposer();
     method public suspend Object? awaitIdle(kotlin.coroutines.Continuation<? super kotlin.Unit> p);
-    method public androidx.compose.EmbeddingContext getEmbeddingContext();
+    method public androidx.compose.runtime.EmbeddingContext getEmbeddingContext();
     method public androidx.compose.runtime.dispatch.MonotonicFrameClock getFrameClock();
     method public boolean hasPendingChanges();
     method public suspend Object? recomposeAndApplyChanges(kotlinx.coroutines.CoroutineScope applyCoroutineScope, long frameCount, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
     method public suspend Object? runRecomposeAndApplyChanges(kotlin.coroutines.Continuation<?> p);
-    method public void setEmbeddingContext(androidx.compose.EmbeddingContext p);
+    method public void setEmbeddingContext(androidx.compose.runtime.EmbeddingContext p);
     property public final androidx.compose.runtime.dispatch.MonotonicFrameClock frameClock;
-    field public static final androidx.compose.Recomposer.Companion Companion;
+    field public static final androidx.compose.runtime.Recomposer.Companion Companion;
   }
 
   public static final class Recomposer.Companion {
-    method @org.jetbrains.annotations.TestOnly public androidx.compose.Recomposer current();
+    method @org.jetbrains.annotations.TestOnly public androidx.compose.runtime.Recomposer current();
   }
 
   public final class RecomposerKt {
-    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
+    method public static suspend Object? withRunningRecomposer(kotlin.jvm.functions.Function3<? super kotlinx.coroutines.CoroutineScope,? super androidx.compose.runtime.Recomposer,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block, kotlin.coroutines.Continuation<? super kotlin.Unit> p);
   }
 
   public final class RememberKt {
-    method @androidx.compose.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
-    method @androidx.compose.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T> T! remember(kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1> T! remember(V1? v1, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2> T! remember(V1? v1, V2? v2, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <T, V1, V2, V3> T! remember(V1? v1, V2? v2, V3? v3, kotlin.jvm.functions.Function0<? extends T> calculation);
+    method @androidx.compose.runtime.Composable public static inline <V> V! remember(Object![]? inputs, kotlin.jvm.functions.Function0<? extends V> calculation);
   }
 
-  @androidx.compose.ComposeCompilerApi public interface ScopeUpdateScope {
-    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
+  @androidx.compose.runtime.ComposeCompilerApi public interface ScopeUpdateScope {
+    method public void updateScope(kotlin.jvm.functions.Function3<? super androidx.compose.runtime.Composer<?>,? super java.lang.Integer,? super java.lang.Integer,kotlin.Unit> block);
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotReader {
-    ctor public SlotReader(androidx.compose.SlotTable table);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotReader {
+    ctor public SlotReader(androidx.compose.runtime.SlotTable table);
     method public void beginEmpty();
     method public void close();
     method public void endEmpty();
     method public void endGroup();
     method public void endNode();
-    method public java.util.List<androidx.compose.KeyInfo> extractKeys();
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public java.util.List<androidx.compose.runtime.KeyInfo> extractKeys();
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public int getCurrent();
     method public int getCurrentEnd();
@@ -405,7 +405,7 @@
     method public int getParentLocation();
     method public int getParentNodes();
     method public int getParentSlots();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupEnd(int index);
     method public int groupKey(int index);
     method public int groupSize(int index);
@@ -444,17 +444,17 @@
     ctor public SlotTable(internal Object![] slots);
     ctor public SlotTable();
     method public int getSize();
-    method @androidx.compose.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotReader openReader();
-    method @androidx.compose.InternalComposeApi public androidx.compose.SlotWriter openWriter();
-    method @androidx.compose.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.SlotReader,? extends T> block);
-    method @androidx.compose.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
-    method @androidx.compose.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.SlotWriter,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi public java.util.List<java.lang.Integer> groupPathTo(int location);
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotReader openReader();
+    method @androidx.compose.runtime.InternalComposeApi public androidx.compose.runtime.SlotWriter openWriter();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! read(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotReader,? extends T> block);
+    method @androidx.compose.runtime.InternalComposeApi @org.jetbrains.annotations.TestOnly public void verifyWellFormed();
+    method @androidx.compose.runtime.InternalComposeApi public inline <T> T! write(kotlin.jvm.functions.Function1<? super androidx.compose.runtime.SlotWriter,? extends T> block);
     property public final int size;
-    field public static final androidx.compose.SlotTable.Companion Companion;
+    field public static final androidx.compose.runtime.SlotTable.Companion Companion;
   }
 
-  @androidx.compose.InternalComposeApi public static final class SlotTable.Companion {
+  @androidx.compose.runtime.InternalComposeApi public static final class SlotTable.Companion {
     method public Object getEMPTY();
     property public final Object EMPTY;
   }
@@ -463,8 +463,8 @@
     field @kotlin.PublishedApi internal static final Object EMPTY;
   }
 
-  @androidx.compose.InternalComposeApi public final class SlotWriter {
-    method public androidx.compose.Anchor anchor(int index = current);
+  @androidx.compose.runtime.InternalComposeApi public final class SlotWriter {
+    method public androidx.compose.runtime.Anchor anchor(int index = current);
     method public void beginInsert();
     method public void close();
     method public int endData();
@@ -472,8 +472,8 @@
     method public void endInsert();
     method public int endNode();
     method public void ensureStarted(int location);
-    method public void ensureStarted(androidx.compose.Anchor anchor);
-    method public Object? get(androidx.compose.Anchor anchor);
+    method public void ensureStarted(androidx.compose.runtime.Anchor anchor);
+    method public Object? get(androidx.compose.runtime.Anchor anchor);
     method public Object? get(int index);
     method public boolean getClosed();
     method public int getCurrent();
@@ -481,15 +481,15 @@
     method public int getNodeIndex();
     method public int getParentLocation();
     method public int getParentNodes();
-    method public androidx.compose.SlotTable getTable();
+    method public androidx.compose.runtime.SlotTable getTable();
     method public int groupSize(int index);
     method public java.util.Iterator<java.lang.Object> groupSlots();
     method public boolean isGroup();
     method public boolean isGroup(int index);
     method public boolean isNode();
-    method public java.util.List<androidx.compose.Anchor> moveFrom(androidx.compose.SlotTable table, int location);
+    method public java.util.List<androidx.compose.runtime.Anchor> moveFrom(androidx.compose.runtime.SlotTable table, int location);
     method public void moveGroup(int offset);
-    method public int parentIndex(androidx.compose.Anchor anchor);
+    method public int parentIndex(androidx.compose.runtime.Anchor anchor);
     method public boolean removeGroup();
     method public void set(Object? value);
     method public void setCurrent(int p);
@@ -520,41 +520,41 @@
 
   public interface SnapshotMutationPolicy<T> {
     method public boolean equivalent(T? a, T? b);
-    method @androidx.compose.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
+    method @androidx.compose.runtime.ExperimentalComposeApi public default T? merge(T? previous, T? current, T? applied);
   }
 
-  @androidx.compose.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
+  @androidx.compose.runtime.StableMarker @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY_GETTER, AnnotationTarget.PROPERTY}) public @interface Stable {
   }
 
   @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.CLASS}) public @interface StableMarker {
   }
 
-  @androidx.compose.Stable public interface State<T> {
+  @androidx.compose.runtime.Stable public interface State<T> {
     method public T! getValue();
     property public abstract T! value;
   }
 
   public final class SuspendingEffectsKt {
-    method public static suspend Object? awaitDispose(androidx.compose.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
-    method @kotlin.PublishedApi internal static kotlinx.coroutines.CoroutineScope createCompositionCoroutineScope(kotlin.coroutines.CoroutineContext coroutineContext, androidx.compose.Composer<?> composer);
-    method @androidx.compose.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
-    method @androidx.compose.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
+    method public static suspend Object? awaitDispose(androidx.compose.runtime.CompositionCoroutineScope, kotlin.jvm.functions.Function0<kotlin.Unit> onDispose = {}, kotlin.coroutines.Continuation<?> p = {});
+    method @kotlin.PublishedApi internal static kotlinx.coroutines.CoroutineScope createCompositionCoroutineScope(kotlin.coroutines.CoroutineContext coroutineContext, androidx.compose.runtime.Composer<?> composer);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object? key1, Object? key2, Object? key3, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static void launchInComposition(Object![]? keys, kotlin.jvm.functions.Function2<? super androidx.compose.runtime.CompositionCoroutineScope,? super kotlin.coroutines.Continuation<? super kotlin.Unit>,?> block);
+    method @androidx.compose.runtime.Composable public static inline kotlinx.coroutines.CoroutineScope rememberCoroutineScope(kotlin.jvm.functions.Function0<? extends kotlin.coroutines.CoroutineContext> getContext = { return EmptyCoroutineContext });
   }
 
   public final class TraceKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
+  @androidx.compose.runtime.ExperimentalComposeApi @kotlin.annotation.MustBeDocumented @kotlin.annotation.Retention(AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={AnnotationTarget.TYPE, AnnotationTarget.TYPE_PARAMETER}) public @interface UnionType {
     method public abstract Class<?>[] types();
   }
 
   public final class Updater<T> {
-    ctor public Updater(androidx.compose.Composer<?> composer, T! node);
-    method public androidx.compose.Composer<?> getComposer();
+    ctor public Updater(androidx.compose.runtime.Composer<?> composer, T! node);
+    method public androidx.compose.runtime.Composer<?> getComposer();
     method public T! getNode();
     method public inline void reconcile(kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
     method public inline void set(int value, kotlin.jvm.functions.Function2<? super T,? super java.lang.Integer,kotlin.Unit> block);
@@ -565,19 +565,19 @@
 
 }
 
-package androidx.compose.collection {
+package androidx.compose.runtime.collection {
 
   @kotlin.RequiresOptIn(level=RequiresOptIn.Level.ERROR, message="This is an experimental API for fast access collections and is likely to change " + "before becoming stable.") @kotlin.annotation.Target(allowedTargets={AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) public @interface ExperimentalCollectionApi {
   }
 
-  @androidx.compose.collection.ExperimentalCollectionApi public final class MutableVector<T> {
+  @androidx.compose.runtime.collection.ExperimentalCollectionApi public final class MutableVector<T> {
     ctor @kotlin.PublishedApi internal MutableVector(internal T![] content, int size);
     method public boolean add(T? element);
     method public void add(int index, T? element);
     method public boolean addAll(int index, java.util.List<? extends T> elements);
-    method public boolean addAll(int index, androidx.compose.collection.MutableVector<T> elements);
+    method public boolean addAll(int index, androidx.compose.runtime.collection.MutableVector<T> elements);
     method public inline boolean addAll(java.util.List<? extends T> elements);
-    method public inline boolean addAll(androidx.compose.collection.MutableVector<T> elements);
+    method public inline boolean addAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean addAll(T![] elements);
     method public boolean addAll(int index, java.util.Collection<? extends T> elements);
     method public boolean addAll(java.util.Collection<? extends T> elements);
@@ -587,8 +587,8 @@
     method public operator boolean contains(T? element);
     method public boolean containsAll(java.util.List<? extends T> elements);
     method public boolean containsAll(java.util.Collection<? extends T> elements);
-    method public boolean containsAll(androidx.compose.collection.MutableVector<T> elements);
-    method public boolean contentEquals(androidx.compose.collection.MutableVector<T> other);
+    method public boolean containsAll(androidx.compose.runtime.collection.MutableVector<T> elements);
+    method public boolean contentEquals(androidx.compose.runtime.collection.MutableVector<T> other);
     method public void ensureCapacity(int capacity);
     method public T! first();
     method public inline T! first(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
@@ -618,12 +618,12 @@
     method public inline T? lastOrNull(kotlin.jvm.functions.Function1<? super T,java.lang.Boolean> predicate);
     method public inline <reified R> R![]! map(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline <reified R> R![]! mapIndexed(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
-    method public inline <reified R> androidx.compose.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapIndexedNotNull(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,? extends R> transform);
+    method public inline <reified R> androidx.compose.runtime.collection.MutableVector<R>! mapNotNull(kotlin.jvm.functions.Function1<? super T,? extends R> transform);
     method public inline operator void plusAssign(T? element);
     method public boolean remove(T? element);
     method public boolean removeAll(java.util.List<? extends T> elements);
-    method public boolean removeAll(androidx.compose.collection.MutableVector<T> elements);
+    method public boolean removeAll(androidx.compose.runtime.collection.MutableVector<T> elements);
     method public boolean removeAll(java.util.Collection<? extends T> elements);
     method public T! removeAt(int index);
     method public void removeRange(int start, int end);
@@ -638,24 +638,24 @@
   }
 
   public final class MutableVectorKt {
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int capacity = 16);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf();
-    method @androidx.compose.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.collection.MutableVector<T>! mutableVectorOf(T? elements);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int capacity = 16);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! MutableVector(int size, kotlin.jvm.functions.Function1<? super java.lang.Integer,? extends T> init);
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf();
+    method @androidx.compose.runtime.collection.ExperimentalCollectionApi public static inline <reified T> androidx.compose.runtime.collection.MutableVector<T>! mutableVectorOf(T? elements);
   }
 
 }
 
-package androidx.compose.frames {
+package androidx.compose.runtime.frames {
 
-  @Deprecated public abstract class AbstractRecord implements androidx.compose.frames.Record {
+  @Deprecated public abstract class AbstractRecord implements androidx.compose.runtime.frames.Record {
     ctor @Deprecated public AbstractRecord();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public int frameId;
-    property public androidx.compose.frames.Record? next;
+    property public androidx.compose.runtime.frames.Record? next;
   }
 
   public final class Frame {
@@ -666,55 +666,55 @@
   }
 
   @Deprecated public final class FrameAborted extends java.lang.RuntimeException {
-    ctor @Deprecated public FrameAborted(androidx.compose.frames.Frame frame);
-    method @Deprecated public androidx.compose.frames.Frame getFrame();
+    ctor @Deprecated public FrameAborted(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public androidx.compose.runtime.frames.Frame getFrame();
   }
 
   public final class FrameContainersKt {
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf();
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T? element);
-    method @Deprecated public static <T> androidx.compose.frames.ModelList<T> modelListOf(T?... elements);
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf();
-    method @Deprecated public static <K, V> androidx.compose.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf();
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T? element);
+    method @Deprecated public static <T> androidx.compose.runtime.frames.ModelList<T> modelListOf(T?... elements);
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf();
+    method @Deprecated public static <K, V> androidx.compose.runtime.frames.ModelMap<K,V> modelMapOf(kotlin.Pair<? extends K,? extends V>... pairs);
   }
 
   public final class FrameIdSetKt {
   }
 
   @Deprecated public interface Framed {
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
-    property public abstract androidx.compose.frames.Record firstFrameRecord;
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
+    property public abstract androidx.compose.runtime.frames.Record firstFrameRecord;
   }
 
   public final class FramesKt {
-    method @Deprecated public static void _created(androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _readable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
-    method @Deprecated public static androidx.compose.frames.Record _writable(androidx.compose.frames.Record r, androidx.compose.frames.Framed framed);
+    method @Deprecated public static void _created(androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _readable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static androidx.compose.runtime.frames.Record _writable(androidx.compose.runtime.frames.Record r, androidx.compose.runtime.frames.Framed framed);
     method @Deprecated public static void abort();
-    method @Deprecated public static void abort(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abort(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void abortHandler();
-    method @Deprecated public static void abortHandler(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void abortHandler(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commit();
-    method @Deprecated public static void commit(androidx.compose.frames.Frame frame);
+    method @Deprecated public static void commit(androidx.compose.runtime.frames.Frame frame);
     method @Deprecated public static void commitHandler();
-    method @kotlin.PublishedApi internal static <T extends androidx.compose.frames.Record> T current(T r, androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame currentFrame();
+    method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.frames.Record> T current(T r, androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame currentFrame();
     method @Deprecated public static boolean getInFrame();
     method @Deprecated public static void observeAllReads(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> readObserver, kotlin.jvm.functions.Function0<kotlin.Unit> block);
     method @Deprecated public static void open(boolean readOnly = false);
     method @Deprecated public static void open(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function2<java.lang.Object,? super java.lang.Boolean,kotlin.Unit>? writeObserver = null);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T readable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.frames.Frame,kotlin.Unit> observer);
-    method @Deprecated public static void restore(androidx.compose.frames.Frame frame);
-    method @Deprecated public static androidx.compose.frames.Frame suspend();
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T readable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static kotlin.jvm.functions.Function0<kotlin.Unit> registerCommitObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.frames.Frame,kotlin.Unit> observer);
+    method @Deprecated public static void restore(androidx.compose.runtime.frames.Frame frame);
+    method @Deprecated public static androidx.compose.runtime.frames.Frame suspend();
     method @Deprecated public static boolean wasModified(Object value);
-    method @Deprecated public static inline <T extends androidx.compose.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed);
-    method @Deprecated public static <T extends androidx.compose.frames.Record> T writable(T, androidx.compose.frames.Framed framed, androidx.compose.frames.Frame frame);
+    method @Deprecated public static inline <T extends androidx.compose.runtime.frames.Record> T withCurrent(T, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> block);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed);
+    method @Deprecated public static <T extends androidx.compose.runtime.frames.Record> T writable(T, androidx.compose.runtime.frames.Framed framed, androidx.compose.runtime.frames.Frame frame);
   }
 
-  @Deprecated public final class ModelList<T> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
+  @Deprecated public final class ModelList<T> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableList java.util.List<T> {
     ctor @Deprecated public ModelList();
     method @Deprecated public boolean add(T? element);
     method @Deprecated public void add(int index, T? element);
@@ -724,7 +724,7 @@
     method @Deprecated public boolean contains(Object? element);
     method @Deprecated public boolean containsAll(java.util.Collection<?> elements);
     method @Deprecated public T! get(int index);
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public int getSize();
     method @Deprecated public int indexOf(Object? element);
     method @Deprecated public boolean isEmpty();
@@ -732,86 +732,86 @@
     method @Deprecated public int lastIndexOf(Object? element);
     method @Deprecated public java.util.ListIterator<T> listIterator();
     method @Deprecated public java.util.ListIterator<T> listIterator(int index);
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public boolean remove(Object? element);
     method @Deprecated public boolean removeAll(java.util.Collection<?> elements);
     method @Deprecated public T! removeAt(int index);
     method @Deprecated public boolean retainAll(java.util.Collection<?> elements);
     method @Deprecated public T! set(int index, T? element);
     method @Deprecated public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public int size;
   }
 
-  @Deprecated public final class ModelMap<K, V> implements androidx.compose.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
+  @Deprecated public final class ModelMap<K, V> implements androidx.compose.runtime.frames.Framed kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> {
     ctor @Deprecated public ModelMap();
     method @Deprecated public void clear();
     method @Deprecated public boolean containsKey(Object? key);
     method @Deprecated public boolean containsValue(Object? value);
     method @Deprecated public V? get(Object? key);
     method @Deprecated public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method @Deprecated public androidx.compose.frames.Record getFirstFrameRecord();
+    method @Deprecated public androidx.compose.runtime.frames.Record getFirstFrameRecord();
     method @Deprecated public java.util.Set<K> getKeys();
     method @Deprecated public int getSize();
     method @Deprecated public java.util.Collection<V> getValues();
     method @Deprecated public boolean isEmpty();
-    method @Deprecated public void prependFrameRecord(androidx.compose.frames.Record value);
+    method @Deprecated public void prependFrameRecord(androidx.compose.runtime.frames.Record value);
     method @Deprecated public V? put(K? key, V? value);
     method @Deprecated public void putAll(java.util.Map<? extends K,? extends V> from);
     method @Deprecated public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.frames.Record firstFrameRecord;
+    property public androidx.compose.runtime.frames.Record firstFrameRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
   @Deprecated public interface Record {
-    method @Deprecated public void assign(androidx.compose.frames.Record value);
-    method @Deprecated public androidx.compose.frames.Record create();
+    method @Deprecated public void assign(androidx.compose.runtime.frames.Record value);
+    method @Deprecated public androidx.compose.runtime.frames.Record create();
     method @Deprecated public int getFrameId();
-    method @Deprecated public androidx.compose.frames.Record? getNext();
+    method @Deprecated public androidx.compose.runtime.frames.Record? getNext();
     method @Deprecated public void setFrameId(int p);
-    method @Deprecated public void setNext(androidx.compose.frames.Record? p);
+    method @Deprecated public void setNext(androidx.compose.runtime.frames.Record? p);
     property public abstract int frameId;
-    property public abstract androidx.compose.frames.Record? next;
+    property public abstract androidx.compose.runtime.frames.Record? next;
   }
 
 }
 
-package androidx.compose.internal {
+package androidx.compose.runtime.internal {
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambda<P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, P14, P15, P16, P17, P18, R> implements kotlin.jvm.functions.Function10<P1,P2,P3,P4,P5,P6,P7,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function11<P1,P2,P3,P4,P5,P6,P7,P8,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function12<P1,P2,P3,P4,P5,P6,P7,P8,P9,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function13<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function14<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function15<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function16<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function17<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function18<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function20<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function21<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function22<P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14,P15,P16,P17,P18,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function3<androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function4<P1,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function5<P1,P2,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function6<P1,P2,P3,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function7<P1,P2,P3,P4,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function8<P1,P2,P3,P4,P5,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> kotlin.jvm.functions.Function9<P1,P2,P3,P4,P5,P6,androidx.compose.runtime.Composer<?>,java.lang.Integer,java.lang.Integer,R> {
     ctor public ComposableLambda(int key, boolean tracked, String? sourceInformation);
     method public int getKey();
-    method public operator R! invoke(androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.Composer<?> c, int k, int changed);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.Composer<?> c, int k, int changed, int changed1);
-    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, androidx.compose.runtime.Composer<?> c, int k, int changed);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
+    method public operator R! invoke(P1? p1, P2? p2, P3? p3, P4? p4, P5? p5, P6? p6, P7? p7, P8? p8, P9? p9, P10? p10, P11? p11, P12? p12, P13? p13, P14? p14, P15? p15, P16? p16, P17? p17, P18? p18, androidx.compose.runtime.Composer<?> c, int k, int changed, int changed1);
     method public void update(Object block);
   }
 
   public final class ComposableLambdaKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambda(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambda<java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object,java.lang.Object> composableLambdaInstance(int key, boolean tracked, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @androidx.compose.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
+  @androidx.compose.runtime.ComposeCompilerApi @androidx.compose.runtime.Stable public final class ComposableLambdaN<R> implements kotlin.jvm.functions.FunctionN<R> {
     ctor public ComposableLambdaN(int key, boolean tracked, String? sourceInformation, int arity);
     method public int getArity();
     method public int getKey();
@@ -820,86 +820,86 @@
   }
 
   public final class ComposableLambdaNKt {
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
-    method @androidx.compose.ComposeCompilerApi public static androidx.compose.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaN(androidx.compose.runtime.Composer<?> composer, int key, boolean tracked, String? sourceInformation, int arity, Object block);
+    method @androidx.compose.runtime.ComposeCompilerApi public static androidx.compose.runtime.internal.ComposableLambdaN<?> composableLambdaNInstance(int key, boolean tracked, int arity, Object block);
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralFileInfo {
     method public abstract String file();
   }
 
-  @androidx.compose.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
+  @androidx.compose.runtime.ComposeCompilerApi @kotlin.annotation.Retention(AnnotationRetention.BINARY) public @interface LiveLiteralInfo {
     method public abstract String key();
     method public abstract int offset();
   }
 
   public final class LiveLiteralKt {
-    method @androidx.compose.InternalComposeApi public static <T> androidx.compose.State<T> liveLiteral(String key, T? value);
-    method @androidx.compose.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
+    method @androidx.compose.runtime.InternalComposeApi public static <T> androidx.compose.runtime.State<T> liveLiteral(String key, T? value);
+    method @androidx.compose.runtime.InternalComposeApi public static void updateLiveLiteralValue(String key, Object? value);
   }
 
 }
 
-package androidx.compose.snapshots {
+package androidx.compose.runtime.snapshots {
 
   public final class ListUtilsKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.snapshots.Snapshot {
-    method public androidx.compose.snapshots.SnapshotApplyResult apply();
+  @androidx.compose.runtime.ExperimentalComposeApi public class MutableSnapshot extends androidx.compose.runtime.snapshots.Snapshot {
+    method public androidx.compose.runtime.snapshots.SnapshotApplyResult apply();
     method public void close$lintWithKotlin();
-    method public java.util.Set<androidx.compose.snapshots.StateObject>? getModified$lintWithKotlin();
+    method public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? getModified$lintWithKotlin();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getReadObserver$lintWithKotlin();
     method public boolean getReadonly();
-    method public androidx.compose.snapshots.Snapshot getRoot();
+    method public androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? getWriteObserver$lintWithKotlin();
     method public boolean hasPendingChanges();
-    method public void nestedActivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
-    method public void nestedDeactivated$lintWithKotlin(androidx.compose.snapshots.Snapshot snapshot);
+    method public void nestedActivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public void nestedDeactivated$lintWithKotlin(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void notifyObjectsInitialized$lintWithKotlin();
-    method public void recordModified$lintWithKotlin(androidx.compose.snapshots.StateObject state);
-    method public void setModified(java.util.Set<androidx.compose.snapshots.StateObject>? p);
-    method public androidx.compose.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
-    property public java.util.Set<androidx.compose.snapshots.StateObject>? modified;
+    method public void recordModified$lintWithKotlin(androidx.compose.runtime.snapshots.StateObject state);
+    method public void setModified(java.util.Set<androidx.compose.runtime.snapshots.StateObject>? p);
+    method public androidx.compose.runtime.snapshots.MutableSnapshot takeNestedMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver);
+    property public java.util.Set<androidx.compose.runtime.snapshots.StateObject>? modified;
     property public boolean readonly;
-    property public androidx.compose.snapshots.Snapshot root;
+    property public androidx.compose.runtime.snapshots.Snapshot root;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract sealed class Snapshot {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract sealed class Snapshot {
     method public void dispose();
     method public final inline <T> T! enter(kotlin.jvm.functions.Function0<? extends T> block);
     method public int getId();
     method public abstract boolean getReadonly();
-    method public abstract androidx.compose.snapshots.Snapshot getRoot();
+    method public abstract androidx.compose.runtime.snapshots.Snapshot getRoot();
     method public abstract boolean hasPendingChanges();
-    method @kotlin.PublishedApi internal androidx.compose.snapshots.Snapshot? makeCurrent();
-    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.snapshots.Snapshot? snapshot);
+    method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot? makeCurrent();
+    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.runtime.snapshots.Snapshot? snapshot);
     method public void setId$lintWithKotlin(int p);
-    method public abstract androidx.compose.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method public abstract androidx.compose.runtime.snapshots.Snapshot takeNestedSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
     property public int id;
     property public abstract boolean readonly;
-    property public abstract androidx.compose.snapshots.Snapshot root;
-    field public static final androidx.compose.snapshots.Snapshot.Companion Companion;
+    property public abstract androidx.compose.runtime.snapshots.Snapshot root;
+    field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
   }
 
   public static final class Snapshot.Companion {
-    method public androidx.compose.snapshots.Snapshot! getCurrent();
+    method public androidx.compose.runtime.snapshots.Snapshot! getCurrent();
     method public inline <T> T! global(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public void notifyObjectsInitialized();
+    method @androidx.compose.runtime.ExperimentalComposeApi public void notifyObjectsInitialized();
     method public <T> T! observe(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null, kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.InternalComposeApi public int openSnapshotCount();
-    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.snapshots.Snapshot,kotlin.Unit> observer);
-    method @androidx.compose.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
-    method @kotlin.PublishedApi internal androidx.compose.snapshots.Snapshot? removeCurrent();
-    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.snapshots.Snapshot? previous);
-    method @androidx.compose.ExperimentalComposeApi public void sendApplyNotifications();
-    property public final androidx.compose.snapshots.Snapshot! current;
+    method @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
+    method public kotlin.jvm.functions.Function0<kotlin.Unit> registerApplyObserver(kotlin.jvm.functions.Function2<? super java.util.Set<?>,? super androidx.compose.runtime.snapshots.Snapshot,kotlin.Unit> observer);
+    method @androidx.compose.runtime.ExperimentalComposeApi public kotlin.jvm.functions.Function0<kotlin.Unit> registerGlobalWriteObserver(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit> observer);
+    method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot? removeCurrent();
+    method @kotlin.PublishedApi internal void restoreCurrent(androidx.compose.runtime.snapshots.Snapshot? previous);
+    method @androidx.compose.runtime.ExperimentalComposeApi public void sendApplyNotifications();
+    property public final androidx.compose.runtime.snapshots.Snapshot! current;
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
-    ctor public SnapshotApplyConflictException(androidx.compose.snapshots.Snapshot snapshot);
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotApplyConflictException extends java.lang.Exception {
+    ctor public SnapshotApplyConflictException(androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
   }
 
   public abstract sealed class SnapshotApplyResult {
@@ -908,40 +908,40 @@
     property public abstract boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Failure extends androidx.compose.snapshots.SnapshotApplyResult {
-    ctor public SnapshotApplyResult.Failure(androidx.compose.snapshots.Snapshot snapshot);
+  public static final class SnapshotApplyResult.Failure extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
+    ctor public SnapshotApplyResult.Failure(androidx.compose.runtime.snapshots.Snapshot snapshot);
     method public void check();
-    method public androidx.compose.snapshots.Snapshot getSnapshot();
+    method public androidx.compose.runtime.snapshots.Snapshot getSnapshot();
     method public boolean getSucceeded();
     property public boolean succeeded;
   }
 
-  public static final class SnapshotApplyResult.Success extends androidx.compose.snapshots.SnapshotApplyResult {
+  public static final class SnapshotApplyResult.Success extends androidx.compose.runtime.snapshots.SnapshotApplyResult {
     method public void check();
     method public boolean getSucceeded();
     property public boolean succeeded;
-    field public static final androidx.compose.snapshots.SnapshotApplyResult.Success INSTANCE;
+    field public static final androidx.compose.runtime.snapshots.SnapshotApplyResult.Success INSTANCE;
   }
 
   public final class SnapshotIdSetKt {
   }
 
   public final class SnapshotKt {
-    method @kotlin.PublishedApi internal static <T extends androidx.compose.snapshots.StateRecord> T current(T r, androidx.compose.snapshots.Snapshot snapshot);
-    method @kotlin.PublishedApi internal static void notifyWrite(androidx.compose.snapshots.Snapshot snapshot, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state);
-    method public static <T extends androidx.compose.snapshots.StateRecord> T readable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
+    method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T current(T r, androidx.compose.runtime.snapshots.Snapshot snapshot);
+    method @kotlin.PublishedApi internal static void notifyWrite(androidx.compose.runtime.snapshots.Snapshot snapshot, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state);
+    method public static <T extends androidx.compose.runtime.snapshots.StateRecord> T readable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
     method @kotlin.PublishedApi internal static inline <T> T! sync(kotlin.jvm.functions.Function0<? extends T> block);
-    method @androidx.compose.ExperimentalComposeApi public static androidx.compose.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
-    method public static androidx.compose.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
-    method @androidx.compose.ExperimentalComposeApi public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method public static inline <T extends androidx.compose.snapshots.StateRecord, R> R! writable(T, androidx.compose.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
-    method @kotlin.PublishedApi internal static <T extends androidx.compose.snapshots.StateRecord> T writableRecord(T, androidx.compose.snapshots.StateObject state, androidx.compose.snapshots.Snapshot snapshot);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static androidx.compose.runtime.snapshots.MutableSnapshot takeMutableSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null, kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver = null);
+    method public static androidx.compose.runtime.snapshots.Snapshot takeSnapshot(kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver = null);
+    method @androidx.compose.runtime.ExperimentalComposeApi public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! withCurrent(T, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method public static inline <T extends androidx.compose.runtime.snapshots.StateRecord, R> R! writable(T, androidx.compose.runtime.snapshots.StateObject state, kotlin.jvm.functions.Function1<? super T,? extends R> block);
+    method @kotlin.PublishedApi internal static <T extends androidx.compose.runtime.snapshots.StateRecord> T writableRecord(T, androidx.compose.runtime.snapshots.StateObject state, androidx.compose.runtime.snapshots.Snapshot snapshot);
     field @kotlin.PublishedApi internal static final Object lock;
   }
 
-  @androidx.compose.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateList<T> implements kotlin.jvm.internal.markers.KMutableList java.util.List<T> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateList();
     method public boolean add(T? element);
     method public void add(int index, T? element);
@@ -951,7 +951,7 @@
     method public boolean contains(Object? element);
     method public boolean containsAll(java.util.Collection<?> elements);
     method public T! get(int index);
-    method public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> getFirstStateRecord();
     method public int getSize();
     method public int indexOf(Object? element);
     method public boolean isEmpty();
@@ -959,7 +959,7 @@
     method public int lastIndexOf(Object? element);
     method public java.util.ListIterator<T> listIterator();
     method public java.util.ListIterator<T> listIterator(int index);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public boolean remove(Object? element);
     method public boolean removeAll(java.util.Collection<?> elements);
     method public T! removeAt(int index);
@@ -967,50 +967,50 @@
     method public boolean retainAll(java.util.Collection<?> elements);
     method public T! set(int index, T? element);
     method public java.util.List<T> subList(int fromIndex, int toIndex);
-    property public androidx.compose.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateList.StateListStateRecord<T> firstStateRecord;
     property public int size;
   }
 
-  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateList.StateListStateRecord<T> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateListKt {
   }
 
-  @androidx.compose.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.snapshots.StateObject {
+  @androidx.compose.runtime.Stable public final class SnapshotStateMap<K, V> implements kotlin.jvm.internal.markers.KMutableMap java.util.Map<K,V> androidx.compose.runtime.snapshots.StateObject {
     ctor public SnapshotStateMap();
     method public void clear();
     method public boolean containsKey(Object? key);
     method public boolean containsValue(Object? value);
     method public V? get(Object? key);
     method public java.util.Set<java.util.Map.Entry<K,V>> getEntries();
-    method public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
+    method public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> getFirstStateRecord();
     method public java.util.Set<K> getKeys();
     method public int getSize();
     method public java.util.Collection<V> getValues();
     method public boolean isEmpty();
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
     method public V? put(K? key, V? value);
     method public void putAll(java.util.Map<? extends K,? extends V> from);
     method public V? remove(Object? key);
     property public java.util.Set<java.util.Map.Entry<K,V>> entries;
-    property public androidx.compose.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
+    property public androidx.compose.runtime.snapshots.SnapshotStateMap.StateMapStateRecord<K,V> firstStateRecord;
     property public java.util.Set<K> keys;
     property public int size;
     property public java.util.Collection<V> values;
   }
 
-  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.snapshots.StateRecord {
-    method public void assign(androidx.compose.snapshots.StateRecord value);
-    method public androidx.compose.snapshots.StateRecord create();
+  public static final class SnapshotStateMap.StateMapStateRecord<K, V> extends androidx.compose.runtime.snapshots.StateRecord {
+    method public void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public androidx.compose.runtime.snapshots.StateRecord create();
   }
 
   public final class SnapshotStateMapKt {
   }
 
-  @androidx.compose.ExperimentalComposeApi public final class SnapshotStateObserver {
+  @androidx.compose.runtime.ExperimentalComposeApi public final class SnapshotStateObserver {
     ctor public SnapshotStateObserver(kotlin.jvm.functions.Function1<? super kotlin.jvm.functions.Function0<kotlin.Unit>,kotlin.Unit> onChangedExecutor);
     method public void clear(Object target);
     method public void dispose();
@@ -1019,25 +1019,25 @@
     method public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.ExperimentalComposeApi public interface StateObject {
-    method public androidx.compose.snapshots.StateRecord getFirstStateRecord();
-    method public default androidx.compose.snapshots.StateRecord? mergeRecords(androidx.compose.snapshots.StateRecord previous, androidx.compose.snapshots.StateRecord current, androidx.compose.snapshots.StateRecord applied);
-    method public void prependStateRecord(androidx.compose.snapshots.StateRecord value);
-    property public abstract androidx.compose.snapshots.StateRecord firstStateRecord;
+  @androidx.compose.runtime.ExperimentalComposeApi public interface StateObject {
+    method public androidx.compose.runtime.snapshots.StateRecord getFirstStateRecord();
+    method public default androidx.compose.runtime.snapshots.StateRecord? mergeRecords(androidx.compose.runtime.snapshots.StateRecord previous, androidx.compose.runtime.snapshots.StateRecord current, androidx.compose.runtime.snapshots.StateRecord applied);
+    method public void prependStateRecord(androidx.compose.runtime.snapshots.StateRecord value);
+    property public abstract androidx.compose.runtime.snapshots.StateRecord firstStateRecord;
   }
 
-  @androidx.compose.ExperimentalComposeApi public abstract class StateRecord {
+  @androidx.compose.runtime.ExperimentalComposeApi public abstract class StateRecord {
     ctor public StateRecord();
-    method public abstract void assign(androidx.compose.snapshots.StateRecord value);
-    method public abstract androidx.compose.snapshots.StateRecord create();
+    method public abstract void assign(androidx.compose.runtime.snapshots.StateRecord value);
+    method public abstract androidx.compose.runtime.snapshots.StateRecord create();
   }
 
 }
 
-package androidx.compose.tooling {
+package androidx.compose.runtime.tooling {
 
   public final class InspectionTablesKt {
-    method public static androidx.compose.ProvidableAmbient<java.util.Set<androidx.compose.SlotTable>> getInspectionTables();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.util.Set<androidx.compose.runtime.SlotTable>> getInspectionTables();
   }
 
 }
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/AndroidManifest.xml b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/AndroidManifest.xml
index 2759840..723427b 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/AndroidManifest.xml
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/AndroidManifest.xml
@@ -17,7 +17,7 @@
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
-    package="androidx.compose.benchmark">
+    package="androidx.compose.runtime.benchmark">
     <!--
       ~ Important: disable debuggable for accurate performance results
       ~ requestLegacyExternalStorage to enable legacy JSON reporting when targeting Q
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/HotReloadIntegrationTests.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/HotReloadIntegrationTests.kt
similarity index 96%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/HotReloadIntegrationTests.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/HotReloadIntegrationTests.kt
index 495d201..099b26d 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/HotReloadIntegrationTests.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/HotReloadIntegrationTests.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import android.app.Activity
-import androidx.compose.benchmark.ComposeActivity
+import androidx.compose.runtime.benchmark.ComposeActivity
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.ui.core.WithConstraints
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeActivity.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeActivity.kt
similarity index 94%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeActivity.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeActivity.kt
index 3111aee..f698f2e 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeActivity.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeActivity.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
 import android.os.Bundle
 import androidx.activity.ComponentActivity
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt
similarity index 91%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt
index b2e2738..69afe13 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmark.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
-import androidx.compose.Composable
-import androidx.compose.benchmark.realworld4.RealWorld4_FancyWidget_000
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.benchmark.realworld4.RealWorld4_FancyWidget_000
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Column
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.test.annotation.UiThreadTest
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
@@ -141,7 +141,7 @@
     @Test
     @Ignore("Disabled as it appears to not do anything")
     fun benchmark_realworld4_mid_recompose() {
-        val model = androidx.compose.benchmark.realworld4.createSampleData()
+        val model = androidx.compose.runtime.benchmark.realworld4.createSampleData()
         measureRecompose {
             compose {
                 RealWorld4_FancyWidget_000(model)
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmarkBase.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
similarity index 91%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmarkBase.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
index 6a7ec8b..e1882e6 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/ComposeBenchmarkBase.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/ComposeBenchmarkBase.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
 import android.app.Activity
 import android.util.SparseArray
@@ -22,14 +22,14 @@
 import android.view.ViewGroup
 import androidx.benchmark.junit4.BenchmarkRule
 import androidx.benchmark.junit4.measureRepeated
-import androidx.compose.Composable
-import androidx.compose.Composer
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.InternalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.currentComposer
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composer
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.setContent
 import org.junit.Assert.assertTrue
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt
similarity index 93%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt
index 0d88e47..e4a4339 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DbMonsterBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DbMonsterBenchmark.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
-import androidx.compose.benchmark.dbmonster.DatabaseList
-import androidx.compose.benchmark.dbmonster.DatabaseRow
+import androidx.compose.runtime.benchmark.dbmonster.DatabaseList
+import androidx.compose.runtime.benchmark.dbmonster.DatabaseRow
 import androidx.test.annotation.UiThreadTest
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DeepTreeBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DeepTreeBenchmark.kt
similarity index 95%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DeepTreeBenchmark.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DeepTreeBenchmark.kt
index 9847d85..77fc3c0 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/DeepTreeBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/DeepTreeBenchmark.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
-import androidx.compose.benchmark.deeptree.DeepTree
+import androidx.compose.runtime.benchmark.deeptree.DeepTree
 import androidx.test.annotation.UiThreadTest
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/SiblingBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt
similarity index 90%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/SiblingBenchmark.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt
index fce8179..24add00 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/SiblingBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SiblingBenchmark.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
-import androidx.compose.benchmark.siblings.IdentityType
-import androidx.compose.benchmark.siblings.Item
-import androidx.compose.benchmark.siblings.ReorderType
-import androidx.compose.benchmark.siblings.SiblingManagement
-import androidx.compose.benchmark.siblings.update
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.benchmark.siblings.IdentityType
+import androidx.compose.runtime.benchmark.siblings.Item
+import androidx.compose.runtime.benchmark.siblings.ReorderType
+import androidx.compose.runtime.benchmark.siblings.SiblingManagement
+import androidx.compose.runtime.benchmark.siblings.update
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.annotation.UiThreadTest
 import androidx.test.filters.LargeTest
 import org.junit.Test
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/SnapshotStateObserverBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt
similarity index 93%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/SnapshotStateObserverBenchmark.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt
index ae40a4a..d5add45 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/SnapshotStateObserverBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/SnapshotStateObserverBenchmark.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark
+package androidx.compose.runtime.benchmark
 
 import android.os.Handler
 import android.os.Looper
 import androidx.benchmark.junit4.measureRepeated
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.mutableStateOf
-import androidx.compose.snapshots.Snapshot
-import androidx.compose.snapshots.SnapshotStateObserver
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.snapshots.Snapshot
+import androidx.compose.runtime.snapshots.SnapshotStateObserver
 import androidx.test.filters.LargeTest
 import org.junit.After
 import org.junit.Before
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/collection/MutableVectorBenchmark.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/collection/MutableVectorBenchmark.kt
similarity index 96%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/collection/MutableVectorBenchmark.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/collection/MutableVectorBenchmark.kt
index 5f76ba2..f252e03 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/collection/MutableVectorBenchmark.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/collection/MutableVectorBenchmark.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.collection
+package androidx.compose.runtime.benchmark.collection
 
 import androidx.benchmark.junit4.measureRepeated
-import androidx.compose.benchmark.ComposeBenchmarkBase
-import androidx.compose.collection.ExperimentalCollectionApi
-import androidx.compose.collection.MutableVector
-import androidx.compose.collection.mutableVectorOf
+import androidx.compose.runtime.benchmark.ComposeBenchmarkBase
+import androidx.compose.runtime.collection.ExperimentalCollectionApi
+import androidx.compose.runtime.collection.MutableVector
+import androidx.compose.runtime.collection.mutableVectorOf
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.compose.ui.util.fastAny
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/dbmonster/DbMonster.kt
similarity index 92%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/dbmonster/DbMonster.kt
index 82c55ae..67c0a9b 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/dbmonster/DbMonster.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/dbmonster/DbMonster.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.dbmonster
+package androidx.compose.runtime.benchmark.dbmonster
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt
similarity index 96%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt
index e866cb6..d2f9149 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/deeptree/DeepTree.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/deeptree/DeepTree.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.deeptree
+package androidx.compose.runtime.benchmark.deeptree
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/README.md b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/README.md
similarity index 100%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/README.md
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/README.md
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_DataModels.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_DataModels.kt
similarity index 97%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_DataModels.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_DataModels.kt
index 40121f3..a7d8191 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_DataModels.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_DataModels.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.realworld4
+package androidx.compose.runtime.benchmark.realworld4
 
 /**
  * RealWorld4 is a performance test that attempts to simulate a real-world application of reasonably
  * large scale (eg. gmail-sized application).
  */
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.graphics.Color
 
 class RealWorld4_DataModel_09() {
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_UnmemoizablePojos.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_UnmemoizablePojos.kt
similarity index 99%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_UnmemoizablePojos.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_UnmemoizablePojos.kt
index cd10155..78658f3 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_UnmemoizablePojos.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_UnmemoizablePojos.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.realworld4
+package androidx.compose.runtime.benchmark.realworld4
 
 /**
  * RealWorld4 is a performance test that attempts to simulate a real-world application of reasonably
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Utilities.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_Utilities.kt
similarity index 97%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Utilities.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_Utilities.kt
index 2296878..23308ba 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Utilities.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_Utilities.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.realworld4
+package androidx.compose.runtime.benchmark.realworld4
 
 import androidx.compose.ui.graphics.Color
 import java.util.Random
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/runtime/benchmark/realworld4/RealWorld4_Widgets.kt
similarity index 99%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/realworld4/RealWorld4_Widgets.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/realworld4/RealWorld4_Widgets.kt
index 0e67361..ed455e6 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/runtime/benchmark/realworld4/RealWorld4_Widgets.kt
@@ -17,14 +17,14 @@
 // TODO remove this after converting this file's use of legacy modifier construction
 @file:Suppress("DEPRECATION")
 
-package androidx.compose.benchmark.realworld4
+package androidx.compose.runtime.benchmark.realworld4
 
 /**
  * RealWorld4 is a performance test that attempts to simulate a real-world application of reasonably
  * large scale (eg. gmail-sized application).
  */
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.compose.ui.graphics.Color
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/siblings/SiblingManagement.kt
similarity index 96%
rename from compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
rename to compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/siblings/SiblingManagement.kt
index 48e8e99..a2601ab 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/benchmark/siblings/SiblingManagement.kt
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/androidTest/java/androidx/compose/runtime/benchmark/siblings/SiblingManagement.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.benchmark.siblings
+package androidx.compose.runtime.benchmark.siblings
 
-import androidx.compose.Composable
-import androidx.compose.key
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.key
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
diff --git a/compose/compose-runtime/compose-runtime-benchmark/src/main/AndroidManifest.xml b/compose/compose-runtime/compose-runtime-benchmark/src/main/AndroidManifest.xml
index 4979ece..1a38660 100644
--- a/compose/compose-runtime/compose-runtime-benchmark/src/main/AndroidManifest.xml
+++ b/compose/compose-runtime/compose-runtime-benchmark/src/main/AndroidManifest.xml
@@ -13,4 +13,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest package="androidx.compose.benchmark"/>
\ No newline at end of file
+<manifest package="androidx.compose.runtime.benchmark"/>
\ No newline at end of file
diff --git a/compose/compose-runtime/lint-baseline.xml b/compose/compose-runtime/lint-baseline.xml
index 534f5b9..4cd5e4f 100644
--- a/compose/compose-runtime/lint-baseline.xml
+++ b/compose/compose-runtime/lint-baseline.xml
@@ -7,7 +7,7 @@
         errorLine1="/*inline*/ fun &lt;T> memo(calculation: () -> T) = remember { calculation() }"
         errorLine2="                                                           ~~~~~~~~~~~">
         <location
-            file="src/commonMain/kotlin/androidx/compose/Remember.kt"
+            file="src/commonMain/kotlin/androidx/compose/runtime/Remember.kt"
             line="99"
             column="60"/>
     </issue>
@@ -18,7 +18,7 @@
         errorLine1=") = remember(v1) { calculation() }"
         errorLine2="                   ~~~~~~~~~~~">
         <location
-            file="src/commonMain/kotlin/androidx/compose/Remember.kt"
+            file="src/commonMain/kotlin/androidx/compose/runtime/Remember.kt"
             line="117"
             column="20"/>
     </issue>
@@ -29,7 +29,7 @@
         errorLine1=") = remember(v1, v2) { calculation() }"
         errorLine2="                       ~~~~~~~~~~~">
         <location
-            file="src/commonMain/kotlin/androidx/compose/Remember.kt"
+            file="src/commonMain/kotlin/androidx/compose/runtime/Remember.kt"
             line="137"
             column="24"/>
     </issue>
@@ -40,7 +40,7 @@
         errorLine1="fun &lt;T> memo(vararg inputs: Any?, calculation: () -> T) = remember(*inputs) { calculation() }"
         errorLine2="                                                                              ~~~~~~~~~~~">
         <location
-            file="src/commonMain/kotlin/androidx/compose/Remember.kt"
+            file="src/commonMain/kotlin/androidx/compose/runtime/Remember.kt"
             line="152"
             column="79"/>
     </issue>
diff --git a/compose/compose-runtime/samples/src/main/AndroidManifest.xml b/compose/compose-runtime/samples/src/main/AndroidManifest.xml
index 6fc638b..f0b7797 100644
--- a/compose/compose-runtime/samples/src/main/AndroidManifest.xml
+++ b/compose/compose-runtime/samples/src/main/AndroidManifest.xml
@@ -13,4 +13,4 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<manifest package="androidx.compose.samples" />
+<manifest package="androidx.compose.runtime.samples" />
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/AmbientSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/AmbientSamples.kt
similarity index 89%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/AmbientSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/AmbientSamples.kt
index 9ff2d92..a79ffb3 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/AmbientSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/AmbientSamples.kt
@@ -16,12 +16,12 @@
 
 @file:Suppress("unused", "UNUSED_PARAMETER", "UNUSED_VARIABLE", "LocalVariableName")
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.ambientOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.ambientOf
 
 @Sampled
 fun createAmbient() {
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/CustomTreeCompositionSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt
similarity index 84%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/CustomTreeCompositionSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt
index 1e958f8..88548d3 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/CustomTreeCompositionSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/CustomTreeCompositionSamples.kt
@@ -14,19 +14,19 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.AbstractApplier
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.compositionFor
-import androidx.compose.emit
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.AbstractApplier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.compositionFor
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 
 @Suppress("unused")
 @OptIn(ExperimentalComposeApi::class)
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/EffectSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/EffectSamples.kt
similarity index 89%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/EffectSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/EffectSamples.kt
index 05a28b0..b588be7 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/EffectSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/EffectSamples.kt
@@ -14,17 +14,17 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.getValue
-import androidx.compose.key
-import androidx.compose.onCommit
-import androidx.compose.setValue
-import androidx.compose.state
-import androidx.compose.stateFor
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.key
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
+import androidx.compose.runtime.stateFor
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Row
 import androidx.compose.material.Button
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/FlowAdapterSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/FlowAdapterSamples.kt
similarity index 86%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/FlowAdapterSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/FlowAdapterSamples.kt
index 4086d27..bc42ebd 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/FlowAdapterSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/FlowAdapterSamples.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.collectAsState
-import androidx.compose.getValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.collectAsState
+import androidx.compose.runtime.getValue
 import androidx.compose.foundation.Text
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.Flow
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ImmutableSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/ImmutableSamples.kt
similarity index 91%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ImmutableSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/ImmutableSamples.kt
index a821930..6293e58 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ImmutableSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/ImmutableSamples.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.Immutable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.Column
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/KeySamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/KeySamples.kt
similarity index 93%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/KeySamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/KeySamples.kt
index 07dd29e..16ffac7 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/KeySamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/KeySamples.kt
@@ -16,11 +16,11 @@
 
 @file:Suppress("unused", "UNUSED_PARAMETER", "UNUSED_VARIABLE")
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.key
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.key
 
 @Sampled
 @Composable
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt
similarity index 87%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt
index 4100bc6..a7919a7 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/ModelSamples.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.Text
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.material.Button
 
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt
similarity index 86%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt
index 7454c34..93bd48e 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateListSamples.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.mutableStateListOf
-import androidx.compose.state
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.mutableStateListOf
+import androidx.compose.runtime.state
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt
similarity index 89%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt
index 4095e61..4fdf50f 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/MutableStateMapSample.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.mutableStateMapOf
-import androidx.compose.state
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.mutableStateMapOf
+import androidx.compose.runtime.state
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SharedSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SharedSamples.kt
similarity index 91%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SharedSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SharedSamples.kt
index f2270c3..5030ff4 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SharedSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SharedSamples.kt
@@ -16,9 +16,9 @@
 
 @file:Suppress("UNUSED_PARAMETER", "unused")
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 @Composable
 internal fun ProfileIcon(src: String) {}
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SlotTableSamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SlotTableSamples.kt
similarity index 94%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SlotTableSamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SlotTableSamples.kt
index 0a90538..41bef85 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SlotTableSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SlotTableSamples.kt
@@ -16,10 +16,10 @@
 
 @file:Suppress("unused", "UNUSED_PARAMETER")
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 @Sampled
 @Composable
diff --git a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SnapshotMutationPolicySamples.kt b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotMutationPolicySamples.kt
similarity index 87%
rename from compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SnapshotMutationPolicySamples.kt
rename to compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotMutationPolicySamples.kt
index 79a6ff7..336d34f 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/SnapshotMutationPolicySamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/runtime/samples/SnapshotMutationPolicySamples.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.compose.samples
+package androidx.compose.runtime.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.MutableState
-import androidx.compose.SnapshotMutationPolicy
-import androidx.compose.mutableStateOf
-import androidx.compose.snapshots.takeMutableSnapshot
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.SnapshotMutationPolicy
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.snapshots.takeMutableSnapshot
 
 @Sampled
 @OptIn(ExperimentalComposeApi::class)
diff --git a/compose/compose-runtime/src/androidAndroidTest/AndroidManifest.xml b/compose/compose-runtime/src/androidAndroidTest/AndroidManifest.xml
index e74aed9f..5bf13bc 100644
--- a/compose/compose-runtime/src/androidAndroidTest/AndroidManifest.xml
+++ b/compose/compose-runtime/src/androidAndroidTest/AndroidManifest.xml
@@ -14,11 +14,12 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="androidx.compose">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="androidx.compose.runtime">
      <application>
           <activity
-              android:name="androidx.compose.test.TestActivity"/>
+              android:name="androidx.compose.runtime.TestActivity"/>
           <activity
-              android:name="androidx.compose.test.DisposeTests$DisposeTestActivity"/>
+              android:name="androidx.compose.runtime.DisposeTests$DisposeTestActivity"/>
      </application>
 </manifest>
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/AmbientTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/AmbientTests.kt
similarity index 96%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/AmbientTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/AmbientTests.kt
index 4766d0a..552bd27 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/AmbientTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/AmbientTests.kt
@@ -15,22 +15,9 @@
  */
 
 @file:OptIn(ExperimentalComposeApi::class)
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.widget.TextView
-import androidx.compose.Ambient
-import androidx.compose.Composable
-import androidx.compose.ComposableContract
-import androidx.compose.CompositionReference
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Providers
-import androidx.compose.Recomposer
-import androidx.compose.ambientOf
-import androidx.compose.compositionReference
-import androidx.compose.invalidate
-import androidx.compose.remember
-import androidx.compose.staticAmbientOf
-import androidx.compose.structuralEqualityPolicy
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import androidx.ui.core.ExperimentalLayoutNodeApi
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/BaseComposeTest.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/BaseComposeTest.kt
similarity index 91%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/BaseComposeTest.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/BaseComposeTest.kt
index c6d4cac..6438837 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/BaseComposeTest.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/BaseComposeTest.kt
@@ -15,7 +15,7 @@
  */
 
 @file:Suppress("PLUGIN_ERROR")
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.os.Bundle
 import android.widget.LinearLayout
@@ -25,16 +25,7 @@
 import android.app.Activity
 import android.os.Looper
 import android.view.ViewGroup
-import androidx.compose.ChoreographerFrameCallback
-import androidx.compose.Composable
-import androidx.compose.ComposableContract
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Providers
-import androidx.compose.Recomposer
-import androidx.compose.compositionReference
-import androidx.compose.remember
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.ui.core.ContextAmbient
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.LayoutNode
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/ComposeIntoTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt
similarity index 91%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/ComposeIntoTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt
index eb5cf92..6d078ef 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/ComposeIntoTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeIntoTests.kt
@@ -14,20 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.os.HandlerThread
-import androidx.compose.Composable
-import androidx.compose.ComposableContract
-import androidx.compose.Composer
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.clearRoots
-import androidx.compose.currentComposer
-import androidx.compose.invalidate
-import androidx.compose.mutableStateOf
-import androidx.compose.onActive
-import androidx.compose.onCommit
 import androidx.core.os.HandlerCompat
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/ComposeModelTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeModelTests.kt
similarity index 94%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/ComposeModelTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeModelTests.kt
index dafa81c..480bf9c 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/ComposeModelTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/ComposeModelTests.kt
@@ -14,17 +14,13 @@
  * limitations under the License.
  */
 @file:Suppress("PLUGIN_ERROR")
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.widget.TextView
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.clearRoots
-import androidx.compose.mutableStateOf
-import androidx.compose.snapshots.StateObject
-import androidx.compose.snapshots.StateRecord
-import androidx.compose.snapshots.readable
-import androidx.compose.snapshots.writable
+import androidx.compose.runtime.snapshots.StateObject
+import androidx.compose.runtime.snapshots.StateRecord
+import androidx.compose.runtime.snapshots.readable
+import androidx.compose.runtime.snapshots.writable
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import junit.framework.TestCase.assertEquals
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/CompoundHashKeyTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt
similarity index 91%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/CompoundHashKeyTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt
index 263b85d..b8c38ca 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/CompoundHashKeyTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/CompoundHashKeyTests.kt
@@ -15,13 +15,8 @@
  */
 
 @file:OptIn(ExperimentalComposeApi::class)
-package androidx.compose.test
+package androidx.compose.runtime
 
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.currentComposer
-import androidx.compose.invalidate
-import androidx.compose.key
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import org.junit.Rule
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/DisposeTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/DisposeTests.kt
similarity index 89%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/DisposeTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/DisposeTests.kt
index aad6292..608b75b 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/DisposeTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/DisposeTests.kt
@@ -14,15 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.compose.test
+package androidx.compose.runtime
 
-import androidx.compose.Composable
-import androidx.compose.ComposableContract
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.clearRoots
-import androidx.compose.onActive
-import androidx.compose.onPreCommit
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import junit.framework.TestCase
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/EffectsTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/EffectsTests.kt
similarity index 97%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/EffectsTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/EffectsTests.kt
index 37b5b38..8d1aaf2 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/EffectsTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/EffectsTests.kt
@@ -14,24 +14,10 @@
  * limitations under the License.
  */
 @file:Suppress("PLUGIN_ERROR")
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.widget.Button
 import android.widget.TextView
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.State
-import androidx.compose.ambientOf
-import androidx.compose.clearRoots
-import androidx.compose.getValue
-import androidx.compose.invalidate
-import androidx.compose.mutableStateOf
-import androidx.compose.onCommit
-import androidx.compose.onDispose
-import androidx.compose.onPreCommit
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import junit.framework.TestCase.assertEquals
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/EmittableComposer.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt
similarity index 96%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/EmittableComposer.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt
index 0be9e33..70747bf 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/EmittableComposer.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/EmittableComposer.kt
@@ -13,13 +13,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.view.View
 import android.widget.TextView
 import android.widget.Button
 import android.widget.LinearLayout
-import androidx.compose.Composable
 import androidx.ui.viewinterop.emitView
 
 @Composable
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/FlowAdapterTest.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt
similarity index 97%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/FlowAdapterTest.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt
index b8f6a44..06972912 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/FlowAdapterTest.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/FlowAdapterTest.kt
@@ -14,12 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.compose.test
+package androidx.compose.runtime
 
-import androidx.compose.collectAsState
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/NewCodeGenTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt
similarity index 97%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/NewCodeGenTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt
index 3fed09d..d823570 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/NewCodeGenTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/NewCodeGenTests.kt
@@ -15,16 +15,10 @@
  */
 @file:Suppress("UNUSED_PARAMETER", "UNUSED_VARIABLE", "ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE")
 
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.widget.LinearLayout
 import android.widget.TextView
-import androidx.compose.Composable
-import androidx.compose.clearRoots
-import androidx.compose.getValue
-import androidx.compose.key
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import junit.framework.TestCase
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
similarity index 97%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
index 4b0cb26..51c43c1 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RecomposerTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/RecomposerTests.kt
@@ -14,22 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.view.View
 import android.view.ViewGroup
 import android.widget.LinearLayout
 import android.widget.TextView
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.clearRoots
-import androidx.compose.getValue
-import androidx.compose.invalidate
-import androidx.compose.key
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.snapshots.currentSnapshot
+import androidx.compose.runtime.snapshots.currentSnapshot
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import junit.framework.TestCase.assertEquals
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RestartTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/RestartTests.kt
similarity index 97%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RestartTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/RestartTests.kt
index d1a2f03..baac2c1 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/RestartTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/RestartTests.kt
@@ -14,14 +14,10 @@
  * limitations under the License.
  */
 @file:Suppress("PLUGIN_ERROR", "DEPRECATION")
-package androidx.compose.test
+package androidx.compose.runtime
 
 import android.os.Debug
 import android.widget.TextView
-import androidx.compose.Composable
-import androidx.compose.ComposableContract
-import androidx.compose.clearRoots
-import androidx.compose.mutableStateOf
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
diff --git a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/SuspendingEffectsTests.kt b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt
similarity index 92%
rename from compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/SuspendingEffectsTests.kt
rename to compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt
index a5a75e0..84b49a7 100644
--- a/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/test/SuspendingEffectsTests.kt
+++ b/compose/compose-runtime/src/androidAndroidTest/kotlin/androidx/compose/runtime/SuspendingEffectsTests.kt
@@ -14,17 +14,8 @@
  * limitations under the License.
  */
 
-package androidx.compose.test
+package androidx.compose.runtime
 
-import androidx.compose.ChoreographerFrameCallback
-import androidx.compose.Recomposer
-import androidx.compose.clearRoots
-import androidx.compose.getValue
-import androidx.compose.launchInComposition
-import androidx.compose.mutableStateOf
-import androidx.compose.onPreCommit
-import androidx.compose.rememberCoroutineScope
-import androidx.compose.setValue
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
 import kotlinx.coroutines.CoroutineScope
diff --git a/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/ActualAndroid.kt b/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/runtime/ActualAndroid.kt
similarity index 98%
rename from compose/compose-runtime/src/androidMain/kotlin/androidx/compose/ActualAndroid.kt
rename to compose/compose-runtime/src/androidMain/kotlin/androidx/compose/runtime/ActualAndroid.kt
index a981c83..fe95a79 100644
--- a/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/ActualAndroid.kt
+++ b/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/runtime/ActualAndroid.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import android.os.Handler
 import android.os.Looper
diff --git a/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/KeySourceInfo.kt b/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/runtime/KeySourceInfo.kt
similarity index 96%
rename from compose/compose-runtime/src/androidMain/kotlin/androidx/compose/KeySourceInfo.kt
rename to compose/compose-runtime/src/androidMain/kotlin/androidx/compose/runtime/KeySourceInfo.kt
index bfea323..bc40929 100644
--- a/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/KeySourceInfo.kt
+++ b/compose/compose-runtime/src/androidMain/kotlin/androidx/compose/runtime/KeySourceInfo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 internal val keyInfo = mutableMapOf<Int, String>()
 
@@ -49,7 +49,7 @@
             //  4 or 5: <calling method>
             val frame = stack
                 .drop(3) // The first 3 elements are never interesting to us
-                .dropWhile { it.className.startsWith("androidx.compose.Composer") } // Drop all
+                .dropWhile { it.className.startsWith("androidx.compose.runtime.Composer") } // Drop all
                 // start*
                 .drop(1) // Drop non-inline call/emit
                 .dropWhile { it.lineNumber == -1 } // Drop if we do not have source info
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Ambient.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Ambient.kt
similarity index 93%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Ambient.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Ambient.kt
index b42dc04..9322931 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Ambient.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Ambient.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * Compose passes data through the composition tree explicitly through means of parameters to
@@ -35,24 +35,24 @@
  * create a default value in cases where an ambient is used without a Provider. If this is a
  * situation you would rather not handle, you can throw an error in this factory
  *
- * @sample androidx.compose.samples.createAmbient
+ * @sample androidx.compose.runtime.samples.createAmbient
  *
  * Somewhere up the tree, a [Providers] component can be used, which provides a value for the
  * ambient. This would often be at the "root" of a tree, but could be anywhere, and can also be
  * used in multiple places to override the provided value for a sub-tree.
  *
- * @sample androidx.compose.samples.ambientProvider
+ * @sample androidx.compose.runtime.samples.ambientProvider
  *
  * Intermediate components do not need to know about the ambient value, and can have zero
  * dependencies on it. For example, `SomeScreen` might look like this:
  *
- * @sample androidx.compose.samples.someScreenSample
+ * @sample androidx.compose.runtime.samples.someScreenSample
  *
  * Finally, a component that wishes to consume the ambient value can use the [current]
  * property of the ambient key which returns the current value of the ambient, and subscribes the
  * component to changes of it.
  *
- * @sample androidx.compose.samples.consumeAmbient
+ * @sample androidx.compose.runtime.samples.consumeAmbient
  */
 @Stable
 sealed class Ambient<T> constructor(defaultFactory: (() -> T)? = null) {
@@ -66,7 +66,7 @@
      * Return the value provided by the nearest [Providers] component that invokes, directly or
      * indirectly, the composable function that uses this property.
      *
-     * @sample androidx.compose.samples.consumeAmbient
+     * @sample androidx.compose.runtime.samples.consumeAmbient
      */
     @ComposableContract(readonly = true)
     @Composable
@@ -163,7 +163,7 @@
  * [Ambient.current] will return the value provided in [Providers]'s [values] parameter for all
  * composable functions called directly or indirectly in the [children] lambda.
  *
- * @sample androidx.compose.samples.ambientProvider
+ * @sample androidx.compose.runtime.samples.ambientProvider
  *
  * @see Ambient
  * @see ambientOf
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Applier.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Applier.kt
similarity index 95%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Applier.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Applier.kt
index 963836b..dc44b78 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Applier.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Applier.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * An Applier is responsible for applying the tree-based operations that get emitted during a
@@ -23,7 +23,7 @@
  * A custom [Applier] implementation will be needed in order to utilize Compose to build and
  * maintain a tree of a novel type.
  *
- * @sample androidx.compose.samples.CustomTreeComposition
+ * @sample androidx.compose.runtime.samples.CustomTreeComposition
  *
  * @see AbstractApplier
  * @see compositionFor
@@ -83,7 +83,7 @@
 /**
  * An abstract [Applier] implementation that builds the tree "top down".
  *
- * @sample androidx.compose.samples.CustomTreeComposition
+ * @sample androidx.compose.runtime.samples.CustomTreeComposition
  *
  * @see Applier
  * @see compositionFor
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/BitwiseOperators.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/BitwiseOperators.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/BitwiseOperators.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/BitwiseOperators.kt
index 98ce237..024c2b5 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/BitwiseOperators.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/BitwiseOperators.kt
@@ -15,7 +15,7 @@
  */
 
 @file:Suppress("NOTHING_TO_INLINE")
-package androidx.compose
+package androidx.compose.runtime
 
 @OptIn(ExperimentalStdlibApi::class)
 internal inline infix fun Int.ror(other: Int) = this.rotateRight(other)
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/BroadcastFrameClock.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/BroadcastFrameClock.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt
index cdce77f..38d696e 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/BroadcastFrameClock.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/BroadcastFrameClock.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
 import kotlinx.coroutines.suspendCancellableCoroutine
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composable.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composable.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composable.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composable.kt
index 5bc48cb..de94b47 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composable.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composable.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * [Composable] functions are the fundamental building blocks of an application built with Compose.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ComposableContract.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposableContract.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ComposableContract.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposableContract.kt
index aa7a93a..4a820a8 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ComposableContract.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposableContract.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * This annotation can be applied to [Composable] functions and provide metadata to the compiler
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Compose.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Compose.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Compose.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Compose.kt
index cf01af8..c042129 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Compose.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Compose.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 private val EmptyComposable: @Composable () -> Unit = {}
 
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ComposeCompilerApi.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeCompilerApi.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ComposeCompilerApi.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeCompilerApi.kt
index e7be2ad..f08fcbb 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ComposeCompilerApi.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ComposeCompilerApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 @RequiresOptIn(
     level = RequiresOptIn.Level.WARNING,
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
index f2e82eb..0f14990 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composer.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composer.kt
@@ -19,10 +19,10 @@
     ExperimentalComposeApi::class,
     ComposeCompilerApi::class
 )
-package androidx.compose
+package androidx.compose.runtime
 
-import androidx.compose.SlotTable.Companion.EMPTY
-import androidx.compose.tooling.InspectionTables
+import androidx.compose.runtime.SlotTable.Companion.EMPTY
+import androidx.compose.runtime.tooling.InspectionTables
 
 internal typealias Change<N> = (
     applier: Applier<N>,
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composition.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composition.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
index fefe242..ea34c37 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Composition.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Composition.kt
@@ -15,7 +15,7 @@
  */
 
 @file:OptIn(InternalComposeApi::class)
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * A composition object is usually constructed for you, and returned from an API that
@@ -46,7 +46,7 @@
  * It is important to call [Composition.dispose] whenever this [key] is no longer needed in
  * order to release resources.
  *
- * @sample androidx.compose.samples.CustomTreeComposition
+ * @sample androidx.compose.runtime.samples.CustomTreeComposition
  *
  * @param key The object this composition will be tied to. Only one [Composition] will be created
  * for a given [key]. If the same [key] is passed in subsequent calls, the same [Composition]
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionFrameClock.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionFrameClock.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionFrameClock.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionFrameClock.kt
index a0160f9..afb5fe3 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionFrameClock.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionFrameClock.kt
@@ -15,7 +15,7 @@
  */
 
 // TODO(b/158105080): make part of ComposeRuntime
-package androidx.compose
+package androidx.compose.runtime
 
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
 import androidx.compose.runtime.dispatch.withFrameMillis as withFrameMillisDispatch
@@ -87,7 +87,7 @@
 @Suppress("DEPRECATION")
 @Deprecated(
     "renamed to withFrameMillis",
-    ReplaceWith("withFrameMillis(onFrame)", "androidx.compose.withFrameMillis")
+    ReplaceWith("withFrameMillis(onFrame)", "androidx.compose.runtime.withFrameMillis")
 )
 suspend inline fun <R> CompositionFrameClock.awaitFrameMillis(
     crossinline onFrame: (frameTimeMillis: Long) -> R
@@ -123,6 +123,6 @@
 @Suppress("DEPRECATION")
 @Deprecated(
     "callers will resume after missing the frame on most dispatchers",
-    ReplaceWith("withFrameMillis { it }", "androidx.compose.withFrameMillis")
+    ReplaceWith("withFrameMillis { it }", "androidx.compose.runtime.withFrameMillis")
 )
 suspend fun CompositionFrameClock.awaitFrameMillis(): Long = withFrameMillis { it }
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionLifecycleObserver.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionLifecycleObserver.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionLifecycleObserver.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionLifecycleObserver.kt
index ef4b25e6..56dc3de 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionLifecycleObserver.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionLifecycleObserver.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * Objects implementing this interface are notified when they are initially
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionReference.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionReference.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionReference.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionReference.kt
index fdd3b97..189b796 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/CompositionReference.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/CompositionReference.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * A [CompositionReference] is an opaque type that is used to logically "link" two compositions
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Effects.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Effects.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt
index ac2bd4b..b32f511 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Effects.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Effects.kt
@@ -15,7 +15,7 @@
  */
 
 @file:Suppress("unused")
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * A CommitScope represents an object that executes some code and has a cleanup in the context of the Composition lifecycle.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/EmbeddingContext.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/EmbeddingContext.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/EmbeddingContext.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/EmbeddingContext.kt
index 5637561..6ead116 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/EmbeddingContext.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/EmbeddingContext.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlin.coroutines.CoroutineContext
 
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Emit.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Emit.kt
similarity index 94%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Emit.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Emit.kt
index f02f4f5..0d38333 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Emit.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Emit.kt
@@ -15,7 +15,7 @@
  */
 
 @file:OptIn(ComposeCompilerApi::class, ExperimentalComposeApi::class)
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * Emits a node into the composition of type [T].
@@ -23,7 +23,7 @@
  * This function will throw a runtime exception if [E] is not a subtype of the applier of the
  * [currentComposer].
  *
- * @sample androidx.compose.samples.CustomTreeComposition
+ * @sample androidx.compose.runtime.samples.CustomTreeComposition
  *
  * @param ctor A function which will create a new instance of [T]. This function is NOT
  * guaranteed to be called in place.
@@ -61,7 +61,7 @@
  * This function will throw a runtime exception if [E] is not a subtype of the applier of the
  * [currentComposer].
  *
- * @sample androidx.compose.samples.CustomTreeComposition
+ * @sample androidx.compose.runtime.samples.CustomTreeComposition
  *
  * @param ctor A function which will create a new instance of [T]. This function is NOT
  * guaranteed to be called in place.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Expect.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Expect.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Expect.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Expect.kt
index 6efaf33..a90b834 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Expect.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Expect.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 // TODO(aelias): Mark the typealiases internal when https://youtrack.jetbrains.com/issue/KT-36695 is fixed.
 // Currently, they behave as internal because the actual is internal, even though the expect is public.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ExperimentalComposeApi.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ExperimentalComposeApi.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ExperimentalComposeApi.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ExperimentalComposeApi.kt
index dddbe3a..bdf8437 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ExperimentalComposeApi.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ExperimentalComposeApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 @RequiresOptIn(
     level = RequiresOptIn.Level.ERROR,
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/FrameManager.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/FrameManager.kt
similarity index 95%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/FrameManager.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/FrameManager.kt
index a523657..6761ccc 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/FrameManager.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/FrameManager.kt
@@ -19,14 +19,14 @@
     InternalComposeApi::class
 )
 
-package androidx.compose
+package androidx.compose.runtime
 
-import androidx.compose.snapshots.MutableSnapshot
-import androidx.compose.snapshots.Snapshot
-import androidx.compose.snapshots.SnapshotApplyResult
-import androidx.compose.snapshots.SnapshotWriteObserver
-import androidx.compose.snapshots.currentSnapshot
-import androidx.compose.snapshots.takeMutableSnapshot
+import androidx.compose.runtime.snapshots.MutableSnapshot
+import androidx.compose.runtime.snapshots.Snapshot
+import androidx.compose.runtime.snapshots.SnapshotApplyResult
+import androidx.compose.runtime.snapshots.SnapshotWriteObserver
+import androidx.compose.runtime.snapshots.currentSnapshot
+import androidx.compose.runtime.snapshots.takeMutableSnapshot
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.SupervisorJob
@@ -128,7 +128,7 @@
         "The frame manager no longer manages a 'frame' in the main thread but global state does " +
                 "not send change notifications until Snapshot.applyGlobalSnapshot() is called. " +
                 "Consider calling Snapshot.sendApplyNotifications() instead.",
-        ReplaceWith("Snapshot.applyGlobalSnapshot()", "androidx.compose.snapshots.Snapshot")
+        ReplaceWith("Snapshot.applyGlobalSnapshot()", "androidx.compose.runtime.snapshots.Snapshot")
     )
     fun nextFrame() {
         Snapshot.sendApplyNotifications()
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Immutable.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Immutable.kt
similarity index 94%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Immutable.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Immutable.kt
index fa77a22..f85bdd1 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Immutable.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Immutable.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * [Immutable] can be used to mark class as producing immutable instances. The immutability of the
@@ -31,7 +31,7 @@
  * be marked as [Immutable] if the types of properties are either primitive types or also
  * [Immutable]:
  *
- * @sample androidx.compose.samples.simpleImmutableClass
+ * @sample androidx.compose.runtime.samples.simpleImmutableClass
  *
  * Marking `Person` immutable allows calls the `PersonView` [Composable] function to be skipped if
  * it is the same `person` as it was during the last composition.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/InternalComposeApi.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/InternalComposeApi.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/InternalComposeApi.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/InternalComposeApi.kt
index c160d52..809a56d 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/InternalComposeApi.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/InternalComposeApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 @RequiresOptIn(
     level = RequiresOptIn.Level.ERROR,
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/JoinedKey.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/JoinedKey.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/JoinedKey.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/JoinedKey.kt
index ab28f60..348a4cf 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/JoinedKey.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/JoinedKey.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 internal data class JoinedKey(
     val left: Any?,
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Key.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Key.kt
similarity index 88%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Key.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Key.kt
index efb363b..95f32b3 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Key.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Key.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * [key] is a utility composable that is used to "group" or "key" a block of execution inside of a
@@ -26,7 +26,7 @@
  *
  * For instance, consider the following example:
  *
- * @sample androidx.compose.samples.locallyUniqueKeys
+ * @sample androidx.compose.runtime.samples.locallyUniqueKeys
  *
  * Even though there are users with the same id composed in both the top and the bottom loop,
  * because they are different calls to [key], there is no need to create compound keys.
@@ -36,17 +36,17 @@
  *
  * For instance, consider the following example:
  *
- * @sample androidx.compose.samples.notAlwaysUniqueKeys
+ * @sample androidx.compose.runtime.samples.notAlwaysUniqueKeys
  *
  * This example assumes that `parent.id` is a unique key for each item in the collection,
  * but this is only true if it is fair to assume that a parent will only ever have a single child,
  * which may not be the case.  Instead, it may be more correct to do the following:
  *
- * @sample androidx.compose.samples.moreCorrectUniqueKeys
+ * @sample androidx.compose.runtime.samples.moreCorrectUniqueKeys
  *
  * A compound key can be created by passing in multiple arguments:
  *
- * @sample androidx.compose.samples.twoInputsKeySample
+ * @sample androidx.compose.runtime.samples.twoInputsKeySample
  *
  * @param inputs The set of values to be used to create a compound key. These will be compared to
  * their previous values using [equals] and [hashCode]
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/KeySourceInfo.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/KeySourceInfo.kt
similarity index 95%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/KeySourceInfo.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/KeySourceInfo.kt
index ea64490..2b79383 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/KeySourceInfo.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/KeySourceInfo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 internal expect fun recordSourceKeyInfo(key: Any)
 
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Latch.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Latch.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt
index 1c1081b..6be6d1a 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Latch.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Latch.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlinx.coroutines.suspendCancellableCoroutine
 import kotlin.coroutines.Continuation
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/MutableState.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/MutableState.kt
similarity index 91%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/MutableState.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/MutableState.kt
index 60b0867..481da85 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/MutableState.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/MutableState.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
-import androidx.compose.snapshots.MutableSnapshot
-import androidx.compose.snapshots.Snapshot
-import androidx.compose.snapshots.SnapshotStateList
-import androidx.compose.snapshots.SnapshotStateMap
-import androidx.compose.snapshots.StateObject
-import androidx.compose.snapshots.StateRecord
-import androidx.compose.snapshots.readable
-import androidx.compose.snapshots.takeSnapshot
-import androidx.compose.snapshots.withCurrent
-import androidx.compose.snapshots.writable
+import androidx.compose.runtime.snapshots.MutableSnapshot
+import androidx.compose.runtime.snapshots.Snapshot
+import androidx.compose.runtime.snapshots.SnapshotStateList
+import androidx.compose.runtime.snapshots.SnapshotStateMap
+import androidx.compose.runtime.snapshots.StateObject
+import androidx.compose.runtime.snapshots.StateRecord
+import androidx.compose.runtime.snapshots.readable
+import androidx.compose.runtime.snapshots.takeSnapshot
+import androidx.compose.runtime.snapshots.withCurrent
+import androidx.compose.runtime.snapshots.writable
 import kotlin.reflect.KProperty
 
 /**
@@ -40,21 +40,21 @@
  * is to store the returned state value into a local immutable variable, and then set the
  * [MutableState.value] property on it.
  *
- * @sample androidx.compose.samples.SimpleStateSample
+ * @sample androidx.compose.runtime.samples.SimpleStateSample
  *
- * @sample androidx.compose.samples.stateSample
+ * @sample androidx.compose.runtime.samples.stateSample
  *
  * In this example, `LoginScreen` is recomposed every time the username and password of the model
  * updates, keeping the UI synchronized with the state.
  *
  * Additionally, you can destructure the [MutableState] object into a value and a "setter" function.
  *
- * @sample androidx.compose.samples.DestructuredStateSample
+ * @sample androidx.compose.runtime.samples.DestructuredStateSample
  *
  * Finally, the [MutableState] instance can be used as a variable delegate to a local mutable
  * variable.
  *
- * @sample androidx.compose.samples.DelegatedStateSample
+ * @sample androidx.compose.runtime.samples.DelegatedStateSample
  *
  * @param policy a policy to control how changes are handled in mutable snapshots.
 
@@ -86,7 +86,7 @@
  * @param init A factory function to create the initial value of this state
  * @return An instance of [MutableState] that wraps the value.
  *
- * @sample androidx.compose.samples.observeUserSample
+ * @sample androidx.compose.runtime.samples.observeUserSample
  *
  * @see [state]
  * @see [remember]
@@ -179,7 +179,7 @@
     "areEquivalent callbacks have been replaced by MutableStateSnapshotPolicy",
     ReplaceWith(
         "referenceEqualityPolicy()",
-        "androidx.compose.referenceEqualityPolicy"
+        "androidx.compose.runtime.referenceEqualityPolicy"
     )
 )
 val ReferentiallyEqual = fun(old: Any?, new: Any?) = old === new
@@ -191,7 +191,7 @@
     "areEquivalent callbacks have been replaced by MutableStateSnapshotPolicy",
     ReplaceWith(
         "structuralEqualityPolicy()",
-        "androidx.compose.structuralEqualityPolicy"
+        "androidx.compose.runtime.structuralEqualityPolicy"
     )
 )
 val StructurallyEqual = fun(old: Any?, new: Any?) = old == new
@@ -207,7 +207,7 @@
     "areEquivalent callbacks have been replaced by MutableStateSnapshotPolicy",
     ReplaceWith(
         "neverEqualPolicy()",
-        "androidx.compose.neverEqualPolicy"
+        "androidx.compose.runtime.neverEqualPolicy"
     )
 )
 val NeverEqual = fun(_: Any?, _: Any?) = false
@@ -228,7 +228,7 @@
 /**
  * Permits property delegation of `val`s using `by` for [State].
  *
- * @sample androidx.compose.samples.DelegatedReadOnlyStateSample
+ * @sample androidx.compose.runtime.samples.DelegatedReadOnlyStateSample
  */
 @Suppress("NOTHING_TO_INLINE")
 inline operator fun <T> State<T>.getValue(thisObj: Any?, property: KProperty<*>): T = value
@@ -254,7 +254,7 @@
 /**
  * Permits property delegation of `var`s using `by` for [MutableState].
  *
- * @sample androidx.compose.samples.DelegatedStateSample
+ * @sample androidx.compose.runtime.samples.DelegatedStateSample
  */
 @Suppress("NOTHING_TO_INLINE")
 inline operator fun <T> MutableState<T>.setValue(thisObj: Any?, property: KProperty<*>, value: T) {
@@ -276,7 +276,7 @@
  * @see mutableStateOf
  * @see SnapshotMutationPolicy
  */
-@OptIn(androidx.compose.ExperimentalComposeApi::class)
+@OptIn(androidx.compose.runtime.ExperimentalComposeApi::class)
 private class SnapshotMutableState<T>(
     value: T,
     val policy: SnapshotMutationPolicy<T>
@@ -361,7 +361,7 @@
  * [structuralEqualityPolicy], or [neverEqualPolicy]. However, a custom mutation policy can be
  * created by implementing this interface, such as a counter policy,
  *
- * @sample androidx.compose.samples.counterSample
+ * @sample androidx.compose.runtime.samples.counterSample
  */
 interface SnapshotMutationPolicy<T> {
     /**
@@ -431,7 +431,7 @@
 /**
  * Create a instance of MutableList<T> that is observable and can be snapshot.
  *
- * @sample androidx.compose.samples.stateListSample
+ * @sample androidx.compose.runtime.samples.stateListSample
  *
  * @see mutableStateOf
  * @see mutableListOf
@@ -459,7 +459,7 @@
 /**
  * Create a instance of MutableSet<K, V> that is observable and can be snapshot.
  *
- * @sample androidx.compose.samples.stateMapSample
+ * @sample androidx.compose.runtime.samples.stateMapSample
  *
  * @see mutableStateOf
  * @see mutableMapOf
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/NoLiveLiterals.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/NoLiveLiterals.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/NoLiveLiterals.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/NoLiveLiterals.kt
index e255f86..e5b1846 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/NoLiveLiterals.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/NoLiveLiterals.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * This annotation is used to indicate to the Compose Compiler to not attempt to generate live
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ObserverMap.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ObserverMap.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ObserverMap.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ObserverMap.kt
index 5ebe73d..1616cfc 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ObserverMap.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ObserverMap.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * A map from a key to a set of values used for keeping the relation between some
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/OpaqueKey.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/OpaqueKey.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/OpaqueKey.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/OpaqueKey.kt
index 7effae8..bda78274 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/OpaqueKey.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/OpaqueKey.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * @param key This [String] should be hardcoded on the compile-time which allows the hashcode
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Recomposer.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Recomposer.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
index 9d7e6d1..fa47d6d 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Recomposer.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Recomposer.kt
@@ -18,11 +18,11 @@
     ExperimentalComposeApi::class,
     InternalComposeApi::class
 )
-package androidx.compose
+package androidx.compose.runtime
 
 import androidx.compose.runtime.dispatch.DefaultMonotonicFrameClock
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.snapshots.Snapshot
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.ExperimentalCoroutinesApi
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Remember.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Remember.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Remember.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Remember.kt
index 9e44c0e..d3c8d58 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Remember.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Remember.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * Remember the value produced by [calculation]. [calculation] will only be evaluated during the composition.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/SlotTable.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/SlotTable.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
index 323aaca..522ddce 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/SlotTable.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/SlotTable.kt
@@ -15,7 +15,7 @@
  */
 
 @file:OptIn(InternalComposeApi::class)
-package androidx.compose
+package androidx.compose.runtime
 
 @InternalComposeApi
 class SlotReader(val table: SlotTable) {
@@ -1058,14 +1058,14 @@
  * The intent is that groups represent memoized function calls and nodes represent views. For
  * example:
  *
- * @sample androidx.compose.samples.initialGroup
+ * @sample androidx.compose.runtime.samples.initialGroup
  *
  * the `LinearLayout` here would be a node (the linear layout view). The node contains the
  * groups for the child views of the linear layout.
  *
  * If contact's composition looks like:
  *
- * @sample androidx.compose.samples.contactSample
+ * @sample androidx.compose.runtime.samples.contactSample
  *
  * then composing contact into the linear layout would add two views to the linear layout's
  * children. The composition of contact creates groups, one for each text view. The groups for each
@@ -1075,7 +1075,7 @@
  *
  * If the order of jim and bob change:
  *
- * @sample androidx.compose.samples.reorderedGroup
+ * @sample androidx.compose.runtime.samples.reorderedGroup
  *
  * the previous result can be reused by moving the views generated bob's group before jim's (or vis
  * versa). A composition algorithm could use the key information for each group to determine if they
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Stable.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Stable.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Stable.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Stable.kt
index 3247a11..d371d89 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Stable.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Stable.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * Stable is used to communicate some guarantees to the compose compiler about how a certain type
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/StableMarker.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/StableMarker.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/StableMarker.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/StableMarker.kt
index 09e7c6f..54797d7 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/StableMarker.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/StableMarker.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * [StableMarker] marks an annotation as indicating a type is stable. A stable type obeys the
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Stack.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Stack.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Stack.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Stack.kt
index d825775..f0426b6 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Stack.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Stack.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 // TODO(b/139762913): Consider changing to inline class of ArrayList<T> to avoid wrapper class
 internal class Stack<T> {
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/SuspendingEffects.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/SuspendingEffects.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/SuspendingEffects.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/SuspendingEffects.kt
index d7374e6..df5a06e 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/SuspendingEffects.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/SuspendingEffects.kt
@@ -16,7 +16,7 @@
 
 // TODO(b/158105080): make part of ComposeRuntime
 @file:OptIn(InternalComposeApi::class)
-package androidx.compose
+package androidx.compose.runtime
 
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
 import kotlinx.coroutines.CoroutineScope
@@ -57,7 +57,7 @@
     @Suppress("RedundantSuspendModifier")
     @Deprecated(
         "use CompositionFrameClock.awaitFrameNanos to await a composition frame",
-        replaceWith = ReplaceWith("awaitFrameNanos()", "androidx.compose.awaitFrameNanos"),
+        replaceWith = ReplaceWith("awaitFrameNanos()", "androidx.compose.runtime.awaitFrameNanos"),
         level = DeprecationLevel.ERROR
     )
     suspend fun awaitFrame(): Long = withFrameNanos { it }
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Trace.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Trace.kt
similarity index 96%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Trace.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Trace.kt
index a1ca6ab..1107dd4 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/Trace.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/Trace.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 internal expect object Trace {
     fun beginSection(name: String)
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/UnionType.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/UnionType.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/UnionType.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/UnionType.kt
index 101f3e4..ad60a95 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/UnionType.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/UnionType.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlin.reflect.KClass
 
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ValueHolders.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ValueHolders.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ValueHolders.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ValueHolders.kt
index 305ac4b..42539856 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/ValueHolders.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/ValueHolders.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 /**
  * A StaticValueHolder holds a value that will never change.
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/collection/ExperimentalCollectionApi.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ExperimentalCollectionApi.kt
similarity index 95%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/collection/ExperimentalCollectionApi.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ExperimentalCollectionApi.kt
index 9641b5f..30cdf0f 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/collection/ExperimentalCollectionApi.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/ExperimentalCollectionApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.collection
+package androidx.compose.runtime.collection
 
 @RequiresOptIn(
     level = RequiresOptIn.Level.ERROR,
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/collection/MutableVector.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/MutableVector.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/collection/MutableVector.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/MutableVector.kt
index cf44610..74d5441 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/collection/MutableVector.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/collection/MutableVector.kt
@@ -16,9 +16,9 @@
 
 @file:Suppress("NOTHING_TO_INLINE", "UNCHECKED_CAST")
 
-package androidx.compose.collection
+package androidx.compose.runtime.collection
 
-import androidx.compose.sortArrayWith
+import androidx.compose.runtime.sortArrayWith
 import kotlin.contracts.ExperimentalContracts
 import kotlin.contracts.contract
 import kotlin.math.max
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/FrameContainers.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/FrameContainers.kt
similarity index 94%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/FrameContainers.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/FrameContainers.kt
index d310838..c8c6bc7 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/FrameContainers.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/FrameContainers.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("DEPRECATION", "UNUSED_PARAMETER")
 
-package androidx.compose.frames
+package androidx.compose.runtime.frames
 
 import kotlin.jvm.JvmField
 
@@ -24,7 +24,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "StableMutableList<T>",
-        "androidx.compose.StableMutableList"
+        "androidx.compose.runtime.StableMutableList"
     )
 )
 class ModelList<T>
@@ -32,7 +32,7 @@
             "Frames have been replaced by snapshots",
             ReplaceWith(
                 "mutableStateListOf()",
-                "androidx.compose.mutableStateListOf"
+                "androidx.compose.runtime.mutableStateListOf"
             )
         )
         constructor() : MutableList<T>, Framed {
@@ -114,7 +114,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "mutableStateListOf()",
-        "androidx.compose.mutableStateListOf"
+        "androidx.compose.runtime.mutableStateListOf"
     ),
     DeprecationLevel.ERROR
 )
@@ -124,7 +124,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "mutableStateListOf(element)",
-        "androidx.compose.mutableStateListOf"
+        "androidx.compose.runtime.mutableStateListOf"
     ),
     DeprecationLevel.ERROR
 )
@@ -134,7 +134,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "mutableStateListOf(*elements)",
-        "androidx.compose.mutableStateListOf"
+        "androidx.compose.runtime.mutableStateListOf"
     ),
     DeprecationLevel.ERROR
 )
@@ -144,7 +144,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "StableMutableMap<K, V>",
-        "androidx.compose.StableMutableMap"
+        "androidx.compose.runtime.StableMutableMap"
     )
 )
 class ModelMap<K, V>
@@ -152,7 +152,7 @@
         "Frames have been replaced by snapshots",
         ReplaceWith(
             "mutableStateMapOf()",
-            "androidx.compose.StableMutableMap"
+            "androidx.compose.runtime.StableMutableMap"
         )
     )
     constructor() : MutableMap<K, V>, Framed {
@@ -209,7 +209,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "mutableStateMapOf()",
-        "androidx.compose.mutableStateMapOf"
+        "androidx.compose.runtime.mutableStateMapOf"
     ),
     DeprecationLevel.ERROR
 )
@@ -219,7 +219,7 @@
     "Frames have been replaced by snapshots",
     ReplaceWith(
         "mutableStateMapOf(*pairs)",
-        "androidx.compose.mutableStateMapOf"
+        "androidx.compose.runtime.mutableStateMapOf"
     ),
     DeprecationLevel.ERROR
 )
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/FrameIdSet.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/FrameIdSet.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/FrameIdSet.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/FrameIdSet.kt
index 78cef21..7c1fed0 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/FrameIdSet.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/FrameIdSet.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.frames
+package androidx.compose.runtime.frames
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 
 /**
  * An implementation of a bit set that that is optimized around for the top 128 bits and
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/Frames.kt
similarity index 93%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/Frames.kt
index 3fe6d6742..92a1f53 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/frames/Frames.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/frames/Frames.kt
@@ -16,12 +16,12 @@
 
 @file:Suppress("DEPRECATION", "UNUSED_PARAMETER")
 
-package androidx.compose.frames
+package androidx.compose.runtime.frames
 
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "SnapshotApplyConflictException",
-        "androidx.compose.snapshots.SnapshotApplyConflictException"
+        "androidx.compose.runtime.snapshots.SnapshotApplyConflictException"
     ),
     DeprecationLevel.ERROR
 )
@@ -33,7 +33,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "StateRecord",
-        "androidx.compose.snapshots.StateRecord"
+        "androidx.compose.runtime.snapshots.StateRecord"
     )
 )
 abstract class AbstractRecord : Record {
@@ -47,7 +47,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "StateRecord",
-        "androidx.compose.snapshots.StateRecord"
+        "androidx.compose.runtime.snapshots.StateRecord"
     )
 )
 interface Record {
@@ -79,7 +79,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "StateObject",
-        "androidx.compose.snapshots.StateObject"
+        "androidx.compose.runtime.snapshots.StateObject"
     )
 )
 interface Framed {
@@ -150,7 +150,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "Snapshot.observe(readObserver, null, block)",
-        "androidx.compose.snapshots.Snapshot"
+        "androidx.compose.runtime.snapshots.Snapshot"
     )
 )
 fun observeAllReads(readObserver: FrameReadObserver, block: () -> Unit): Unit = deprecated()
@@ -161,7 +161,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "Snapshot.current",
-        "androidx.compose.snapshots.Snapshot"
+        "androidx.compose.runtime.snapshots.Snapshot"
     ),
     DeprecationLevel.ERROR
 )
@@ -182,7 +182,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "takeMutableSnapshot()",
-        "androidx.compose.snapshots.takeMutableSnapshot"
+        "androidx.compose.runtime.snapshots.takeMutableSnapshot"
     ),
     DeprecationLevel.ERROR
 )
@@ -194,7 +194,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "takeMutableSnapshot(readObserver, writeObserver)",
-        "androidx.compose.snapshots.takeMutableSnapshot"
+        "androidx.compose.runtime.snapshots.takeMutableSnapshot"
     ),
     DeprecationLevel.ERROR
 )
@@ -233,7 +233,7 @@
 @Deprecated("Frames has been replaced by snapshots",
     ReplaceWith(
         "Snapshot.registerApplyObserver",
-        "androidx.compose.snapshots.Snapshot"
+        "androidx.compose.runtime.snapshots.Snapshot"
     ),
     DeprecationLevel.ERROR
 )
@@ -296,7 +296,7 @@
     "Frames has been replaced by snapshots.",
     ReplaceWith(
         "Snapshot.global",
-        "androidx.compose.snapshots.Snapshot"
+        "androidx.compose.runtime.snapshots.Snapshot"
     ),
     level = DeprecationLevel.ERROR
 )
@@ -309,7 +309,7 @@
     "Frames has been replaced by snapshots.",
     ReplaceWith(
         "Snapshot.global",
-        "androidx.compose.snapshots.Snapshot"
+        "androidx.compose.runtime.snapshots.Snapshot"
     ),
     level = DeprecationLevel.ERROR
 )
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/internal/ComposableLambda.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/internal/ComposableLambda.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.kt
index faf6061..361063f 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/internal/ComposableLambda.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/ComposableLambda.kt
@@ -16,14 +16,14 @@
 
 @file:Suppress("UNCHECKED_CAST")
 @file:OptIn(InternalComposeApi::class)
-package androidx.compose.internal
+package androidx.compose.runtime.internal
 
-import androidx.compose.ComposeCompilerApi
-import androidx.compose.Composer
-import androidx.compose.InternalComposeApi
-import androidx.compose.RecomposeScope
-import androidx.compose.SlotTable
-import androidx.compose.Stable
+import androidx.compose.runtime.ComposeCompilerApi
+import androidx.compose.runtime.Composer
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.RecomposeScope
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.Stable
 
 private const val SLOTS_PER_INT = 15
 
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/internal/LiveLiteral.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/LiveLiteral.kt
similarity index 87%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/internal/LiveLiteral.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/LiveLiteral.kt
index 9ac2a51..541a2d4 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/internal/LiveLiteral.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/internal/LiveLiteral.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.compose.internal
+package androidx.compose.runtime.internal
 
-import androidx.compose.ComposeCompilerApi
-import androidx.compose.InternalComposeApi
-import androidx.compose.MutableState
-import androidx.compose.State
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.ComposeCompilerApi
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.State
+import androidx.compose.runtime.mutableStateOf
 
 /**
  * This annotation is applied to functions on the LiveLiteral classes created by the Compose
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/ListUtils.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/ListUtils.kt
similarity index 94%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/ListUtils.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/ListUtils.kt
index 70e07a0..89aa1ecc 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/ListUtils.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/ListUtils.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
 internal inline fun <T> List<T>.fastForEach(block: (element: T) -> Unit) {
     for (index in indices) {
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/Snapshot.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
similarity index 98%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/Snapshot.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
index a3a58e1..0785ddc 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/Snapshot.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
@@ -16,12 +16,12 @@
 
 @file:OptIn(InternalComposeApi::class, ExperimentalComposeApi::class)
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.InternalComposeApi
-import androidx.compose.ThreadLocal
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.ThreadLocal
 
 /**
  * Take a snapshot of the current value of all state objects. The values are preserved until
@@ -146,9 +146,9 @@
  *
  * @see takeSnapshot
  * @see takeMutableSnapshot
- * @see androidx.compose.mutableStateOf
- * @see androidx.compose.mutableStateListOf
- * @see androidx.compose.mutableStateMapOf
+ * @see androidx.compose.runtime.mutableStateOf
+ * @see androidx.compose.runtime.mutableStateListOf
+ * @see androidx.compose.runtime.mutableStateMapOf
  */
 @ExperimentalComposeApi
 sealed class Snapshot(
@@ -210,9 +210,9 @@
      * atomically to the global state (or to its parent snapshot if it is a nested snapshot) by
      * calling [MutableSnapshot.apply].
      *
-     * @see androidx.compose.mutableStateOf
-     * @see androidx.compose.mutableStateListOf
-     * @see androidx.compose.mutableStateMapOf
+     * @see androidx.compose.runtime.mutableStateOf
+     * @see androidx.compose.runtime.mutableStateListOf
+     * @see androidx.compose.runtime.mutableStateMapOf
      */
     inline fun <T> enter(block: () -> T): T {
         val previous = makeCurrent()
@@ -473,9 +473,9 @@
  * [MutableSnapshot.takeNestedMutableSnapshot].
  *
  * @see takeMutableSnapshot
- * @see androidx.compose.mutableStateOf
- * @see androidx.compose.mutableStateListOf
- * @see androidx.compose.mutableStateMapOf
+ * @see androidx.compose.runtime.mutableStateOf
+ * @see androidx.compose.runtime.mutableStateListOf
+ * @see androidx.compose.runtime.mutableStateMapOf
  */
 @ExperimentalComposeApi
 open class MutableSnapshot internal constructor(
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotIdSet.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSet.kt
similarity index 99%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotIdSet.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSet.kt
index da537aa..0009fee 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotIdSet.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSet.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 
 /**
  * An implementation of a bit set that that is optimized around for the top 128 bits and
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateList.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateList.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
index b413e3c..061843c 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateList.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
@@ -16,12 +16,12 @@
 
 @file:OptIn(ExperimentalComposeApi::class)
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.BuildableList
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Stable
-import androidx.compose.buildableListOf
+import androidx.compose.runtime.BuildableList
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.buildableListOf
 
 /**
  * An implementation of [MutableList] that can be observed and snapshot. This is the result type
@@ -29,7 +29,7 @@
  *
  * This class closely implements the same semantics as [ArrayList].
  *
- * @see androidx.compose.mutableStateListOf
+ * @see androidx.compose.runtime.mutableStateListOf
  */
 @Stable
 class SnapshotStateList<T> : MutableList<T>, StateObject {
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateMap.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateMap.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
index 1e27fca..df96705 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateMap.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
@@ -16,12 +16,12 @@
 
 @file:OptIn(ExperimentalComposeApi::class)
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.BuildableMap
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Stable
-import androidx.compose.buildableMapOf
+import androidx.compose.runtime.BuildableMap
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.buildableMapOf
 
 /**
  * An implementation of [MutableMap] that can be observed and snapshot. This is the result type
@@ -29,7 +29,7 @@
  *
  * This class closely implements the same semantics as [HashMap].
  *
- * @see androidx.compose.mutableStateMapOf
+ * @see androidx.compose.runtime.mutableStateMapOf
  */
 @Stable
 class SnapshotStateMap<K, V> : MutableMap<K, V>, StateObject {
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateObserver.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
similarity index 97%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateObserver.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
index deb49f6..3f79db7 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/snapshots/SnapshotStateObserver.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserver.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.ObserverMap
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.ObserverMap
 
 @ExperimentalComposeApi
 @Suppress("DEPRECATION_ERROR")
diff --git a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/tooling/InspectionTables.kt b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/tooling/InspectionTables.kt
similarity index 81%
rename from compose/compose-runtime/src/commonMain/kotlin/androidx/compose/tooling/InspectionTables.kt
rename to compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/tooling/InspectionTables.kt
index 18ca53d..6a1b9db 100644
--- a/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/tooling/InspectionTables.kt
+++ b/compose/compose-runtime/src/commonMain/kotlin/androidx/compose/runtime/tooling/InspectionTables.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.compose.tooling
+package androidx.compose.runtime.tooling
 
-import androidx.compose.InternalComposeApi
-import androidx.compose.SlotTable
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.staticAmbientOf
 
 /**
  * A set of slot tables that where produced when in inspection mode.
diff --git a/compose/compose-runtime/src/desktopMain/kotlin/androidx/compose/ActualDesktop.kt b/compose/compose-runtime/src/desktopMain/kotlin/androidx/compose/runtime/ActualDesktop.kt
similarity index 98%
rename from compose/compose-runtime/src/desktopMain/kotlin/androidx/compose/ActualDesktop.kt
rename to compose/compose-runtime/src/desktopMain/kotlin/androidx/compose/runtime/ActualDesktop.kt
index 2c88cf1..1ae7a9b 100644
--- a/compose/compose-runtime/src/desktopMain/kotlin/androidx/compose/ActualDesktop.kt
+++ b/compose/compose-runtime/src/desktopMain/kotlin/androidx/compose/runtime/ActualDesktop.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import javax.swing.SwingUtilities
 import kotlin.coroutines.CoroutineContext
diff --git a/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/ActualJvm.kt b/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/ActualJvm.kt
similarity index 98%
rename from compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/ActualJvm.kt
rename to compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/ActualJvm.kt
index 0aec8d6..88a0946c 100644
--- a/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/ActualJvm.kt
+++ b/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/ActualJvm.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlinx.collections.immutable.PersistentMap
 import kotlinx.collections.immutable.persistentHashMapOf
diff --git a/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/FlowAdapter.kt b/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/FlowAdapter.kt
similarity index 93%
rename from compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/FlowAdapter.kt
rename to compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/FlowAdapter.kt
index 1ef49eb5..70775d0 100644
--- a/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/FlowAdapter.kt
+++ b/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/FlowAdapter.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
@@ -31,7 +31,7 @@
  * into the [StateFlow] the returned [State] will be updated causing recomposition of every
  * [State.value] usage.
  *
- * @sample androidx.compose.samples.StateFlowSample
+ * @sample androidx.compose.runtime.samples.StateFlowSample
  *
  * @param context [CoroutineContext] to use for collecting.
  */
@@ -47,7 +47,7 @@
  * would be new value posted into the [Flow] the returned [State] will be updated causing
  * recomposition of every [State.value] usage.
  *
- * @sample androidx.compose.samples.FlowWithInitialSample
+ * @sample androidx.compose.runtime.samples.FlowWithInitialSample
  *
  * @param context [CoroutineContext] to use for collecting.
  */
diff --git a/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/internal/ComposableLambdaN.kt b/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/internal/ComposableLambdaN.kt
similarity index 92%
rename from compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/internal/ComposableLambdaN.kt
rename to compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/internal/ComposableLambdaN.kt
index 4e15677..5982cec 100644
--- a/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/internal/ComposableLambdaN.kt
+++ b/compose/compose-runtime/src/jvmMain/kotlin/androidx/compose/runtime/internal/ComposableLambdaN.kt
@@ -15,14 +15,14 @@
  */
 
 @file:OptIn(InternalComposeApi::class)
-package androidx.compose.internal
+package androidx.compose.runtime.internal
 
-import androidx.compose.ComposeCompilerApi
-import androidx.compose.Composer
-import androidx.compose.FrameManager
-import androidx.compose.InternalComposeApi
-import androidx.compose.SlotTable
-import androidx.compose.Stable
+import androidx.compose.runtime.ComposeCompilerApi
+import androidx.compose.runtime.Composer
+import androidx.compose.runtime.FrameManager
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.Stable
 import kotlin.jvm.functions.FunctionN
 
 private const val SLOTS_PER_INT = 15
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Contact.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Contact.kt
deleted file mode 100644
index f398692..0000000
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Contact.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package androidx.compose.mock
-
-class Contact(var name: String, var email: String)
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/CompositionTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/CompositionTests.kt
similarity index 98%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/CompositionTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/CompositionTests.kt
index 4ed565d..80e8b64 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/CompositionTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/CompositionTests.kt
@@ -15,29 +15,29 @@
  */
 
 @file:OptIn(ExperimentalComposeApi::class, InternalComposeApi::class)
-package androidx.compose
+package androidx.compose.runtime
 
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
-import androidx.compose.mock.Contact
-import androidx.compose.mock.ContactModel
-import androidx.compose.mock.MockComposeScope
-import androidx.compose.mock.MockViewListValidator
-import androidx.compose.mock.MockViewValidator
-import androidx.compose.mock.Point
-import androidx.compose.mock.Report
-import androidx.compose.mock.View
-import androidx.compose.mock.ViewApplier
-import androidx.compose.mock.contact
-import androidx.compose.mock.edit
-import androidx.compose.mock.linear
-import androidx.compose.mock.memoize
-import androidx.compose.mock.points
-import androidx.compose.mock.repeat
-import androidx.compose.mock.reportsReport
-import androidx.compose.mock.reportsTo
-import androidx.compose.mock.selectContact
-import androidx.compose.mock.skip
-import androidx.compose.mock.text
+import androidx.compose.runtime.mock.Contact
+import androidx.compose.runtime.mock.ContactModel
+import androidx.compose.runtime.mock.MockComposeScope
+import androidx.compose.runtime.mock.MockViewListValidator
+import androidx.compose.runtime.mock.MockViewValidator
+import androidx.compose.runtime.mock.Point
+import androidx.compose.runtime.mock.Report
+import androidx.compose.runtime.mock.View
+import androidx.compose.runtime.mock.ViewApplier
+import androidx.compose.runtime.mock.contact
+import androidx.compose.runtime.mock.edit
+import androidx.compose.runtime.mock.linear
+import androidx.compose.runtime.mock.memoize
+import androidx.compose.runtime.mock.points
+import androidx.compose.runtime.mock.repeat
+import androidx.compose.runtime.mock.reportsReport
+import androidx.compose.runtime.mock.reportsTo
+import androidx.compose.runtime.mock.selectContact
+import androidx.compose.runtime.mock.skip
+import androidx.compose.runtime.mock.text
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Job
 import kotlinx.coroutines.launch
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/LatchTest.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/LatchTest.kt
similarity index 97%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/LatchTest.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/LatchTest.kt
index 1753206..807feef 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/LatchTest.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/LatchTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlinx.coroutines.CoroutineStart
 import kotlinx.coroutines.ExperimentalCoroutinesApi
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/ObserverMapTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/ObserverMapTests.kt
similarity index 98%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/ObserverMapTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/ObserverMapTests.kt
index a117cff..fdbf94f 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/ObserverMapTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/ObserverMapTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose
+package androidx.compose.runtime
 
 import kotlin.test.assertEquals
 import kotlin.test.BeforeTest
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/SlotTableTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/SlotTableTests.kt
similarity index 99%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/SlotTableTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/SlotTableTests.kt
index 50cbfba..aa920b2 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/SlotTableTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/SlotTableTests.kt
@@ -15,7 +15,7 @@
  */
 
 @file:OptIn(InternalComposeApi::class)
-package androidx.compose
+package androidx.compose.runtime
 
 import java.util.Random
 import kotlin.test.Test
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/collection/MutableVectorTest.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt
similarity index 99%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/collection/MutableVectorTest.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt
index d16c0a8..30034eb 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/collection/MutableVectorTest.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/collection/MutableVectorTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.collection
+package androidx.compose.runtime.collection
 
 import org.junit.Assert.assertEquals
 import org.junit.Assert.assertFalse
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposeContact.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposeContact.kt
similarity index 96%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposeContact.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposeContact.kt
index 8870737..20f3395 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposeContact.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposeContact.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 // <linear>
 //  <text text="Name: ${contact.name}" />
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposePoints.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposePoints.kt
similarity index 92%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposePoints.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposePoints.kt
index 5bc0cf6..703457d 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposePoints.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposePoints.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 @Composable
 fun MockComposeScope.point(point: Point) {
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposeReport.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposeReport.kt
similarity index 93%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposeReport.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposeReport.kt
index efb26bc..999e8a1 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ComposeReport.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ComposeReport.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 @Composable
 fun MockComposeScope.reportsTo(report: Report) {
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Contact.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Contact.kt
new file mode 100644
index 0000000..957d2f3
--- /dev/null
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Contact.kt
@@ -0,0 +1,3 @@
+package androidx.compose.runtime.mock
+
+class Contact(var name: String, var email: String)
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ContactModel.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ContactModel.kt
similarity index 97%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ContactModel.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ContactModel.kt
index 622cb0d..4848929 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ContactModel.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ContactModel.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
 class ContactModel(
     var filter: String = "",
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/MockViewValidator.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
similarity index 98%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/MockViewValidator.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
index 5d24410..07b409d 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/MockViewValidator.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/MockViewValidator.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
 import kotlin.test.assertEquals
 import kotlin.test.assertTrue
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Point.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Point.kt
similarity index 71%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Point.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Point.kt
index 61fa699..0659c0f 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Point.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Point.kt
@@ -1,4 +1,4 @@
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
 data class Point(val x: Int, val y: Int) {
     override fun toString(): String = "($x, $y)"
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Report.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Report.kt
similarity index 94%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Report.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Report.kt
index ed4d24a..3d88290 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Report.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Report.kt
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
 data class Report(var from: String, var to: String)
\ No newline at end of file
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/View.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/View.kt
similarity index 98%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/View.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/View.kt
index 39bbe74..4babb99 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/View.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/View.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
 fun indent(indent: Int, builder: StringBuilder) {
     repeat(indent) { builder.append(' ') }
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ViewApplier.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ViewApplier.kt
similarity index 82%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ViewApplier.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ViewApplier.kt
index d0652d8..337e3c3 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/ViewApplier.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/ViewApplier.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
-import androidx.compose.AbstractApplier
-import androidx.compose.Composable
-import androidx.compose.ComposeCompilerApi
-import androidx.compose.Composer
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Stable
-import androidx.compose.currentComposer
+import androidx.compose.runtime.AbstractApplier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ComposeCompilerApi
+import androidx.compose.runtime.Composer
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.currentComposer
 
 @Suppress("EXTENSION_SHADOWED_BY_MEMBER")
 @OptIn(ExperimentalComposeApi::class)
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Views.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Views.kt
similarity index 91%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Views.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Views.kt
index 85fcb49c..b83851f3 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/mock/Views.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/mock/Views.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.compose.mock
+package androidx.compose.runtime.mock
 
-import androidx.compose.Composable
-import androidx.compose.emit
-import androidx.compose.key
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.key
 
 @Composable
 fun <T : Any> MockComposeScope.repeat(
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotIdSetTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt
similarity index 99%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotIdSetTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt
index a33b3cd..537161d 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotIdSetTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotIdSetTests.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
 import java.util.BitSet
 import kotlin.random.Random
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateListTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
similarity index 98%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateListTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
index ddc98da..52e4a71 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateListTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
 import java.lang.IllegalStateException
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertFalse
 import kotlin.test.assertTrue
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.mutableStateListOf
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.mutableStateListOf
 
 class SnapshotStateListTests {
     @Test
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateMapTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
similarity index 98%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateMapTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
index 2167a83..a6bb588 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateMapTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMapTests.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.mutableStateMapOf
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.mutableStateMapOf
 import kotlin.test.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertFalse
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateObserverTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTests.kt
similarity index 97%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateObserverTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTests.kt
index aa5655b..2895d2e 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotStateObserverTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotStateObserverTests.kt
@@ -16,11 +16,11 @@
 
 @file:OptIn(ExperimentalComposeApi::class)
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.MutableState
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
 import kotlin.test.Test
 import kotlin.test.assertEquals
 
diff --git a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotTests.kt b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
similarity index 96%
rename from compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotTests.kt
rename to compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
index d9c36a1..dd5b14f 100644
--- a/compose/compose-runtime/src/test/kotlin/androidx/compose/snapshots/SnapshotTests.kt
+++ b/compose/compose-runtime/src/test/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
@@ -16,19 +16,19 @@
 
 @file:OptIn(InternalComposeApi::class, ExperimentalComposeApi::class)
 
-package androidx.compose.snapshots
+package androidx.compose.runtime.snapshots
 
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.InternalComposeApi
-import androidx.compose.MutableState
-import androidx.compose.State
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.neverEqualPolicy
-import androidx.compose.referentialEqualityPolicy
-import androidx.compose.setValue
-import androidx.compose.snapshots.Snapshot.Companion.openSnapshotCount
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.neverEqualPolicy
+import androidx.compose.runtime.referentialEqualityPolicy
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshots.Snapshot.Companion.openSnapshotCount
+import androidx.compose.runtime.structuralEqualityPolicy
 import kotlin.test.AfterTest
 import kotlin.test.BeforeTest
 import kotlin.test.Test
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/RadioGroupBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/RadioGroupBenchmark.kt
index eb5cb39b..a525306 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/RadioGroupBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/RadioGroupBenchmark.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.benchmark.test
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.LargeTest
 import androidx.ui.benchmark.ComposeBenchmarkRule
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 f1a5a4d..80a8a24 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.benchmark.test
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.test.filters.LargeTest
 import androidx.ui.benchmark.ComposeBenchmarkRule
 import androidx.ui.benchmark.benchmarkDrawPerf
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 b544865..d6cdffa 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.benchmark.test
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.test.filters.LargeTest
 import androidx.ui.benchmark.ComposeBenchmarkRule
 import androidx.ui.benchmark.benchmarkFirstCompose
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 60ea8c1..cee7ff9 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.core
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.test.filters.LargeTest
 import androidx.ui.benchmark.ComposeBenchmarkRule
 import androidx.ui.benchmark.toggleStateBenchmarkLayout
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 fbb3673..fc6d88d 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
@@ -16,10 +16,10 @@
 
 package androidx.ui.core
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.State
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.State
+import androidx.compose.runtime.state
 import androidx.test.filters.LargeTest
 import androidx.ui.benchmark.ComposeBenchmarkRule
 import androidx.ui.benchmark.toggleStateBenchmarkComposeMeasureLayout
diff --git a/ui/integration-tests/demos/common/src/main/java/androidx/ui/demos/common/Demo.kt b/ui/integration-tests/demos/common/src/main/java/androidx/ui/demos/common/Demo.kt
index 19c03e5..ce6b9a3 100644
--- a/ui/integration-tests/demos/common/src/main/java/androidx/ui/demos/common/Demo.kt
+++ b/ui/integration-tests/demos/common/src/main/java/androidx/ui/demos/common/Demo.kt
@@ -18,7 +18,7 @@
 
 import android.app.Activity
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import kotlin.reflect.KClass
 
 /**
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoActivity.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoActivity.kt
index 0e5fcfc..9986d8e 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoActivity.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoActivity.kt
@@ -25,12 +25,12 @@
 import androidx.activity.ComponentActivity
 import androidx.activity.OnBackPressedCallback
 import androidx.activity.OnBackPressedDispatcher
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onCommit
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.preference.PreferenceManager
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 3ae763c..230d3a7 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.demos
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.animation.Crossfade
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.LayoutDirection
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoColorPalette.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoColorPalette.kt
index 03cf62e1..0689931 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoColorPalette.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoColorPalette.kt
@@ -17,11 +17,11 @@
 package androidx.ui.demos
 
 import android.content.SharedPreferences
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.foundation.isSystemInDarkTheme
 import androidx.compose.material.ColorPalette
 import androidx.compose.material.darkColorPalette
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 69ad005..eaacbe5 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.demos
 
-import androidx.compose.Composable
-import androidx.compose.key
-import androidx.compose.onCommit
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.key
+import androidx.compose.runtime.onCommit
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.focus.FocusModifier
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 e3d51a9..6611f3b 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.integration.test.core
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import androidx.ui.test.ComposeTestCase
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/EmptyTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/EmptyTestCase.kt
index 1b72bdc..7329ff0 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/EmptyTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/core/EmptyTestCase.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.core
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.test.ComposeTestCase
 
 class EmptyTestCase : ComposeTestCase {
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 8334001..6ff6692 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.core
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Box
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 05b6624..5852fc1 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.core
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Box
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 bfdf4ab..a5d9aa8 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.core
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
 import androidx.compose.ui.graphics.Color
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 ffe6b123..425b719 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.core
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Box
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 6e318ef..53a15bc 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.integration.test.core.text
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
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 6029246..0456713 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.core.text
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
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 2855717..25ba079 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
@@ -16,12 +16,12 @@
 
 package androidx.ui.integration.test.core.text
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/NestedScrollerTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/NestedScrollerTestCase.kt
index fce413a..06b7bdf 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/NestedScrollerTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/foundation/NestedScrollerTestCase.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.integration.test.foundation
 
-import androidx.compose.Composable
-import androidx.compose.key
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.key
+import androidx.compose.runtime.remember
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 43af41b..e605439 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.integration.test.foundation
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
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 bc336d6..b4d630f 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.integration.test.foundation
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
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 8d302c2..b0358aa 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.foundation
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.ScrollState
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 c6700a8..f816802 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.integration.test.foundation
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.foundation.Text
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.compose.foundation.layout.Column
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 e767fd8..c5a2c7a 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.integration.test.framework
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
 import androidx.ui.core.paint
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/CheckboxesInRowsTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/CheckboxesInRowsTestCase.kt
index 18c9d8a..028c8c6 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/CheckboxesInRowsTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/CheckboxesInRowsTestCase.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.integration.test.material
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
diff --git a/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/ColorPaletteTestCase.kt b/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/ColorPaletteTestCase.kt
index 5ed6296..1ea44eb 100644
--- a/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/ColorPaletteTestCase.kt
+++ b/ui/integration-tests/src/main/java/androidx/ui/integration/test/material/ColorPaletteTestCase.kt
@@ -16,10 +16,10 @@
 
 package androidx.ui.integration.test.material
 
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.compose.ui.graphics.Color
 import androidx.compose.material.ColorPalette
 import androidx.compose.material.MaterialTheme
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 ed9bea3..23177b0 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
@@ -20,10 +20,10 @@
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.widget.FrameLayout
 import android.widget.RelativeLayout
-import androidx.compose.Composable
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Recomposer
 import androidx.compose.foundation.Box
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.ContextAmbient
 import androidx.ui.core.Modifier
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 24f8199..34dd44c 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
@@ -20,7 +20,7 @@
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.androidview.adapters.setOnClick
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
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 6639466..8cf0062 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
@@ -22,9 +22,9 @@
 import android.view.ViewGroup
 import android.widget.TextView
 import androidx.activity.ComponentActivity
-import androidx.compose.Composition
-import androidx.compose.Recomposer
-import androidx.compose.state
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.state
 import androidx.ui.androidview.adapters.setOnClick
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.tapGestureFilter
diff --git a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/WebComponentActivity.kt b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/WebComponentActivity.kt
index 400a60b..c0ec03c 100644
--- a/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/WebComponentActivity.kt
+++ b/ui/ui-android-view/integration-tests/android-view-demos/src/main/java/androidx/ui/androidview/demos/WebComponentActivity.kt
@@ -38,12 +38,12 @@
 import androidx.ui.androidview.adapters.setLayoutWidth
 import androidx.ui.androidview.adapters.setOnClick
 import androidx.ui.androidview.adapters.setOnTextChanged
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.androidview.WebComponent
 import androidx.ui.androidview.WebContext
 import androidx.ui.core.setViewContent
diff --git a/ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponent.kt b/ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponent.kt
index 1203662..c840808 100644
--- a/ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponent.kt
+++ b/ui/ui-android-view/src/main/java/androidx/ui/androidview/WebComponent.kt
@@ -20,7 +20,7 @@
 import android.util.Log
 import android.webkit.WebView
 import android.webkit.WebViewClient
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.viewinterop.emitView
 
 class WebContext {
diff --git a/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt b/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt
index 8e489927..d309280 100644
--- a/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt
+++ b/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/ArrayAdapter.kt
@@ -25,7 +25,7 @@
 import android.widget.Filterable
 import android.widget.FrameLayout
 import android.widget.TextView
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.setViewContent
 
 // TODO(lmr): This should be moved to a separate module, but needs to be one that is not IR-compiled
diff --git a/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt b/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt
index 4e5b1da..5835bad 100644
--- a/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt
+++ b/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/AutocompleteTextViewAttributeAdapter.kt
@@ -19,7 +19,7 @@
 package androidx.ui.androidview.adapters
 
 import android.widget.AutoCompleteTextView
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 private val AutoCompleteTextView.composeAdapter: ArrayAdapter<Any>
     get() {
diff --git a/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt b/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt
index 2df7149..d0da3d2 100644
--- a/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt
+++ b/ui/ui-android-view/src/main/java/androidx/ui/androidview/adapters/SpinnerAttributeAdapter.kt
@@ -20,7 +20,7 @@
 
 import android.widget.AbsSpinner
 import android.widget.Spinner
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 private val AbsSpinner.composeAdapter: ArrayAdapter<Any>
     get() {
diff --git a/ui/ui-animation/api/0.1.0-dev16.txt b/ui/ui-animation/api/0.1.0-dev16.txt
index fe89610..ba0c5a3 100644
--- a/ui/ui-animation/api/0.1.0-dev16.txt
+++ b/ui/ui-animation/api/0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.animation {
 
-  @androidx.compose.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
+  @androidx.compose.runtime.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
     ctor public AnimatedFloatModel(float initialValue, androidx.compose.animation.core.AnimationClockObservable clock, float visibilityThreshold);
     method public Float! getValue();
     method protected void setValue(float p);
@@ -9,12 +9,12 @@
   }
 
   public final class AnimatedValueEffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
   }
 
-  @androidx.compose.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
+  @androidx.compose.runtime.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
     ctor public AnimatedValueModel(T! initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationClockObservable clock, T? visibilityThreshold);
     method public T! getValue();
     method protected void setValue(T! p);
@@ -34,7 +34,7 @@
   }
 
   public final class CrossfadeKt {
-    method @androidx.compose.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
   }
 
   public final class DisposableAnimationClock implements androidx.compose.animation.core.AnimationClockObservable {
@@ -47,7 +47,7 @@
   }
 
   public final class DisposableAnimationClockKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
   public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
@@ -59,7 +59,7 @@
   }
 
   public final class LegacyTransitionKt {
-    method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
   public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
@@ -100,41 +100,41 @@
   }
 
   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.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, 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 float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.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);
-    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
     return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
@@ -142,7 +142,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
   }
 
 }
diff --git a/ui/ui-animation/api/current.txt b/ui/ui-animation/api/current.txt
index fe89610..ba0c5a3 100644
--- a/ui/ui-animation/api/current.txt
+++ b/ui/ui-animation/api/current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.animation {
 
-  @androidx.compose.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
+  @androidx.compose.runtime.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
     ctor public AnimatedFloatModel(float initialValue, androidx.compose.animation.core.AnimationClockObservable clock, float visibilityThreshold);
     method public Float! getValue();
     method protected void setValue(float p);
@@ -9,12 +9,12 @@
   }
 
   public final class AnimatedValueEffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
   }
 
-  @androidx.compose.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
+  @androidx.compose.runtime.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
     ctor public AnimatedValueModel(T! initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationClockObservable clock, T? visibilityThreshold);
     method public T! getValue();
     method protected void setValue(T! p);
@@ -34,7 +34,7 @@
   }
 
   public final class CrossfadeKt {
-    method @androidx.compose.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
   }
 
   public final class DisposableAnimationClock implements androidx.compose.animation.core.AnimationClockObservable {
@@ -47,7 +47,7 @@
   }
 
   public final class DisposableAnimationClockKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
   public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
@@ -59,7 +59,7 @@
   }
 
   public final class LegacyTransitionKt {
-    method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
   public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
@@ -100,41 +100,41 @@
   }
 
   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.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, 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 float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.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);
-    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
     return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
@@ -142,7 +142,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = 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 fe89610..ba0c5a3 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
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.animation {
 
-  @androidx.compose.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
+  @androidx.compose.runtime.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
     ctor public AnimatedFloatModel(float initialValue, androidx.compose.animation.core.AnimationClockObservable clock, float visibilityThreshold);
     method public Float! getValue();
     method protected void setValue(float p);
@@ -9,12 +9,12 @@
   }
 
   public final class AnimatedValueEffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
   }
 
-  @androidx.compose.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
+  @androidx.compose.runtime.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
     ctor public AnimatedValueModel(T! initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationClockObservable clock, T? visibilityThreshold);
     method public T! getValue();
     method protected void setValue(T! p);
@@ -34,7 +34,7 @@
   }
 
   public final class CrossfadeKt {
-    method @androidx.compose.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
   }
 
   public final class DisposableAnimationClock implements androidx.compose.animation.core.AnimationClockObservable {
@@ -47,7 +47,7 @@
   }
 
   public final class DisposableAnimationClockKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
   public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
@@ -59,7 +59,7 @@
   }
 
   public final class LegacyTransitionKt {
-    method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
   public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
@@ -100,41 +100,41 @@
   }
 
   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.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, 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 float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.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);
-    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
     return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
@@ -142,7 +142,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
   }
 
 }
diff --git a/ui/ui-animation/api/public_plus_experimental_current.txt b/ui/ui-animation/api/public_plus_experimental_current.txt
index fe89610..ba0c5a3 100644
--- a/ui/ui-animation/api/public_plus_experimental_current.txt
+++ b/ui/ui-animation/api/public_plus_experimental_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.animation {
 
-  @androidx.compose.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
+  @androidx.compose.runtime.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
     ctor public AnimatedFloatModel(float initialValue, androidx.compose.animation.core.AnimationClockObservable clock, float visibilityThreshold);
     method public Float! getValue();
     method protected void setValue(float p);
@@ -9,12 +9,12 @@
   }
 
   public final class AnimatedValueEffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
   }
 
-  @androidx.compose.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
+  @androidx.compose.runtime.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
     ctor public AnimatedValueModel(T! initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationClockObservable clock, T? visibilityThreshold);
     method public T! getValue();
     method protected void setValue(T! p);
@@ -34,7 +34,7 @@
   }
 
   public final class CrossfadeKt {
-    method @androidx.compose.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
   }
 
   public final class DisposableAnimationClock implements androidx.compose.animation.core.AnimationClockObservable {
@@ -47,7 +47,7 @@
   }
 
   public final class DisposableAnimationClockKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
   public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
@@ -59,7 +59,7 @@
   }
 
   public final class LegacyTransitionKt {
-    method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
   public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
@@ -100,41 +100,41 @@
   }
 
   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.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, 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 float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.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);
-    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
     return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
@@ -142,7 +142,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = 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 fe89610..ba0c5a3 100644
--- a/ui/ui-animation/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-animation/api/restricted_0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.animation {
 
-  @androidx.compose.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
+  @androidx.compose.runtime.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
     ctor public AnimatedFloatModel(float initialValue, androidx.compose.animation.core.AnimationClockObservable clock, float visibilityThreshold);
     method public Float! getValue();
     method protected void setValue(float p);
@@ -9,12 +9,12 @@
   }
 
   public final class AnimatedValueEffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
   }
 
-  @androidx.compose.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
+  @androidx.compose.runtime.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
     ctor public AnimatedValueModel(T! initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationClockObservable clock, T? visibilityThreshold);
     method public T! getValue();
     method protected void setValue(T! p);
@@ -34,7 +34,7 @@
   }
 
   public final class CrossfadeKt {
-    method @androidx.compose.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
   }
 
   public final class DisposableAnimationClock implements androidx.compose.animation.core.AnimationClockObservable {
@@ -47,7 +47,7 @@
   }
 
   public final class DisposableAnimationClockKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
   public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
@@ -59,7 +59,7 @@
   }
 
   public final class LegacyTransitionKt {
-    method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
   public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
@@ -100,41 +100,41 @@
   }
 
   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.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, 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 float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.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);
-    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
     return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
@@ -142,7 +142,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
   }
 
 }
diff --git a/ui/ui-animation/api/restricted_current.txt b/ui/ui-animation/api/restricted_current.txt
index fe89610..ba0c5a3 100644
--- a/ui/ui-animation/api/restricted_current.txt
+++ b/ui/ui-animation/api/restricted_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.animation {
 
-  @androidx.compose.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
+  @androidx.compose.runtime.Stable public final class AnimatedFloatModel extends androidx.compose.animation.core.AnimatedFloat {
     ctor public AnimatedFloatModel(float initialValue, androidx.compose.animation.core.AnimationClockObservable clock, float visibilityThreshold);
     method public Float! getValue();
     method protected void setValue(float p);
@@ -9,12 +9,12 @@
   }
 
   public final class AnimatedValueEffectsKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
-    method @androidx.compose.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedValue<androidx.compose.ui.graphics.Color,androidx.compose.animation.core.AnimationVector4D> animatedColor-IQsfJ5c(long initVal, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.core.AnimatedFloat animatedFloat(float initVal, float visibilityThreshold = 0.01f, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> androidx.compose.animation.core.AnimatedValue<T,V> animatedValue(T? initVal, androidx.compose.animation.core.TwoWayConverter<T,V> converter, T? visibilityThreshold = null, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current);
   }
 
-  @androidx.compose.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
+  @androidx.compose.runtime.Stable public final class AnimatedValueModel<T, V extends androidx.compose.animation.core.AnimationVector> extends androidx.compose.animation.core.AnimatedValue<T,V> {
     ctor public AnimatedValueModel(T! initialValue, androidx.compose.animation.core.TwoWayConverter<T,V> typeConverter, androidx.compose.animation.core.AnimationClockObservable clock, T? visibilityThreshold);
     method public T! getValue();
     method protected void setValue(T! p);
@@ -34,7 +34,7 @@
   }
 
   public final class CrossfadeKt {
-    method @androidx.compose.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T> void Crossfade(T? current, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animation = tween(), kotlin.jvm.functions.Function1<? super T,kotlin.Unit> children);
   }
 
   public final class DisposableAnimationClock implements androidx.compose.animation.core.AnimationClockObservable {
@@ -47,7 +47,7 @@
   }
 
   public final class DisposableAnimationClockKt {
-    method @androidx.compose.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
+    method @androidx.compose.runtime.Composable public static androidx.compose.animation.DisposableAnimationClock asDisposableClock(androidx.compose.animation.core.AnimationClockObservable);
   }
 
   public final class DpPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.unit.Dp,androidx.compose.animation.core.AnimationVector1D> {
@@ -59,7 +59,7 @@
   }
 
   public final class LegacyTransitionKt {
-    method @Deprecated @androidx.compose.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void Transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null, kotlin.jvm.functions.Function1<? super androidx.compose.animation.core.TransitionState,kotlin.Unit> children);
   }
 
   public final class OffsetPropKey implements androidx.compose.animation.core.PropKey<androidx.compose.ui.geometry.Offset,androidx.compose.animation.core.AnimationVector2D> {
@@ -100,41 +100,41 @@
   }
 
   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.compose.ui.unit.Bounds animate(androidx.compose.ui.unit.Bounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Bounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.PxBounds animate(androidx.compose.ui.unit.PxBounds target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.PxBounds> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset animate(androidx.compose.ui.unit.IntOffset target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.IntOffset> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.Composable public static <T, V extends androidx.compose.animation.core.AnimationVector> T! animate(T? target, androidx.compose.animation.core.TwoWayConverter<T,V> converter, 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 float animate-Lz7ev7o(float target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.unit.Dp> animSpec = remember({ 
+    method @androidx.compose.runtime.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.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({ 
+    method @androidx.compose.runtime.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({ 
+    method @androidx.compose.runtime.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);
-    method @androidx.compose.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
+    method @androidx.compose.runtime.Composable public static long animate-rlPqr8Y(long target, androidx.compose.animation.core.AnimationSpec<androidx.compose.ui.geometry.Size> animSpec = remember({ 
     return <init>(Size(PxVisibilityThreshold, PxVisibilityThreshold))
 }), kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Size,kotlin.Unit>? endListener = null);
   }
@@ -142,7 +142,7 @@
   public final class TransitionKt {
     method public static boolean getTransitionsEnabled();
     method public static void setTransitionsEnabled(boolean p);
-    method @androidx.compose.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = null);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.animation.core.TransitionState transition(androidx.compose.animation.core.TransitionDefinition<T> definition, T? toState, androidx.compose.animation.core.AnimationClockObservable clock = AnimationClockAmbient.current, T? initState = toState, String? label = null, kotlin.jvm.functions.Function1<? super T,kotlin.Unit>? onStateChangeFinished = 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 d69adb2..77ec754 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
@@ -22,9 +22,9 @@
 import androidx.compose.animation.core.TweenSpec
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.remember
 import androidx.compose.animation.transition
 import androidx.compose.animation.animatedFloat
 import androidx.ui.core.AnimationClockAmbient
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 bd8f959..5ec1257 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
@@ -17,7 +17,7 @@
 package androidx.compose.animation.demos
 
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
@@ -33,10 +33,10 @@
 import androidx.compose.foundation.layout.wrapContentHeight
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.animation.animateContentSize
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
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 d6fb17f..9213187 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
@@ -17,11 +17,11 @@
 package androidx.compose.animation.demos
 
 import android.util.Log
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.animation.Crossfade
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.tapGestureFilter
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 ea7c195..7331ae95c 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
@@ -20,8 +20,8 @@
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.TargetAnimation
 import androidx.compose.animation.core.fling
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.animation.animatedFloat
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.DragObserver
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt
index 0d207c5..2cf92d2 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/GestureBasedAnimationDemo.kt
@@ -19,8 +19,8 @@
 import androidx.compose.animation.core.FloatPropKey
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.transitionDefinition
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.transition
 import androidx.ui.core.Modifier
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt
index 72585e9..a3a32b5 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/MultiDimensionalAnimationDemo.kt
@@ -19,10 +19,10 @@
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.remember
-import androidx.compose.state
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.RectPropKey
 import androidx.compose.animation.transition
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 1cec757..b2241eef 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
@@ -21,8 +21,8 @@
 import androidx.compose.animation.core.repeatable
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.animation.transition
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SingleValueAnimationDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SingleValueAnimationDemo.kt
index 11594bb..65c6908 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SingleValueAnimationDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/SingleValueAnimationDemo.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.animation.demos
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.animation.animate
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
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 e8337c4..1245cf7 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
@@ -19,8 +19,8 @@
 import android.util.Log
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.fling
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.animation.animatedFloat
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.DragObserver
diff --git a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt
index fa21ed4..c7d6fd8 100644
--- a/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt
+++ b/ui/ui-animation/integration-tests/animation-demos/src/main/java/androidx/compose/animation/demos/StateAnimationWithInterruptionsDemo.kt
@@ -23,10 +23,10 @@
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.transition
 import androidx.ui.core.Modifier
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 935386d..b33dbf9 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
@@ -24,9 +24,9 @@
 import androidx.compose.animation.core.keyframes
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 dc937d3..9e830b9 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
@@ -22,8 +22,8 @@
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.TargetAnimation
 import androidx.compose.animation.core.fling
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.animation.animatedFloat
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 cddd06f..bf5a1fe 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
@@ -19,8 +19,8 @@
 import androidx.compose.animation.core.AnimationVector2D
 import androidx.compose.animation.core.TwoWayConverter
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.animation.animate
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawOpacity
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 4087c79..ed23928 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
@@ -17,7 +17,7 @@
 package androidx.compose.animation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
@@ -26,10 +26,10 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.wrapContentSize
 import androidx.compose.foundation.shape.RoundedCornerShape
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.animation.animateContentSize
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/CrossfadeSample.kt b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/CrossfadeSample.kt
index 75af57b..48a7bcf 100644
--- a/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/CrossfadeSample.kt
+++ b/ui/ui-animation/samples/src/main/java/androidx/compose/animation/samples/CrossfadeSample.kt
@@ -17,7 +17,7 @@
 package androidx.compose.animation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.animation.Crossfade
 import androidx.compose.foundation.Text
 
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 bce68bb..72b0c7f 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
@@ -18,7 +18,7 @@
 
 import androidx.compose.animation.core.transitionDefinition
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
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 5dbdd6b..8d00026 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
@@ -20,9 +20,9 @@
 import androidx.compose.animation.core.tween
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.size
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
diff --git a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/CrossfadeTest.kt b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/CrossfadeTest.kt
index 14040d9..29de2dd 100644
--- a/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/CrossfadeTest.kt
+++ b/ui/ui-animation/src/androidAndroidTest/kotlin/androidx/compose/animation/CrossfadeTest.kt
@@ -17,11 +17,11 @@
 
 import androidx.compose.animation.core.AnimationConstants.DefaultDurationMillis
 import androidx.compose.animation.core.TweenSpec
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onDispose
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.Text
 import androidx.ui.test.createComposeRule
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 6a8e752..e6caf64 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
@@ -23,10 +23,10 @@
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.LinearOutSlowInEasing
 import androidx.compose.animation.core.TweenSpec
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.Box
 import androidx.compose.ui.geometry.Offset
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedValueEffects.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedValueEffects.kt
index 21d9275..82ca818 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedValueEffects.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/AnimatedValueEffects.kt
@@ -23,13 +23,13 @@
 import androidx.compose.animation.core.AnimationVector4D
 import androidx.compose.animation.core.Spring
 import androidx.compose.animation.core.TwoWayConverter
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.ui.core.AnimationClockAmbient
 import androidx.compose.ui.graphics.Color
 
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 eb5b6875..501ff14 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
@@ -21,7 +21,7 @@
 import androidx.compose.animation.core.AnimationVector2D
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.spring
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.AnimationClockAmbient
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.LayoutDirection
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Crossfade.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Crossfade.kt
index 198f1b2..bffc5e6 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Crossfade.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Crossfade.kt
@@ -20,11 +20,11 @@
 import androidx.compose.animation.core.AnimationEndReason
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.invalidate
-import androidx.compose.key
-import androidx.compose.onCommit
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.invalidate
+import androidx.compose.runtime.key
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawOpacity
 import androidx.compose.foundation.layout.Stack
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/DisposableAnimationClock.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/DisposableAnimationClock.kt
index ed233df..0c85036 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/DisposableAnimationClock.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/DisposableAnimationClock.kt
@@ -18,9 +18,9 @@
 
 import androidx.compose.animation.core.AnimationClockObservable
 import androidx.compose.animation.core.AnimationClockObserver
-import androidx.compose.Composable
-import androidx.compose.onCommit
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
 
 /**
  * Return a new [AnimationClockObservable] wrapping this one that will auto-unsubscribe all
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/LegacyTransition.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/LegacyTransition.kt
index 6373526..869e66f 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/LegacyTransition.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/LegacyTransition.kt
@@ -19,9 +19,9 @@
 import androidx.compose.animation.core.AnimationClockObservable
 import androidx.compose.animation.core.TransitionDefinition
 import androidx.compose.animation.core.TransitionState
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.ui.core.AnimationClockAmbient
 
 /**
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 a439c3f..f2775d4 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
@@ -23,9 +23,9 @@
 import androidx.compose.animation.core.IntToVectorConverter
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.TwoWayConverter
-import androidx.compose.Composable
-import androidx.compose.onCommit
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
 import androidx.ui.core.AnimationClockAmbient
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
diff --git a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Transition.kt b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Transition.kt
index debcf13..7a05931 100644
--- a/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Transition.kt
+++ b/ui/ui-animation/src/commonMain/kotlin/androidx/compose/animation/Transition.kt
@@ -22,13 +22,13 @@
 import androidx.compose.animation.core.TransitionAnimation
 import androidx.compose.animation.core.TransitionDefinition
 import androidx.compose.animation.core.TransitionState
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onPreCommit
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onPreCommit
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.ui.core.AnimationClockAmbient
 
 /**
diff --git a/ui/ui-core/api/0.1.0-dev16.txt b/ui/ui-core/api/0.1.0-dev16.txt
index 6294bd6..1447df6 100644
--- a/ui/ui-core/api/0.1.0-dev16.txt
+++ b/ui/ui-core/api/0.1.0-dev16.txt
@@ -6,7 +6,7 @@
     method public final void invalidate();
   }
 
-  public final class VectorApplier extends androidx.compose.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+  public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
     ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
     method public void insert(int index, androidx.compose.ui.graphics.vector.VNode instance);
     method public void move(int from, int to, int count);
@@ -48,8 +48,8 @@
   }
 
   public final class VectorComposeKt {
-    method @androidx.compose.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method @androidx.compose.runtime.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
@@ -101,8 +101,8 @@
   }
 
   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-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);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
+    method @androidx.compose.runtime.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";
   }
 
@@ -234,9 +234,9 @@
 
 package androidx.ui.core {
 
-  @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
+  @androidx.compose.runtime.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
 
@@ -259,16 +259,16 @@
     property public final androidx.ui.core.AbsoluteAlignment TopRight;
   }
 
-  @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
-    method @androidx.compose.Composable public abstract void Content();
+    method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
     method public final void disposeComposition();
     method public final boolean isDisposed();
@@ -277,7 +277,7 @@
     property public final boolean isDisposed;
   }
 
-  @androidx.compose.Immutable public interface Alignment {
+  @androidx.compose.runtime.Immutable public interface Alignment {
     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;
   }
@@ -315,15 +315,15 @@
     property public final androidx.ui.core.Alignment TopStart;
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Horizontal {
     method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Vertical {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Vertical {
     method public int align(int size);
   }
 
-  @androidx.compose.Immutable public abstract sealed class AlignmentLine {
+  @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
     field public static final androidx.ui.core.AlignmentLine.Companion Companion;
     field public static final int Unspecified = -2147483648; // 0x80000000
   }
@@ -336,26 +336,26 @@
   }
 
   public final class AmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
-    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.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();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
 
   public final class AndroidActualsKt {
   }
 
   public final class AndroidAmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.view.View> getViewAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.view.View> getViewAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
   }
 
   public final class AndroidComposeViewKt {
@@ -387,8 +387,8 @@
   }
 
   public final class ClipKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
   }
 
   public final class CombinedModifier implements androidx.ui.core.Modifier {
@@ -403,21 +403,21 @@
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
-    method @androidx.compose.Composable public void Content();
+    method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
-    method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
+    method public static androidx.ui.core.Modifier materialize(androidx.compose.runtime.Composer<?>, androidx.ui.core.Modifier modifier);
   }
 
-  @androidx.compose.Immutable public final class ConsumedData {
+  @androidx.compose.runtime.Immutable public final class ConsumedData {
     ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
     method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
     method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
@@ -427,7 +427,7 @@
     method public abstract void drawContent();
   }
 
-  @androidx.compose.Stable public interface ContentScale {
+  @androidx.compose.runtime.Stable public interface ContentScale {
     method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
@@ -500,7 +500,7 @@
 
   public final class DrawLayerModifierKt {
     method public static inline long TransformOrigin(float pivotFractionX, float pivotFractionY);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
   }
 
   public interface DrawModifier extends androidx.ui.core.Modifier.Element {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    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);
+    method @androidx.compose.runtime.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 {
@@ -522,10 +522,10 @@
   @kotlin.RequiresOptIn(message="This is an experimental API for being able to perform subcomposition during the " + "measuring. API is likely to change before becoming stable.") public @interface ExperimentalSubcomposeLayoutApi {
   }
 
-  @androidx.compose.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
+  @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
     ctor public FixedScale(float value);
     method public float component1();
-    method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
     method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
@@ -597,8 +597,8 @@
   public final class LayoutIdKt {
     method public static Object? getId(androidx.ui.core.Measurable);
     method @Deprecated public static Object? getTag(androidx.ui.core.Measurable);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
-    method @Deprecated @androidx.compose.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
   }
 
   public interface LayoutIdParentData {
@@ -607,15 +607,15 @@
   }
 
   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.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 @androidx.compose.runtime.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.runtime.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.runtime.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.runtime.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.runtime.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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
@@ -760,7 +760,7 @@
     method @Deprecated public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.Stable public interface Modifier {
+  @androidx.compose.runtime.Stable public interface Modifier {
     method public boolean all(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public boolean any(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
@@ -809,7 +809,7 @@
   }
 
   public final class OpacityKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
   }
 
   public interface OwnedLayer {
@@ -954,25 +954,25 @@
     method public static inline String! toString-impl(long p);
   }
 
-  @androidx.compose.Immutable public final class PointerInputChange {
+  @androidx.compose.runtime.Immutable public final class PointerInputChange {
     method public long component1();
     method public androidx.ui.core.PointerInputData component2();
     method public androidx.ui.core.PointerInputData component3();
     method public androidx.ui.core.ConsumedData component4();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
     method public androidx.ui.core.ConsumedData getConsumed();
     method public androidx.ui.core.PointerInputData getCurrent();
     method public long getId();
     method public androidx.ui.core.PointerInputData getPrevious();
   }
 
-  @androidx.compose.Immutable public final class PointerInputData {
+  @androidx.compose.runtime.Immutable public final class PointerInputData {
     ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     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.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.runtime.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.compose.ui.unit.Uptime? getUptime();
@@ -995,11 +995,11 @@
   }
 
   public final class PopupKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
     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);
   }
 
@@ -1022,7 +1022,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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.runtime.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 {
@@ -1031,23 +1031,23 @@
   }
 
   public final class SubcompositionKt {
-    method @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public final class TestTagKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
   }
 
-  @androidx.compose.Immutable public final inline class TransformOrigin {
+  @androidx.compose.runtime.Immutable public final inline class TransformOrigin {
     ctor public TransformOrigin();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float pivotFractionX = this.pivotFractionX, float pivotFractionY = this.pivotFractionY);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getPivotFractionX-impl(long $this);
     method public static float getPivotFractionY-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.TransformOrigin.Companion Companion;
   }
 
@@ -1060,7 +1060,7 @@
     ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
-  @androidx.compose.Stable public interface WithConstraintsScope {
+  @androidx.compose.runtime.Stable public interface WithConstraintsScope {
     method public androidx.compose.ui.unit.Constraints getConstraints();
     method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
@@ -1076,12 +1076,12 @@
   }
 
   public final class WrapperKt {
-    method public static androidx.compose.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setContent(android.view.ViewGroup, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated public static androidx.compose.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setViewContent(android.view.ViewGroup, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method public static androidx.compose.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method @Deprecated @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.runtime.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setViewContent(android.view.ViewGroup, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @Deprecated @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public interface ZIndexModifier extends androidx.ui.core.Modifier.Element {
@@ -1090,7 +1090,7 @@
   }
 
   public final class ZIndexModifierKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
   }
 
 }
@@ -1131,11 +1131,11 @@
   }
 
   public final class FocusModifier2Kt {
-    method @androidx.compose.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
   }
 
   public final class FocusModifierKt {
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
     method @Deprecated public static androidx.ui.core.focus.FocusState getFocusState(androidx.ui.core.focus.FocusModifier);
   }
 
@@ -2077,12 +2077,12 @@
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
-  @androidx.compose.Immutable public final class Selection {
+  @androidx.compose.runtime.Immutable public final class Selection {
     ctor public Selection(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo component1();
     method public androidx.ui.core.selection.Selection.AnchorInfo component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo getEnd();
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
@@ -2090,19 +2090,19 @@
     method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
-  @androidx.compose.Immutable public static final class Selection.AnchorInfo {
+  @androidx.compose.runtime.Immutable public static final class Selection.AnchorInfo {
     ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
 
   public final class SelectionContainerKt {
-    method @androidx.compose.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class SelectionHandlesKt {
@@ -2121,7 +2121,7 @@
   }
 
   public final class SelectionRegistrarKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
   }
 
 }
@@ -2241,7 +2241,7 @@
   public final class PointerInteropUtilsKt {
   }
 
-  public final class UiApplier implements androidx.compose.Applier<java.lang.Object> {
+  public final class UiApplier implements androidx.compose.runtime.Applier<java.lang.Object> {
     ctor public UiApplier(Object root);
     method public void clear();
     method public void down(Object node);
@@ -2274,10 +2274,10 @@
 package androidx.ui.res {
 
   public final class ColorResourcesKt {
-    method @androidx.compose.Composable public static long colorResource(@ColorRes int id);
+    method @androidx.compose.runtime.Composable public static long colorResource(@ColorRes int id);
   }
 
-  @androidx.compose.Stable public final class DeferredResource<T> {
+  @androidx.compose.runtime.Stable public final class DeferredResource<T> {
     method public androidx.ui.res.Resource<T> getResource();
     property public final androidx.ui.res.Resource<T> resource;
   }
@@ -2288,14 +2288,14 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
   }
 
   public final class LoadedResource<T> extends androidx.ui.res.Resource<T> {
@@ -2307,10 +2307,10 @@
   }
 
   public final class PrimitiveResourcesKt {
-    method @androidx.compose.Composable public static boolean booleanResource(@BoolRes int id);
-    method @androidx.compose.Composable public static float dimensionResource(@DimenRes int id);
-    method @androidx.compose.Composable public static int[] integerArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static int integerResource(@IntegerRes int id);
+    method @androidx.compose.runtime.Composable public static boolean booleanResource(@BoolRes int id);
+    method @androidx.compose.runtime.Composable public static float dimensionResource(@DimenRes int id);
+    method @androidx.compose.runtime.Composable public static int[] integerArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static int integerResource(@IntegerRes int id);
   }
 
   public abstract sealed class Resource<T> {
@@ -2321,14 +2321,14 @@
   }
 
   public final class StringResourcesKt {
-    method @androidx.compose.Composable public static String![] stringArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+    method @androidx.compose.runtime.Composable public static String![] stringArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
   }
 
   public final class VectorResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
   }
 
 }
@@ -2474,7 +2474,7 @@
 package androidx.ui.tooling {
 
   public final class InspectionModeKt {
-    method public static androidx.compose.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
   }
 
 }
@@ -2482,15 +2482,15 @@
 package androidx.ui.viewinterop {
 
   public final class AndroidViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
     method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
   }
 
   public final class EmitViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
-    method @androidx.compose.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
 }
@@ -2498,8 +2498,8 @@
 package androidx.ui.viewmodel {
 
   public final class ViewModelKt {
-    method @androidx.compose.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
-    method @androidx.compose.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
   }
 
 }
diff --git a/ui/ui-core/api/current.txt b/ui/ui-core/api/current.txt
index 48cdf6a..341d791 100644
--- a/ui/ui-core/api/current.txt
+++ b/ui/ui-core/api/current.txt
@@ -6,7 +6,7 @@
     method public final void invalidate();
   }
 
-  public final class VectorApplier extends androidx.compose.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+  public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
     ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
     method public void insert(int index, androidx.compose.ui.graphics.vector.VNode instance);
     method public void move(int from, int to, int count);
@@ -48,8 +48,8 @@
   }
 
   public final class VectorComposeKt {
-    method @androidx.compose.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method @androidx.compose.runtime.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
@@ -101,8 +101,8 @@
   }
 
   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-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);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
+    method @androidx.compose.runtime.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";
   }
 
@@ -234,9 +234,9 @@
 
 package androidx.ui.core {
 
-  @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
+  @androidx.compose.runtime.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
 
@@ -259,16 +259,16 @@
     property public final androidx.ui.core.AbsoluteAlignment TopRight;
   }
 
-  @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
-    method @androidx.compose.Composable public abstract void Content();
+    method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
     method public final void disposeComposition();
     method public final boolean isDisposed();
@@ -277,7 +277,7 @@
     property public final boolean isDisposed;
   }
 
-  @androidx.compose.Immutable public interface Alignment {
+  @androidx.compose.runtime.Immutable public interface Alignment {
     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;
   }
@@ -315,15 +315,15 @@
     property public final androidx.ui.core.Alignment TopStart;
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Horizontal {
     method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Vertical {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Vertical {
     method public int align(int size);
   }
 
-  @androidx.compose.Immutable public abstract sealed class AlignmentLine {
+  @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
     field public static final androidx.ui.core.AlignmentLine.Companion Companion;
     field public static final int Unspecified = -2147483648; // 0x80000000
   }
@@ -336,26 +336,26 @@
   }
 
   public final class AmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
-    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.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();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
 
   public final class AndroidActualsKt {
   }
 
   public final class AndroidAmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.view.View> getViewAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.view.View> getViewAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
   }
 
   public final class AndroidComposeViewKt {
@@ -387,8 +387,8 @@
   }
 
   public final class ClipKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
   }
 
   public final class CombinedModifier implements androidx.ui.core.Modifier {
@@ -403,21 +403,21 @@
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
-    method @androidx.compose.Composable public void Content();
+    method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
-    method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
+    method public static androidx.ui.core.Modifier materialize(androidx.compose.runtime.Composer<?>, androidx.ui.core.Modifier modifier);
   }
 
-  @androidx.compose.Immutable public final class ConsumedData {
+  @androidx.compose.runtime.Immutable public final class ConsumedData {
     ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
     method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
     method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
@@ -427,7 +427,7 @@
     method public abstract void drawContent();
   }
 
-  @androidx.compose.Stable public interface ContentScale {
+  @androidx.compose.runtime.Stable public interface ContentScale {
     method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
@@ -500,7 +500,7 @@
 
   public final class DrawLayerModifierKt {
     method public static inline long TransformOrigin(float pivotFractionX, float pivotFractionY);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
   }
 
   public interface DrawModifier extends androidx.ui.core.Modifier.Element {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    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);
+    method @androidx.compose.runtime.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 {
@@ -522,10 +522,10 @@
   @kotlin.RequiresOptIn(message="This is an experimental API for being able to perform subcomposition during the " + "measuring. API is likely to change before becoming stable.") public @interface ExperimentalSubcomposeLayoutApi {
   }
 
-  @androidx.compose.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
+  @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
     ctor public FixedScale(float value);
     method public float component1();
-    method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
     method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
@@ -597,8 +597,8 @@
   public final class LayoutIdKt {
     method public static Object? getId(androidx.ui.core.Measurable);
     method @Deprecated public static Object? getTag(androidx.ui.core.Measurable);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
-    method @Deprecated @androidx.compose.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
   }
 
   public interface LayoutIdParentData {
@@ -607,15 +607,15 @@
   }
 
   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.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 @androidx.compose.runtime.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.runtime.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.runtime.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.runtime.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.runtime.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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
@@ -760,7 +760,7 @@
     method @Deprecated public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.Stable public interface Modifier {
+  @androidx.compose.runtime.Stable public interface Modifier {
     method public boolean all(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public boolean any(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
@@ -809,7 +809,7 @@
   }
 
   public final class OpacityKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
   }
 
   public interface OwnedLayer {
@@ -954,25 +954,25 @@
     method public static inline String! toString-impl(long p);
   }
 
-  @androidx.compose.Immutable public final class PointerInputChange {
+  @androidx.compose.runtime.Immutable public final class PointerInputChange {
     method public long component1();
     method public androidx.ui.core.PointerInputData component2();
     method public androidx.ui.core.PointerInputData component3();
     method public androidx.ui.core.ConsumedData component4();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
     method public androidx.ui.core.ConsumedData getConsumed();
     method public androidx.ui.core.PointerInputData getCurrent();
     method public long getId();
     method public androidx.ui.core.PointerInputData getPrevious();
   }
 
-  @androidx.compose.Immutable public final class PointerInputData {
+  @androidx.compose.runtime.Immutable public final class PointerInputData {
     ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     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.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.runtime.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.compose.ui.unit.Uptime? getUptime();
@@ -995,11 +995,11 @@
   }
 
   public final class PopupKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
     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);
   }
 
@@ -1022,7 +1022,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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.runtime.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 {
@@ -1031,23 +1031,23 @@
   }
 
   public final class SubcompositionKt {
-    method @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public final class TestTagKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
   }
 
-  @androidx.compose.Immutable public final inline class TransformOrigin {
+  @androidx.compose.runtime.Immutable public final inline class TransformOrigin {
     ctor public TransformOrigin();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float pivotFractionX = this.pivotFractionX, float pivotFractionY = this.pivotFractionY);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getPivotFractionX-impl(long $this);
     method public static float getPivotFractionY-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.TransformOrigin.Companion Companion;
   }
 
@@ -1060,7 +1060,7 @@
     ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
-  @androidx.compose.Stable public interface WithConstraintsScope {
+  @androidx.compose.runtime.Stable public interface WithConstraintsScope {
     method public androidx.compose.ui.unit.Constraints getConstraints();
     method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
@@ -1076,12 +1076,12 @@
   }
 
   public final class WrapperKt {
-    method public static androidx.compose.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setContent(android.view.ViewGroup, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated public static androidx.compose.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setViewContent(android.view.ViewGroup, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method public static androidx.compose.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method @Deprecated @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.runtime.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setViewContent(android.view.ViewGroup, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @Deprecated @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public interface ZIndexModifier extends androidx.ui.core.Modifier.Element {
@@ -1090,7 +1090,7 @@
   }
 
   public final class ZIndexModifierKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
   }
 
 }
@@ -1131,11 +1131,11 @@
   }
 
   public final class FocusModifier2Kt {
-    method @androidx.compose.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
   }
 
   public final class FocusModifierKt {
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
     method @Deprecated public static androidx.ui.core.focus.FocusState getFocusState(androidx.ui.core.focus.FocusModifier);
   }
 
@@ -2069,12 +2069,12 @@
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
-  @androidx.compose.Immutable public final class Selection {
+  @androidx.compose.runtime.Immutable public final class Selection {
     ctor public Selection(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo component1();
     method public androidx.ui.core.selection.Selection.AnchorInfo component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo getEnd();
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
@@ -2082,19 +2082,19 @@
     method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
-  @androidx.compose.Immutable public static final class Selection.AnchorInfo {
+  @androidx.compose.runtime.Immutable public static final class Selection.AnchorInfo {
     ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
 
   public final class SelectionContainerKt {
-    method @androidx.compose.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class SelectionHandlesKt {
@@ -2113,7 +2113,7 @@
   }
 
   public final class SelectionRegistrarKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
   }
 
 }
@@ -2233,7 +2233,7 @@
   public final class PointerInteropUtilsKt {
   }
 
-  public final class UiApplier implements androidx.compose.Applier<java.lang.Object> {
+  public final class UiApplier implements androidx.compose.runtime.Applier<java.lang.Object> {
     ctor public UiApplier(Object root);
     method public void clear();
     method public void down(Object node);
@@ -2266,10 +2266,10 @@
 package androidx.ui.res {
 
   public final class ColorResourcesKt {
-    method @androidx.compose.Composable public static long colorResource(@ColorRes int id);
+    method @androidx.compose.runtime.Composable public static long colorResource(@ColorRes int id);
   }
 
-  @androidx.compose.Stable public final class DeferredResource<T> {
+  @androidx.compose.runtime.Stable public final class DeferredResource<T> {
     method public androidx.ui.res.Resource<T> getResource();
     property public final androidx.ui.res.Resource<T> resource;
   }
@@ -2280,14 +2280,14 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
   }
 
   public final class LoadedResource<T> extends androidx.ui.res.Resource<T> {
@@ -2299,10 +2299,10 @@
   }
 
   public final class PrimitiveResourcesKt {
-    method @androidx.compose.Composable public static boolean booleanResource(@BoolRes int id);
-    method @androidx.compose.Composable public static float dimensionResource(@DimenRes int id);
-    method @androidx.compose.Composable public static int[] integerArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static int integerResource(@IntegerRes int id);
+    method @androidx.compose.runtime.Composable public static boolean booleanResource(@BoolRes int id);
+    method @androidx.compose.runtime.Composable public static float dimensionResource(@DimenRes int id);
+    method @androidx.compose.runtime.Composable public static int[] integerArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static int integerResource(@IntegerRes int id);
   }
 
   public abstract sealed class Resource<T> {
@@ -2313,14 +2313,14 @@
   }
 
   public final class StringResourcesKt {
-    method @androidx.compose.Composable public static String![] stringArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+    method @androidx.compose.runtime.Composable public static String![] stringArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
   }
 
   public final class VectorResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
   }
 
 }
@@ -2466,7 +2466,7 @@
 package androidx.ui.tooling {
 
   public final class InspectionModeKt {
-    method public static androidx.compose.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
   }
 
 }
@@ -2474,15 +2474,15 @@
 package androidx.ui.viewinterop {
 
   public final class AndroidViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
     method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
   }
 
   public final class EmitViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
-    method @androidx.compose.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
 }
@@ -2490,8 +2490,8 @@
 package androidx.ui.viewmodel {
 
   public final class ViewModelKt {
-    method @androidx.compose.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
-    method @androidx.compose.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
   }
 
 }
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 6294bd6..1447df6 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
@@ -6,7 +6,7 @@
     method public final void invalidate();
   }
 
-  public final class VectorApplier extends androidx.compose.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+  public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
     ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
     method public void insert(int index, androidx.compose.ui.graphics.vector.VNode instance);
     method public void move(int from, int to, int count);
@@ -48,8 +48,8 @@
   }
 
   public final class VectorComposeKt {
-    method @androidx.compose.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method @androidx.compose.runtime.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
@@ -101,8 +101,8 @@
   }
 
   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-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);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
+    method @androidx.compose.runtime.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";
   }
 
@@ -234,9 +234,9 @@
 
 package androidx.ui.core {
 
-  @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
+  @androidx.compose.runtime.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
 
@@ -259,16 +259,16 @@
     property public final androidx.ui.core.AbsoluteAlignment TopRight;
   }
 
-  @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
-    method @androidx.compose.Composable public abstract void Content();
+    method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
     method public final void disposeComposition();
     method public final boolean isDisposed();
@@ -277,7 +277,7 @@
     property public final boolean isDisposed;
   }
 
-  @androidx.compose.Immutable public interface Alignment {
+  @androidx.compose.runtime.Immutable public interface Alignment {
     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;
   }
@@ -315,15 +315,15 @@
     property public final androidx.ui.core.Alignment TopStart;
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Horizontal {
     method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Vertical {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Vertical {
     method public int align(int size);
   }
 
-  @androidx.compose.Immutable public abstract sealed class AlignmentLine {
+  @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
     field public static final androidx.ui.core.AlignmentLine.Companion Companion;
     field public static final int Unspecified = -2147483648; // 0x80000000
   }
@@ -336,26 +336,26 @@
   }
 
   public final class AmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
-    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.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();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
 
   public final class AndroidActualsKt {
   }
 
   public final class AndroidAmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.view.View> getViewAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.view.View> getViewAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
   }
 
   public final class AndroidComposeViewKt {
@@ -387,8 +387,8 @@
   }
 
   public final class ClipKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
   }
 
   public final class CombinedModifier implements androidx.ui.core.Modifier {
@@ -403,21 +403,21 @@
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
-    method @androidx.compose.Composable public void Content();
+    method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
-    method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
+    method public static androidx.ui.core.Modifier materialize(androidx.compose.runtime.Composer<?>, androidx.ui.core.Modifier modifier);
   }
 
-  @androidx.compose.Immutable public final class ConsumedData {
+  @androidx.compose.runtime.Immutable public final class ConsumedData {
     ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
     method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
     method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
@@ -427,7 +427,7 @@
     method public abstract void drawContent();
   }
 
-  @androidx.compose.Stable public interface ContentScale {
+  @androidx.compose.runtime.Stable public interface ContentScale {
     method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
@@ -500,7 +500,7 @@
 
   public final class DrawLayerModifierKt {
     method public static inline long TransformOrigin(float pivotFractionX, float pivotFractionY);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
   }
 
   public interface DrawModifier extends androidx.ui.core.Modifier.Element {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    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);
+    method @androidx.compose.runtime.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 {
@@ -522,10 +522,10 @@
   @kotlin.RequiresOptIn(message="This is an experimental API for being able to perform subcomposition during the " + "measuring. API is likely to change before becoming stable.") public @interface ExperimentalSubcomposeLayoutApi {
   }
 
-  @androidx.compose.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
+  @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
     ctor public FixedScale(float value);
     method public float component1();
-    method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
     method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
@@ -597,8 +597,8 @@
   public final class LayoutIdKt {
     method public static Object? getId(androidx.ui.core.Measurable);
     method @Deprecated public static Object? getTag(androidx.ui.core.Measurable);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
-    method @Deprecated @androidx.compose.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
   }
 
   public interface LayoutIdParentData {
@@ -607,15 +607,15 @@
   }
 
   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.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 @androidx.compose.runtime.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.runtime.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.runtime.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.runtime.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.runtime.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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
@@ -760,7 +760,7 @@
     method @Deprecated public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.Stable public interface Modifier {
+  @androidx.compose.runtime.Stable public interface Modifier {
     method public boolean all(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public boolean any(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
@@ -809,7 +809,7 @@
   }
 
   public final class OpacityKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
   }
 
   public interface OwnedLayer {
@@ -954,25 +954,25 @@
     method public static inline String! toString-impl(long p);
   }
 
-  @androidx.compose.Immutable public final class PointerInputChange {
+  @androidx.compose.runtime.Immutable public final class PointerInputChange {
     method public long component1();
     method public androidx.ui.core.PointerInputData component2();
     method public androidx.ui.core.PointerInputData component3();
     method public androidx.ui.core.ConsumedData component4();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
     method public androidx.ui.core.ConsumedData getConsumed();
     method public androidx.ui.core.PointerInputData getCurrent();
     method public long getId();
     method public androidx.ui.core.PointerInputData getPrevious();
   }
 
-  @androidx.compose.Immutable public final class PointerInputData {
+  @androidx.compose.runtime.Immutable public final class PointerInputData {
     ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     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.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.runtime.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.compose.ui.unit.Uptime? getUptime();
@@ -995,11 +995,11 @@
   }
 
   public final class PopupKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
     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);
   }
 
@@ -1022,7 +1022,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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.runtime.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 {
@@ -1031,23 +1031,23 @@
   }
 
   public final class SubcompositionKt {
-    method @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public final class TestTagKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
   }
 
-  @androidx.compose.Immutable public final inline class TransformOrigin {
+  @androidx.compose.runtime.Immutable public final inline class TransformOrigin {
     ctor public TransformOrigin();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float pivotFractionX = this.pivotFractionX, float pivotFractionY = this.pivotFractionY);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getPivotFractionX-impl(long $this);
     method public static float getPivotFractionY-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.TransformOrigin.Companion Companion;
   }
 
@@ -1060,7 +1060,7 @@
     ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
-  @androidx.compose.Stable public interface WithConstraintsScope {
+  @androidx.compose.runtime.Stable public interface WithConstraintsScope {
     method public androidx.compose.ui.unit.Constraints getConstraints();
     method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
@@ -1076,12 +1076,12 @@
   }
 
   public final class WrapperKt {
-    method public static androidx.compose.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setContent(android.view.ViewGroup, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated public static androidx.compose.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setViewContent(android.view.ViewGroup, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method public static androidx.compose.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method @Deprecated @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.runtime.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setViewContent(android.view.ViewGroup, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @Deprecated @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public interface ZIndexModifier extends androidx.ui.core.Modifier.Element {
@@ -1090,7 +1090,7 @@
   }
 
   public final class ZIndexModifierKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
   }
 
 }
@@ -1131,11 +1131,11 @@
   }
 
   public final class FocusModifier2Kt {
-    method @androidx.compose.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
   }
 
   public final class FocusModifierKt {
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
     method @Deprecated public static androidx.ui.core.focus.FocusState getFocusState(androidx.ui.core.focus.FocusModifier);
   }
 
@@ -2077,12 +2077,12 @@
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
-  @androidx.compose.Immutable public final class Selection {
+  @androidx.compose.runtime.Immutable public final class Selection {
     ctor public Selection(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo component1();
     method public androidx.ui.core.selection.Selection.AnchorInfo component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo getEnd();
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
@@ -2090,19 +2090,19 @@
     method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
-  @androidx.compose.Immutable public static final class Selection.AnchorInfo {
+  @androidx.compose.runtime.Immutable public static final class Selection.AnchorInfo {
     ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
 
   public final class SelectionContainerKt {
-    method @androidx.compose.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class SelectionHandlesKt {
@@ -2121,7 +2121,7 @@
   }
 
   public final class SelectionRegistrarKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
   }
 
 }
@@ -2241,7 +2241,7 @@
   public final class PointerInteropUtilsKt {
   }
 
-  public final class UiApplier implements androidx.compose.Applier<java.lang.Object> {
+  public final class UiApplier implements androidx.compose.runtime.Applier<java.lang.Object> {
     ctor public UiApplier(Object root);
     method public void clear();
     method public void down(Object node);
@@ -2274,10 +2274,10 @@
 package androidx.ui.res {
 
   public final class ColorResourcesKt {
-    method @androidx.compose.Composable public static long colorResource(@ColorRes int id);
+    method @androidx.compose.runtime.Composable public static long colorResource(@ColorRes int id);
   }
 
-  @androidx.compose.Stable public final class DeferredResource<T> {
+  @androidx.compose.runtime.Stable public final class DeferredResource<T> {
     method public androidx.ui.res.Resource<T> getResource();
     property public final androidx.ui.res.Resource<T> resource;
   }
@@ -2288,14 +2288,14 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
   }
 
   public final class LoadedResource<T> extends androidx.ui.res.Resource<T> {
@@ -2307,10 +2307,10 @@
   }
 
   public final class PrimitiveResourcesKt {
-    method @androidx.compose.Composable public static boolean booleanResource(@BoolRes int id);
-    method @androidx.compose.Composable public static float dimensionResource(@DimenRes int id);
-    method @androidx.compose.Composable public static int[] integerArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static int integerResource(@IntegerRes int id);
+    method @androidx.compose.runtime.Composable public static boolean booleanResource(@BoolRes int id);
+    method @androidx.compose.runtime.Composable public static float dimensionResource(@DimenRes int id);
+    method @androidx.compose.runtime.Composable public static int[] integerArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static int integerResource(@IntegerRes int id);
   }
 
   public abstract sealed class Resource<T> {
@@ -2321,14 +2321,14 @@
   }
 
   public final class StringResourcesKt {
-    method @androidx.compose.Composable public static String![] stringArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+    method @androidx.compose.runtime.Composable public static String![] stringArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
   }
 
   public final class VectorResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
   }
 
 }
@@ -2474,7 +2474,7 @@
 package androidx.ui.tooling {
 
   public final class InspectionModeKt {
-    method public static androidx.compose.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
   }
 
 }
@@ -2482,15 +2482,15 @@
 package androidx.ui.viewinterop {
 
   public final class AndroidViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
     method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
   }
 
   public final class EmitViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
-    method @androidx.compose.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
 }
@@ -2498,8 +2498,8 @@
 package androidx.ui.viewmodel {
 
   public final class ViewModelKt {
-    method @androidx.compose.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
-    method @androidx.compose.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
   }
 
 }
diff --git a/ui/ui-core/api/public_plus_experimental_current.txt b/ui/ui-core/api/public_plus_experimental_current.txt
index 48cdf6a..341d791 100644
--- a/ui/ui-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-core/api/public_plus_experimental_current.txt
@@ -6,7 +6,7 @@
     method public final void invalidate();
   }
 
-  public final class VectorApplier extends androidx.compose.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+  public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
     ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
     method public void insert(int index, androidx.compose.ui.graphics.vector.VNode instance);
     method public void move(int from, int to, int count);
@@ -48,8 +48,8 @@
   }
 
   public final class VectorComposeKt {
-    method @androidx.compose.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method @androidx.compose.runtime.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
@@ -101,8 +101,8 @@
   }
 
   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-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);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
+    method @androidx.compose.runtime.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";
   }
 
@@ -234,9 +234,9 @@
 
 package androidx.ui.core {
 
-  @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
+  @androidx.compose.runtime.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
 
@@ -259,16 +259,16 @@
     property public final androidx.ui.core.AbsoluteAlignment TopRight;
   }
 
-  @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
-    method @androidx.compose.Composable public abstract void Content();
+    method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
     method public final void disposeComposition();
     method public final boolean isDisposed();
@@ -277,7 +277,7 @@
     property public final boolean isDisposed;
   }
 
-  @androidx.compose.Immutable public interface Alignment {
+  @androidx.compose.runtime.Immutable public interface Alignment {
     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;
   }
@@ -315,15 +315,15 @@
     property public final androidx.ui.core.Alignment TopStart;
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Horizontal {
     method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Vertical {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Vertical {
     method public int align(int size);
   }
 
-  @androidx.compose.Immutable public abstract sealed class AlignmentLine {
+  @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
     field public static final androidx.ui.core.AlignmentLine.Companion Companion;
     field public static final int Unspecified = -2147483648; // 0x80000000
   }
@@ -336,26 +336,26 @@
   }
 
   public final class AmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
-    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.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();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
 
   public final class AndroidActualsKt {
   }
 
   public final class AndroidAmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.view.View> getViewAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.view.View> getViewAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
   }
 
   public final class AndroidComposeViewKt {
@@ -387,8 +387,8 @@
   }
 
   public final class ClipKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
   }
 
   public final class CombinedModifier implements androidx.ui.core.Modifier {
@@ -403,21 +403,21 @@
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
-    method @androidx.compose.Composable public void Content();
+    method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
-    method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
+    method public static androidx.ui.core.Modifier materialize(androidx.compose.runtime.Composer<?>, androidx.ui.core.Modifier modifier);
   }
 
-  @androidx.compose.Immutable public final class ConsumedData {
+  @androidx.compose.runtime.Immutable public final class ConsumedData {
     ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
     method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
     method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
@@ -427,7 +427,7 @@
     method public abstract void drawContent();
   }
 
-  @androidx.compose.Stable public interface ContentScale {
+  @androidx.compose.runtime.Stable public interface ContentScale {
     method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
@@ -500,7 +500,7 @@
 
   public final class DrawLayerModifierKt {
     method public static inline long TransformOrigin(float pivotFractionX, float pivotFractionY);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
   }
 
   public interface DrawModifier extends androidx.ui.core.Modifier.Element {
@@ -513,7 +513,7 @@
   }
 
   public final class DrawShadowKt {
-    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);
+    method @androidx.compose.runtime.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 {
@@ -522,10 +522,10 @@
   @kotlin.RequiresOptIn(message="This is an experimental API for being able to perform subcomposition during the " + "measuring. API is likely to change before becoming stable.") public @interface ExperimentalSubcomposeLayoutApi {
   }
 
-  @androidx.compose.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
+  @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
     ctor public FixedScale(float value);
     method public float component1();
-    method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
     method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
@@ -597,8 +597,8 @@
   public final class LayoutIdKt {
     method public static Object? getId(androidx.ui.core.Measurable);
     method @Deprecated public static Object? getTag(androidx.ui.core.Measurable);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
-    method @Deprecated @androidx.compose.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
   }
 
   public interface LayoutIdParentData {
@@ -607,15 +607,15 @@
   }
 
   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.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 @androidx.compose.runtime.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.runtime.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.runtime.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.runtime.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.runtime.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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
@@ -760,7 +760,7 @@
     method @Deprecated public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.Stable public interface Modifier {
+  @androidx.compose.runtime.Stable public interface Modifier {
     method public boolean all(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public boolean any(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
@@ -809,7 +809,7 @@
   }
 
   public final class OpacityKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
   }
 
   public interface OwnedLayer {
@@ -954,25 +954,25 @@
     method public static inline String! toString-impl(long p);
   }
 
-  @androidx.compose.Immutable public final class PointerInputChange {
+  @androidx.compose.runtime.Immutable public final class PointerInputChange {
     method public long component1();
     method public androidx.ui.core.PointerInputData component2();
     method public androidx.ui.core.PointerInputData component3();
     method public androidx.ui.core.ConsumedData component4();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
     method public androidx.ui.core.ConsumedData getConsumed();
     method public androidx.ui.core.PointerInputData getCurrent();
     method public long getId();
     method public androidx.ui.core.PointerInputData getPrevious();
   }
 
-  @androidx.compose.Immutable public final class PointerInputData {
+  @androidx.compose.runtime.Immutable public final class PointerInputData {
     ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     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.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.runtime.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.compose.ui.unit.Uptime? getUptime();
@@ -995,11 +995,11 @@
   }
 
   public final class PopupKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
     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);
   }
 
@@ -1022,7 +1022,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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.runtime.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 {
@@ -1031,23 +1031,23 @@
   }
 
   public final class SubcompositionKt {
-    method @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public final class TestTagKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
   }
 
-  @androidx.compose.Immutable public final inline class TransformOrigin {
+  @androidx.compose.runtime.Immutable public final inline class TransformOrigin {
     ctor public TransformOrigin();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float pivotFractionX = this.pivotFractionX, float pivotFractionY = this.pivotFractionY);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getPivotFractionX-impl(long $this);
     method public static float getPivotFractionY-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.TransformOrigin.Companion Companion;
   }
 
@@ -1060,7 +1060,7 @@
     ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
-  @androidx.compose.Stable public interface WithConstraintsScope {
+  @androidx.compose.runtime.Stable public interface WithConstraintsScope {
     method public androidx.compose.ui.unit.Constraints getConstraints();
     method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
@@ -1076,12 +1076,12 @@
   }
 
   public final class WrapperKt {
-    method public static androidx.compose.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setContent(android.view.ViewGroup, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated public static androidx.compose.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setViewContent(android.view.ViewGroup, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method public static androidx.compose.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method @Deprecated @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.runtime.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setViewContent(android.view.ViewGroup, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @Deprecated @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public interface ZIndexModifier extends androidx.ui.core.Modifier.Element {
@@ -1090,7 +1090,7 @@
   }
 
   public final class ZIndexModifierKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
   }
 
 }
@@ -1131,11 +1131,11 @@
   }
 
   public final class FocusModifier2Kt {
-    method @androidx.compose.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
   }
 
   public final class FocusModifierKt {
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
     method @Deprecated public static androidx.ui.core.focus.FocusState getFocusState(androidx.ui.core.focus.FocusModifier);
   }
 
@@ -2069,12 +2069,12 @@
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
-  @androidx.compose.Immutable public final class Selection {
+  @androidx.compose.runtime.Immutable public final class Selection {
     ctor public Selection(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo component1();
     method public androidx.ui.core.selection.Selection.AnchorInfo component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo getEnd();
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
@@ -2082,19 +2082,19 @@
     method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
-  @androidx.compose.Immutable public static final class Selection.AnchorInfo {
+  @androidx.compose.runtime.Immutable public static final class Selection.AnchorInfo {
     ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
 
   public final class SelectionContainerKt {
-    method @androidx.compose.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class SelectionHandlesKt {
@@ -2113,7 +2113,7 @@
   }
 
   public final class SelectionRegistrarKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
   }
 
 }
@@ -2233,7 +2233,7 @@
   public final class PointerInteropUtilsKt {
   }
 
-  public final class UiApplier implements androidx.compose.Applier<java.lang.Object> {
+  public final class UiApplier implements androidx.compose.runtime.Applier<java.lang.Object> {
     ctor public UiApplier(Object root);
     method public void clear();
     method public void down(Object node);
@@ -2266,10 +2266,10 @@
 package androidx.ui.res {
 
   public final class ColorResourcesKt {
-    method @androidx.compose.Composable public static long colorResource(@ColorRes int id);
+    method @androidx.compose.runtime.Composable public static long colorResource(@ColorRes int id);
   }
 
-  @androidx.compose.Stable public final class DeferredResource<T> {
+  @androidx.compose.runtime.Stable public final class DeferredResource<T> {
     method public androidx.ui.res.Resource<T> getResource();
     property public final androidx.ui.res.Resource<T> resource;
   }
@@ -2280,14 +2280,14 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
   }
 
   public final class LoadedResource<T> extends androidx.ui.res.Resource<T> {
@@ -2299,10 +2299,10 @@
   }
 
   public final class PrimitiveResourcesKt {
-    method @androidx.compose.Composable public static boolean booleanResource(@BoolRes int id);
-    method @androidx.compose.Composable public static float dimensionResource(@DimenRes int id);
-    method @androidx.compose.Composable public static int[] integerArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static int integerResource(@IntegerRes int id);
+    method @androidx.compose.runtime.Composable public static boolean booleanResource(@BoolRes int id);
+    method @androidx.compose.runtime.Composable public static float dimensionResource(@DimenRes int id);
+    method @androidx.compose.runtime.Composable public static int[] integerArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static int integerResource(@IntegerRes int id);
   }
 
   public abstract sealed class Resource<T> {
@@ -2313,14 +2313,14 @@
   }
 
   public final class StringResourcesKt {
-    method @androidx.compose.Composable public static String![] stringArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+    method @androidx.compose.runtime.Composable public static String![] stringArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
   }
 
   public final class VectorResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
   }
 
 }
@@ -2466,7 +2466,7 @@
 package androidx.ui.tooling {
 
   public final class InspectionModeKt {
-    method public static androidx.compose.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
   }
 
 }
@@ -2474,15 +2474,15 @@
 package androidx.ui.viewinterop {
 
   public final class AndroidViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
     method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
   }
 
   public final class EmitViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
-    method @androidx.compose.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
 }
@@ -2490,8 +2490,8 @@
 package androidx.ui.viewmodel {
 
   public final class ViewModelKt {
-    method @androidx.compose.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
-    method @androidx.compose.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
   }
 
 }
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 4eef15b..a8ff6c4 100644
--- a/ui/ui-core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-core/api/restricted_0.1.0-dev16.txt
@@ -6,7 +6,7 @@
     method public final void invalidate();
   }
 
-  public final class VectorApplier extends androidx.compose.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+  public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
     ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
     method public void insert(int index, androidx.compose.ui.graphics.vector.VNode instance);
     method public void move(int from, int to, int count);
@@ -48,8 +48,8 @@
   }
 
   public final class VectorComposeKt {
-    method @androidx.compose.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method @androidx.compose.runtime.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
@@ -101,8 +101,8 @@
   }
 
   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-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);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
+    method @androidx.compose.runtime.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";
   }
 
@@ -234,9 +234,9 @@
 
 package androidx.ui.core {
 
-  @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
+  @androidx.compose.runtime.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
 
@@ -259,16 +259,16 @@
     property public final androidx.ui.core.AbsoluteAlignment TopRight;
   }
 
-  @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
-    method @androidx.compose.Composable public abstract void Content();
+    method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
     method public final void disposeComposition();
     method public final boolean isDisposed();
@@ -277,7 +277,7 @@
     property public final boolean isDisposed;
   }
 
-  @androidx.compose.Immutable public interface Alignment {
+  @androidx.compose.runtime.Immutable public interface Alignment {
     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;
   }
@@ -315,15 +315,15 @@
     property public final androidx.ui.core.Alignment TopStart;
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Horizontal {
     method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Vertical {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Vertical {
     method public int align(int size);
   }
 
-  @androidx.compose.Immutable public abstract sealed class AlignmentLine {
+  @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
     field public static final androidx.ui.core.AlignmentLine.Companion Companion;
     field public static final int Unspecified = -2147483648; // 0x80000000
   }
@@ -336,26 +336,26 @@
   }
 
   public final class AmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
-    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.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();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
 
   public final class AndroidActualsKt {
   }
 
   public final class AndroidAmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.view.View> getViewAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.view.View> getViewAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
   }
 
   public final class AndroidComposeViewKt {
@@ -393,8 +393,8 @@
   }
 
   public final class ClipKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
   }
 
   public final class CombinedModifier implements androidx.ui.core.Modifier {
@@ -409,21 +409,21 @@
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
-    method @androidx.compose.Composable public void Content();
+    method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
-    method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
+    method public static androidx.ui.core.Modifier materialize(androidx.compose.runtime.Composer<?>, androidx.ui.core.Modifier modifier);
   }
 
-  @androidx.compose.Immutable public final class ConsumedData {
+  @androidx.compose.runtime.Immutable public final class ConsumedData {
     ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
     method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
     method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
@@ -433,7 +433,7 @@
     method public abstract void drawContent();
   }
 
-  @androidx.compose.Stable public interface ContentScale {
+  @androidx.compose.runtime.Stable public interface ContentScale {
     method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
@@ -520,7 +520,7 @@
 
   public final class DrawLayerModifierKt {
     method public static inline long TransformOrigin(float pivotFractionX, float pivotFractionY);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
   }
 
   public interface DrawModifier extends androidx.ui.core.Modifier.Element {
@@ -533,7 +533,7 @@
   }
 
   public final class DrawShadowKt {
-    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);
+    method @androidx.compose.runtime.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 {
@@ -542,10 +542,10 @@
   @kotlin.RequiresOptIn(message="This is an experimental API for being able to perform subcomposition during the " + "measuring. API is likely to change before becoming stable.") public @interface ExperimentalSubcomposeLayoutApi {
   }
 
-  @androidx.compose.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
+  @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
     ctor public FixedScale(float value);
     method public float component1();
-    method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
     method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
@@ -607,17 +607,17 @@
     method public float getDensity();
     method public float getFontScale();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public float toDp(float);
+    method @androidx.compose.runtime.Stable public float toDp(int);
+    method @androidx.compose.runtime.Stable public float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public long toSp(float);
+    method @androidx.compose.runtime.Stable public long toSp(int);
+    method @androidx.compose.runtime.Stable public long toSp-0680j_4(float);
   }
 
   public interface LayoutCoordinates {
@@ -660,8 +660,8 @@
   public final class LayoutIdKt {
     method public static Object? getId(androidx.ui.core.Measurable);
     method @Deprecated public static Object? getTag(androidx.ui.core.Measurable);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
-    method @Deprecated @androidx.compose.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
   }
 
   public interface LayoutIdParentData {
@@ -670,15 +670,15 @@
   }
 
   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.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 @androidx.compose.runtime.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.runtime.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.runtime.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.runtime.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.runtime.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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
@@ -823,7 +823,7 @@
     method @Deprecated public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.Stable public interface Modifier {
+  @androidx.compose.runtime.Stable public interface Modifier {
     method public boolean all(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public boolean any(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
@@ -872,7 +872,7 @@
   }
 
   public final class OpacityKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
   }
 
   public interface OwnedLayer {
@@ -1017,25 +1017,25 @@
     method public static inline String! toString-impl(long p);
   }
 
-  @androidx.compose.Immutable public final class PointerInputChange {
+  @androidx.compose.runtime.Immutable public final class PointerInputChange {
     method public long component1();
     method public androidx.ui.core.PointerInputData component2();
     method public androidx.ui.core.PointerInputData component3();
     method public androidx.ui.core.ConsumedData component4();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
     method public androidx.ui.core.ConsumedData getConsumed();
     method public androidx.ui.core.PointerInputData getCurrent();
     method public long getId();
     method public androidx.ui.core.PointerInputData getPrevious();
   }
 
-  @androidx.compose.Immutable public final class PointerInputData {
+  @androidx.compose.runtime.Immutable public final class PointerInputData {
     ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     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.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.runtime.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.compose.ui.unit.Uptime? getUptime();
@@ -1058,11 +1058,11 @@
   }
 
   public final class PopupKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
     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);
   }
 
@@ -1085,7 +1085,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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.runtime.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 {
@@ -1094,23 +1094,23 @@
   }
 
   public final class SubcompositionKt {
-    method @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public final class TestTagKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
   }
 
-  @androidx.compose.Immutable public final inline class TransformOrigin {
+  @androidx.compose.runtime.Immutable public final inline class TransformOrigin {
     ctor public TransformOrigin();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float pivotFractionX = this.pivotFractionX, float pivotFractionY = this.pivotFractionY);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getPivotFractionX-impl(long $this);
     method public static float getPivotFractionY-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.TransformOrigin.Companion Companion;
   }
 
@@ -1123,7 +1123,7 @@
     ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
-  @androidx.compose.Stable public interface WithConstraintsScope {
+  @androidx.compose.runtime.Stable public interface WithConstraintsScope {
     method public androidx.compose.ui.unit.Constraints getConstraints();
     method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
@@ -1139,12 +1139,12 @@
   }
 
   public final class WrapperKt {
-    method public static androidx.compose.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setContent(android.view.ViewGroup, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated public static androidx.compose.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setViewContent(android.view.ViewGroup, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method public static androidx.compose.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method @Deprecated @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.runtime.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setViewContent(android.view.ViewGroup, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @Deprecated @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public interface ZIndexModifier extends androidx.ui.core.Modifier.Element {
@@ -1153,7 +1153,7 @@
   }
 
   public final class ZIndexModifierKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
   }
 
 }
@@ -1194,11 +1194,11 @@
   }
 
   public final class FocusModifier2Kt {
-    method @androidx.compose.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
   }
 
   public final class FocusModifierKt {
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
     method @Deprecated public static androidx.ui.core.focus.FocusState getFocusState(androidx.ui.core.focus.FocusModifier);
   }
 
@@ -2140,12 +2140,12 @@
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
-  @androidx.compose.Immutable public final class Selection {
+  @androidx.compose.runtime.Immutable public final class Selection {
     ctor public Selection(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo component1();
     method public androidx.ui.core.selection.Selection.AnchorInfo component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo getEnd();
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
@@ -2153,19 +2153,19 @@
     method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
-  @androidx.compose.Immutable public static final class Selection.AnchorInfo {
+  @androidx.compose.runtime.Immutable public static final class Selection.AnchorInfo {
     ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
 
   public final class SelectionContainerKt {
-    method @androidx.compose.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class SelectionHandlesKt {
@@ -2184,7 +2184,7 @@
   }
 
   public final class SelectionRegistrarKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
   }
 
 }
@@ -2304,7 +2304,7 @@
   public final class PointerInteropUtilsKt {
   }
 
-  public final class UiApplier implements androidx.compose.Applier<java.lang.Object> {
+  public final class UiApplier implements androidx.compose.runtime.Applier<java.lang.Object> {
     ctor public UiApplier(Object root);
     method public void clear();
     method public void down(Object node);
@@ -2346,10 +2346,10 @@
 package androidx.ui.res {
 
   public final class ColorResourcesKt {
-    method @androidx.compose.Composable public static long colorResource(@ColorRes int id);
+    method @androidx.compose.runtime.Composable public static long colorResource(@ColorRes int id);
   }
 
-  @androidx.compose.Stable public final class DeferredResource<T> {
+  @androidx.compose.runtime.Stable public final class DeferredResource<T> {
     method public androidx.ui.res.Resource<T> getResource();
     property public final androidx.ui.res.Resource<T> resource;
   }
@@ -2360,14 +2360,14 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
   }
 
   public final class LoadedResource<T> extends androidx.ui.res.Resource<T> {
@@ -2379,10 +2379,10 @@
   }
 
   public final class PrimitiveResourcesKt {
-    method @androidx.compose.Composable public static boolean booleanResource(@BoolRes int id);
-    method @androidx.compose.Composable public static float dimensionResource(@DimenRes int id);
-    method @androidx.compose.Composable public static int[] integerArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static int integerResource(@IntegerRes int id);
+    method @androidx.compose.runtime.Composable public static boolean booleanResource(@BoolRes int id);
+    method @androidx.compose.runtime.Composable public static float dimensionResource(@DimenRes int id);
+    method @androidx.compose.runtime.Composable public static int[] integerArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static int integerResource(@IntegerRes int id);
   }
 
   public abstract sealed class Resource<T> {
@@ -2393,14 +2393,14 @@
   }
 
   public final class StringResourcesKt {
-    method @androidx.compose.Composable public static String![] stringArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+    method @androidx.compose.runtime.Composable public static String![] stringArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
   }
 
   public final class VectorResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
   }
 
 }
@@ -2546,7 +2546,7 @@
 package androidx.ui.tooling {
 
   public final class InspectionModeKt {
-    method public static androidx.compose.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
   }
 
 }
@@ -2554,15 +2554,15 @@
 package androidx.ui.viewinterop {
 
   public final class AndroidViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
     method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
   }
 
   public final class EmitViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
-    method @androidx.compose.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
 }
@@ -2570,8 +2570,8 @@
 package androidx.ui.viewmodel {
 
   public final class ViewModelKt {
-    method @androidx.compose.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
-    method @androidx.compose.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
   }
 
 }
diff --git a/ui/ui-core/api/restricted_current.txt b/ui/ui-core/api/restricted_current.txt
index 3e8a90a..c261a34 100644
--- a/ui/ui-core/api/restricted_current.txt
+++ b/ui/ui-core/api/restricted_current.txt
@@ -6,7 +6,7 @@
     method public final void invalidate();
   }
 
-  public final class VectorApplier extends androidx.compose.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
+  public final class VectorApplier extends androidx.compose.runtime.AbstractApplier<androidx.compose.ui.graphics.vector.VNode> {
     ctor public VectorApplier(androidx.compose.ui.graphics.vector.VNode root);
     method public void insert(int index, androidx.compose.ui.graphics.vector.VNode instance);
     method public void move(int from, int to, int count);
@@ -48,8 +48,8 @@
   }
 
   public final class VectorComposeKt {
-    method @androidx.compose.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
+    method @androidx.compose.runtime.Composable public static void Group(String name = "", float rotation = 0.0f, float pivotX = 0.0f, float pivotY = 0.0f, float scaleX = 1.0f, float scaleY = 1.0f, float translationX = 0.0f, float translationY = 0.0f, java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> clipPathData = EmptyPath, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Path(java.util.List<? extends androidx.compose.ui.graphics.vector.PathNode> pathData, String name = "", androidx.compose.ui.graphics.Brush? fill = null, float fillAlpha = 1.0f, androidx.compose.ui.graphics.Brush? stroke = null, float strokeAlpha = 1.0f, float strokeLineWidth = 0.0f, androidx.compose.ui.graphics.StrokeCap strokeLineCap = DefaultStrokeLineCap, androidx.compose.ui.graphics.StrokeJoin strokeLineJoin = DefaultStrokeLineJoin, float strokeLineMiter = 4.0f);
   }
 
   public final class VectorGroup extends androidx.compose.ui.graphics.vector.VectorNode implements java.lang.Iterable<androidx.compose.ui.graphics.vector.VectorNode> kotlin.jvm.internal.markers.KMappedMarker {
@@ -101,8 +101,8 @@
   }
 
   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-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);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorPainter VectorPainter(androidx.compose.ui.graphics.vector.VectorAsset asset);
+    method @androidx.compose.runtime.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";
   }
 
@@ -234,9 +234,9 @@
 
 package androidx.ui.core {
 
-  @androidx.compose.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
+  @androidx.compose.runtime.Immutable public final class AbsoluteAlignment implements androidx.ui.core.Alignment {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment copy(float verticalBias, float horizontalBias);
     field public static final androidx.ui.core.AbsoluteAlignment.Companion Companion;
   }
 
@@ -259,16 +259,16 @@
     property public final androidx.ui.core.AbsoluteAlignment TopRight;
   }
 
-  @androidx.compose.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static final class AbsoluteAlignment.Horizontal implements androidx.ui.core.Alignment.Horizontal {
     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);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.AbsoluteAlignment.Horizontal copy(float bias);
   }
 
   public abstract class AbstractComposeView extends android.view.ViewGroup {
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public AbstractComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public AbstractComposeView(android.content.Context context);
-    method @androidx.compose.Composable public abstract void Content();
+    method @androidx.compose.runtime.Composable public abstract void Content();
     method public final void createComposition();
     method public final void disposeComposition();
     method public final boolean isDisposed();
@@ -277,7 +277,7 @@
     property public final boolean isDisposed;
   }
 
-  @androidx.compose.Immutable public interface Alignment {
+  @androidx.compose.runtime.Immutable public interface Alignment {
     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;
   }
@@ -315,15 +315,15 @@
     property public final androidx.ui.core.Alignment TopStart;
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Horizontal {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Horizontal {
     method public int align(int size, androidx.compose.ui.unit.LayoutDirection layoutDirection = LayoutDirection.Ltr);
   }
 
-  @androidx.compose.Immutable public static interface Alignment.Vertical {
+  @androidx.compose.runtime.Immutable public static interface Alignment.Vertical {
     method public int align(int size);
   }
 
-  @androidx.compose.Immutable public abstract sealed class AlignmentLine {
+  @androidx.compose.runtime.Immutable public abstract sealed class AlignmentLine {
     field public static final androidx.ui.core.AlignmentLine.Companion Companion;
     field public static final int Unspecified = -2147483648; // 0x80000000
   }
@@ -336,26 +336,26 @@
   }
 
   public final class AmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
-    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.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();
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.animation.core.AnimationClockObservable> getAnimationClockAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.Autofill> getAutofillAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.autofill.AutofillTree> getAutofillTreeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.clipboard.ClipboardManager> getClipboardManagerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.unit.Density> getDensityAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.hapticfeedback.HapticFeedback> getHapticFeedBackAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.text.input.TextInputService> getTextInputServiceAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.texttoolbar.TextToolbar> getTextToolbarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.platform.UriHandler> getUriHandlerAmbient();
   }
 
   public final class AndroidActualsKt {
   }
 
   public final class AndroidAmbientsKt {
-    method public static androidx.compose.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.content.Context> getContextAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
-    method public static androidx.compose.ProvidableAmbient<android.view.View> getViewAmbient();
-    method public static androidx.compose.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.res.Configuration> getConfigurationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.content.Context> getContextAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.LifecycleOwner> getLifecycleOwnerAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<android.view.View> getViewAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.lifecycle.ViewModelStoreOwner> getViewModelStoreOwnerAmbient();
   }
 
   public final class AndroidComposeViewKt {
@@ -393,8 +393,8 @@
   }
 
   public final class ClipKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clip(androidx.ui.core.Modifier, androidx.compose.ui.graphics.Shape shape);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier clipToBounds(androidx.ui.core.Modifier);
   }
 
   public final class CombinedModifier implements androidx.ui.core.Modifier {
@@ -409,21 +409,21 @@
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs, int defStyleAttr);
     ctor public ComposeView(android.content.Context context, android.util.AttributeSet? attrs);
     ctor public ComposeView(android.content.Context context);
-    method @androidx.compose.Composable public void Content();
+    method @androidx.compose.runtime.Composable public void Content();
     method public void setContent(kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class ComposedModifierKt {
     method public static androidx.ui.core.Modifier composed(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier,? extends androidx.ui.core.Modifier> factory);
-    method public static androidx.ui.core.Modifier materialize(androidx.compose.Composer<?>, androidx.ui.core.Modifier modifier);
+    method public static androidx.ui.core.Modifier materialize(androidx.compose.runtime.Composer<?>, androidx.ui.core.Modifier modifier);
   }
 
-  @androidx.compose.Immutable public final class ConsumedData {
+  @androidx.compose.runtime.Immutable public final class ConsumedData {
     ctor public ConsumedData(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     ctor public ConsumedData();
     method public androidx.compose.ui.geometry.Offset component1();
     method public boolean component2();
-    method @androidx.compose.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.ConsumedData copy(androidx.compose.ui.geometry.Offset positionChange, boolean downChange);
     method public boolean getDownChange();
     method public androidx.compose.ui.geometry.Offset getPositionChange();
   }
@@ -433,7 +433,7 @@
     method public abstract void drawContent();
   }
 
-  @androidx.compose.Stable public interface ContentScale {
+  @androidx.compose.runtime.Stable public interface ContentScale {
     method public float scale-AhF4CD4(long srcSize, long dstSize);
     field public static final androidx.ui.core.ContentScale.Companion Companion;
   }
@@ -520,7 +520,7 @@
 
   public final class DrawLayerModifierKt {
     method public static inline long TransformOrigin(float pivotFractionX, float pivotFractionY);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawLayer-EwV0HsI(androidx.ui.core.Modifier, float scaleX = 1f, float scaleY = 1f, float alpha = 1f, float translationX = 0f, float translationY = 0f, float shadowElevation = 0f, float rotationX = 0f, float rotationY = 0f, float rotationZ = 0f, long transformOrigin = TransformOrigin.Center, androidx.compose.ui.graphics.Shape shape = androidx.compose.ui.graphics.RectangleShapeKt.RectangleShape, boolean clip = false);
   }
 
   public interface DrawModifier extends androidx.ui.core.Modifier.Element {
@@ -533,7 +533,7 @@
   }
 
   public final class DrawShadowKt {
-    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);
+    method @androidx.compose.runtime.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 {
@@ -542,10 +542,10 @@
   @kotlin.RequiresOptIn(message="This is an experimental API for being able to perform subcomposition during the " + "measuring. API is likely to change before becoming stable.") public @interface ExperimentalSubcomposeLayoutApi {
   }
 
-  @androidx.compose.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
+  @androidx.compose.runtime.Immutable public final class FixedScale implements androidx.ui.core.ContentScale {
     ctor public FixedScale(float value);
     method public float component1();
-    method @androidx.compose.Immutable public androidx.ui.core.FixedScale copy(float value);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.FixedScale copy(float value);
     method public float getValue();
     method public float scale-AhF4CD4(long srcSize, long dstSize);
   }
@@ -607,17 +607,17 @@
     method public float getDensity();
     method public float getFontScale();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public float toDp(float);
+    method @androidx.compose.runtime.Stable public float toDp(int);
+    method @androidx.compose.runtime.Stable public float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public long toSp(float);
+    method @androidx.compose.runtime.Stable public long toSp(int);
+    method @androidx.compose.runtime.Stable public long toSp-0680j_4(float);
   }
 
   public interface LayoutCoordinates {
@@ -660,8 +660,8 @@
   public final class LayoutIdKt {
     method public static Object? getId(androidx.ui.core.Measurable);
     method @Deprecated public static Object? getTag(androidx.ui.core.Measurable);
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
-    method @Deprecated @androidx.compose.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier layoutId(androidx.ui.core.Modifier, Object id);
+    method @Deprecated @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier tag(androidx.ui.core.Modifier, Object tag);
   }
 
   public interface LayoutIdParentData {
@@ -670,15 +670,15 @@
   }
 
   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.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 @androidx.compose.runtime.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.runtime.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.runtime.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.runtime.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.runtime.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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
   }
 
@@ -823,7 +823,7 @@
     method @Deprecated public void pauseObservingReads(kotlin.jvm.functions.Function0<kotlin.Unit> block);
   }
 
-  @androidx.compose.Stable public interface Modifier {
+  @androidx.compose.runtime.Stable public interface Modifier {
     method public boolean all(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public boolean any(kotlin.jvm.functions.Function1<? super androidx.ui.core.Modifier.Element,java.lang.Boolean> predicate);
     method public <R> R! foldIn(R? initial, kotlin.jvm.functions.Function2<? super R,? super androidx.ui.core.Modifier.Element,? extends R> operation);
@@ -872,7 +872,7 @@
   }
 
   public final class OpacityKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier drawOpacity(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float opacity);
   }
 
   public interface OwnedLayer {
@@ -1017,25 +1017,25 @@
     method public static inline String! toString-impl(long p);
   }
 
-  @androidx.compose.Immutable public final class PointerInputChange {
+  @androidx.compose.runtime.Immutable public final class PointerInputChange {
     method public long component1();
     method public androidx.ui.core.PointerInputData component2();
     method public androidx.ui.core.PointerInputData component3();
     method public androidx.ui.core.ConsumedData component4();
-    method @androidx.compose.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.PointerInputChange copy-jh1A5Og(long id, androidx.ui.core.PointerInputData current, androidx.ui.core.PointerInputData previous, androidx.ui.core.ConsumedData consumed);
     method public androidx.ui.core.ConsumedData getConsumed();
     method public androidx.ui.core.PointerInputData getCurrent();
     method public long getId();
     method public androidx.ui.core.PointerInputData getPrevious();
   }
 
-  @androidx.compose.Immutable public final class PointerInputData {
+  @androidx.compose.runtime.Immutable public final class PointerInputData {
     ctor public PointerInputData(androidx.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
     ctor public PointerInputData();
     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.compose.ui.unit.Uptime? uptime, androidx.compose.ui.geometry.Offset? position, boolean down);
+    method @androidx.compose.runtime.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.compose.ui.unit.Uptime? getUptime();
@@ -1058,11 +1058,11 @@
   }
 
   public final class PopupKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public interface PopupPositionProvider {
     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);
   }
 
@@ -1085,7 +1085,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.compose.ui.unit.Constraints,? extends androidx.ui.core.MeasureScope.MeasureResult> measureBlock);
+    method @androidx.compose.runtime.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 {
@@ -1094,23 +1094,23 @@
   }
 
   public final class SubcompositionKt {
-    method @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public final class TestTagKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier testTag(androidx.ui.core.Modifier, String tag);
   }
 
-  @androidx.compose.Immutable public final inline class TransformOrigin {
+  @androidx.compose.runtime.Immutable public final inline class TransformOrigin {
     ctor public TransformOrigin();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float pivotFractionX = this.pivotFractionX, float pivotFractionY = this.pivotFractionY);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getPivotFractionX-impl(long $this);
     method public static float getPivotFractionY-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(long p);
     field public static final androidx.ui.core.TransformOrigin.Companion Companion;
   }
 
@@ -1123,7 +1123,7 @@
     ctor public VerticalAlignmentLine(kotlin.jvm.functions.Function2<? super java.lang.Integer,? super java.lang.Integer,java.lang.Integer> merger);
   }
 
-  @androidx.compose.Stable public interface WithConstraintsScope {
+  @androidx.compose.runtime.Stable public interface WithConstraintsScope {
     method public androidx.compose.ui.unit.Constraints getConstraints();
     method public androidx.compose.ui.unit.LayoutDirection getLayoutDirection();
     method public float getMaxHeight();
@@ -1139,12 +1139,12 @@
   }
 
   public final class WrapperKt {
-    method public static androidx.compose.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setContent(android.view.ViewGroup, androidx.compose.Recomposer recomposer, androidx.compose.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated public static androidx.compose.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Composition setViewContent(android.view.ViewGroup, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method public static androidx.compose.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
-    method @Deprecated @MainThread public static androidx.compose.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setContent(androidx.activity.ComponentActivity, androidx.compose.runtime.Recomposer recomposer = Recomposer.current(), kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, androidx.compose.runtime.Recomposer recomposer, androidx.compose.runtime.CompositionReference? parentComposition = null, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated public static androidx.compose.runtime.Composition setContent(android.view.ViewGroup, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Composition setViewContent(android.view.ViewGroup, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method public static androidx.compose.runtime.Composition setViewContent(android.app.Activity, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
+    method @Deprecated @MainThread public static androidx.compose.runtime.Composition subcomposeInto(androidx.ui.core.LayoutNode container, androidx.compose.runtime.CompositionReference? parent = null, kotlin.jvm.functions.Function0<kotlin.Unit> composable);
   }
 
   public interface ZIndexModifier extends androidx.ui.core.Modifier.Element {
@@ -1153,7 +1153,7 @@
   }
 
   public final class ZIndexModifierKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier zIndex(androidx.ui.core.Modifier, float zIndex);
   }
 
 }
@@ -1194,11 +1194,11 @@
   }
 
   public final class FocusModifier2Kt {
-    method @androidx.compose.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Composable @androidx.ui.core.focus.ExperimentalFocus public static androidx.ui.core.Modifier focus(androidx.ui.core.Modifier);
   }
 
   public final class FocusModifierKt {
-    method @Deprecated @androidx.compose.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.ui.core.focus.FocusModifier FocusModifier();
     method @Deprecated public static androidx.ui.core.focus.FocusState getFocusState(androidx.ui.core.focus.FocusModifier);
   }
 
@@ -2132,12 +2132,12 @@
     method public androidx.compose.ui.text.AnnotatedString getText();
   }
 
-  @androidx.compose.Immutable public final class Selection {
+  @androidx.compose.runtime.Immutable public final class Selection {
     ctor public Selection(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo component1();
     method public androidx.ui.core.selection.Selection.AnchorInfo component2();
     method public boolean component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection copy(androidx.ui.core.selection.Selection.AnchorInfo start, androidx.ui.core.selection.Selection.AnchorInfo end, boolean handlesCrossed);
     method public androidx.ui.core.selection.Selection.AnchorInfo getEnd();
     method public boolean getHandlesCrossed();
     method public androidx.ui.core.selection.Selection.AnchorInfo getStart();
@@ -2145,19 +2145,19 @@
     method public androidx.compose.ui.text.TextRange toTextRange();
   }
 
-  @androidx.compose.Immutable public static final class Selection.AnchorInfo {
+  @androidx.compose.runtime.Immutable public static final class Selection.AnchorInfo {
     ctor public Selection.AnchorInfo(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection component1();
     method public int component2();
     method public androidx.ui.core.selection.Selectable component3();
-    method @androidx.compose.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
+    method @androidx.compose.runtime.Immutable public androidx.ui.core.selection.Selection.AnchorInfo copy(androidx.compose.ui.text.style.ResolvedTextDirection direction, int offset, androidx.ui.core.selection.Selectable selectable);
     method public androidx.compose.ui.text.style.ResolvedTextDirection getDirection();
     method public int getOffset();
     method public androidx.ui.core.selection.Selectable getSelectable();
   }
 
   public final class SelectionContainerKt {
-    method @androidx.compose.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void SelectionContainer(androidx.ui.core.selection.Selection? selection, kotlin.jvm.functions.Function1<? super androidx.ui.core.selection.Selection,kotlin.Unit> onSelectionChange, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class SelectionHandlesKt {
@@ -2176,7 +2176,7 @@
   }
 
   public final class SelectionRegistrarKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.ui.core.selection.SelectionRegistrar> getSelectionRegistrarAmbient();
   }
 
 }
@@ -2296,7 +2296,7 @@
   public final class PointerInteropUtilsKt {
   }
 
-  public final class UiApplier implements androidx.compose.Applier<java.lang.Object> {
+  public final class UiApplier implements androidx.compose.runtime.Applier<java.lang.Object> {
     ctor public UiApplier(Object root);
     method public void clear();
     method public void down(Object node);
@@ -2338,10 +2338,10 @@
 package androidx.ui.res {
 
   public final class ColorResourcesKt {
-    method @androidx.compose.Composable public static long colorResource(@ColorRes int id);
+    method @androidx.compose.runtime.Composable public static long colorResource(@ColorRes int id);
   }
 
-  @androidx.compose.Stable public final class DeferredResource<T> {
+  @androidx.compose.runtime.Stable public final class DeferredResource<T> {
     method public androidx.ui.res.Resource<T> getResource();
     property public final androidx.ui.res.Resource<T> resource;
   }
@@ -2352,14 +2352,14 @@
   }
 
   public final class FontResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.text.Typeface fontResource(androidx.compose.ui.text.font.FontFamily fontFamily);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.font.FontFamily? pendingFontFamily = null, androidx.compose.ui.text.font.FontFamily? failedFontFamily = null);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.text.Typeface> loadFontResource(androidx.compose.ui.text.font.FontFamily fontFamily, androidx.compose.ui.text.Typeface? pendingTypeface = null, androidx.compose.ui.text.Typeface? failedTypeface = null);
   }
 
   public final class ImageResourcesKt {
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.ImageAsset imageResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.ImageAsset> loadImageResource(int id, androidx.compose.ui.graphics.ImageAsset? pendingImage = null, androidx.compose.ui.graphics.ImageAsset? failedImage = null);
   }
 
   public final class LoadedResource<T> extends androidx.ui.res.Resource<T> {
@@ -2371,10 +2371,10 @@
   }
 
   public final class PrimitiveResourcesKt {
-    method @androidx.compose.Composable public static boolean booleanResource(@BoolRes int id);
-    method @androidx.compose.Composable public static float dimensionResource(@DimenRes int id);
-    method @androidx.compose.Composable public static int[] integerArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static int integerResource(@IntegerRes int id);
+    method @androidx.compose.runtime.Composable public static boolean booleanResource(@BoolRes int id);
+    method @androidx.compose.runtime.Composable public static float dimensionResource(@DimenRes int id);
+    method @androidx.compose.runtime.Composable public static int[] integerArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static int integerResource(@IntegerRes int id);
   }
 
   public abstract sealed class Resource<T> {
@@ -2385,14 +2385,14 @@
   }
 
   public final class StringResourcesKt {
-    method @androidx.compose.Composable public static String![] stringArrayResource(@ArrayRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id);
-    method @androidx.compose.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
+    method @androidx.compose.runtime.Composable public static String![] stringArrayResource(@ArrayRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id);
+    method @androidx.compose.runtime.Composable public static String stringResource(@StringRes int id, java.lang.Object... formatArgs);
   }
 
   public final class VectorResourcesKt {
-    method @androidx.compose.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
-    method @androidx.compose.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
+    method @androidx.compose.runtime.Composable public static androidx.ui.res.DeferredResource<androidx.compose.ui.graphics.vector.VectorAsset> loadVectorResource(int id, androidx.compose.ui.graphics.vector.VectorAsset? pendingResource = null, androidx.compose.ui.graphics.vector.VectorAsset? failedResource = null);
+    method @androidx.compose.runtime.Composable public static androidx.compose.ui.graphics.vector.VectorAsset vectorResource(@DrawableRes int id);
   }
 
 }
@@ -2538,7 +2538,7 @@
 package androidx.ui.tooling {
 
   public final class InspectionModeKt {
-    method public static androidx.compose.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
+    method public static androidx.compose.runtime.ProvidableAmbient<java.lang.Boolean> getInspectionMode();
   }
 
 }
@@ -2546,15 +2546,15 @@
 package androidx.ui.viewinterop {
 
   public final class AndroidViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
-    method @Deprecated @androidx.compose.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void AndroidView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> viewBlock, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update = NoOpUpdate);
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(@LayoutRes int resId, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super android.view.View,kotlin.Unit> postInflationCallback = { _ ->  });
+    method @Deprecated @androidx.compose.runtime.Composable public static void AndroidView(android.view.View view, androidx.ui.core.Modifier modifier = Modifier);
     method public static kotlin.jvm.functions.Function1<android.view.View,kotlin.Unit> getNoOpUpdate();
   }
 
   public final class EmitViewKt {
-    method @androidx.compose.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
-    method @androidx.compose.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.View> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update);
+    method @androidx.compose.runtime.Composable public static <T extends android.view.ViewGroup> void emitView(kotlin.jvm.functions.Function1<? super android.content.Context,? extends T> ctor, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> update, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
 }
@@ -2562,8 +2562,8 @@
 package androidx.ui.viewmodel {
 
   public final class ViewModelKt {
-    method @androidx.compose.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
-    method @androidx.compose.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static <VM extends androidx.lifecycle.ViewModel> VM viewModel(Class<VM> modelClass, String? key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
+    method @androidx.compose.runtime.Composable public static inline <reified VM extends androidx.lifecycle.ViewModel> VM! viewModel(String key = null, androidx.lifecycle.ViewModelProvider.Factory? factory = null);
   }
 
 }
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 63aa05d..e84c786 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
@@ -15,7 +15,7 @@
  */
 package androidx.ui.core.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
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 2c05662..1b6db83 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
@@ -18,7 +18,7 @@
 
 package androidx.ui.core.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
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 118d299..b94fb0f 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ContentGravity
@@ -36,7 +36,7 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.Popup
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 36f4846..729d45f 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Image
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/ViewModelDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/ViewModelDemo.kt
index 9eb29c4..ebb02b4 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/ViewModelDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/ViewModelDemo.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos
 
-import androidx.compose.Composable
-import androidx.compose.getValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.SavedStateHandle
 import androidx.lifecycle.ViewModel
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 957a2d5..57ead25 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
@@ -17,9 +17,9 @@
 package androidx.ui.core.demos.autofill
 
 import android.graphics.Rect
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.ui.autofill.AutofillNode
 import androidx.ui.autofill.AutofillType
 import androidx.ui.core.AutofillAmbient
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/focus/FocusableDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/focus/FocusableDemo.kt
index 1605642..6b638f5 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/focus/FocusableDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/focus/FocusableDemo.kt
@@ -15,10 +15,10 @@
  */
 package androidx.ui.core.demos.focus
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.focus.ExperimentalFocus
 import androidx.ui.core.gesture.tapGestureFilter
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 365ebfc..7b16cb6 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.doubleTapGestureFilter
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 0c7d15e..2a02e63 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.doubleTapGestureFilter
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 ef5c43e..007097f 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 346cbb0..767102c 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Direction
 import androidx.ui.core.Modifier
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 531790f..339ba88 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.Direction
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 0c537f6..dd6681a6 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 2d3d390..1771d32 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.longPressGestureFilter
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 51c715e..45099ac 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.longPressGestureFilter
 import androidx.compose.foundation.Border
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 9b1cfc2..dde02c8 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.doubleTapGestureFilter
 import androidx.ui.core.gesture.longPressGestureFilter
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScalingDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScalingDemo.kt
index d9866c9..422495c 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScalingDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/gestures/NestedScalingDemo.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
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 d530a08..af16679 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Direction
 import androidx.ui.core.Layout
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 7baf2f4..4614301 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
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 7dca5ab..3e341f4 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.Popup
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 4abba83..d969512 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
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 42b97a0..ab1c605 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 bb2ecf2..54a4027 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.ScaleObserver
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 b33a254..7d2c0e7 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
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 8e135239..9f695d1 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.clipToBounds
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 fbbf412..1d0bee1 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Direction
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 f7552a0..91f1e5c 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.demos.gestures
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ContentDrawScope
diff --git a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/keyinput/KeyInputDemo.kt b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/keyinput/KeyInputDemo.kt
index e45a8813..57d6c6e 100644
--- a/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/keyinput/KeyInputDemo.kt
+++ b/ui/ui-core/integration-tests/ui-core-demos/src/main/java/androidx/ui/core/demos/keyinput/KeyInputDemo.kt
@@ -15,11 +15,11 @@
  */
 package androidx.ui.core.demos.keyinput
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.focus.ExperimentalFocus
 import androidx.ui.core.focus.FocusRequester
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 4c670a7..a2c60f5 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
@@ -24,10 +24,10 @@
 import android.widget.FrameLayout
 import android.widget.LinearLayout
 import android.widget.TextView
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
 import androidx.compose.foundation.Box
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AlignmentLineSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AlignmentLineSample.kt
index 4201be5..1e52b95 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AlignmentLineSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AlignmentLineSample.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.HorizontalAlignmentLine
 import androidx.ui.core.Layout
 import kotlin.math.min
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AndroidViewSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AndroidViewSample.kt
index 4012918..1fdefcd 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AndroidViewSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/AndroidViewSample.kt
@@ -20,12 +20,12 @@
 import android.view.ViewGroup
 import android.widget.TextView
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.background
 import androidx.compose.foundation.clickable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.ui.graphics.Color
 import androidx.ui.core.Modifier
 import androidx.ui.viewinterop.AndroidView
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 057b629..671e813 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawShadow
 import androidx.compose.foundation.Box
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/EmitViewSamples.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/EmitViewSamples.kt
index 0c3cb3b..295be83 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/EmitViewSamples.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/EmitViewSamples.kt
@@ -18,7 +18,7 @@
 
 import android.view.View
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import android.widget.Button
 import android.widget.LinearLayout
 import androidx.ui.viewinterop.emitView
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt
index d840068..bec5442 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/FontResourcesSample.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.ui.res.fontResource
 import androidx.ui.res.loadFontResource
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayerModifierSamples.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayerModifierSamples.kt
index 3933c2e..da5fc0b 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayerModifierSamples.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/LayerModifierSamples.kt
@@ -17,8 +17,8 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.onCommit
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.onCommit
 import androidx.compose.animation.animatedFloat
 import androidx.ui.core.DrawLayerModifier
 import androidx.ui.core.Modifier
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 c5516bf..9cc84d2 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.Layout
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 adac624..26e958c 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
@@ -19,7 +19,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
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 dc0d616..b60b0da 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.globalPosition
 import androidx.ui.core.onChildPositioned
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 ece82cb..0632a347 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawOpacity
 import androidx.compose.foundation.Box
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 c329b04..83520f6 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.paint
 import androidx.compose.foundation.Box
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 025c353..d6f032b 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.Popup
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 09323d3..9c8f064 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.ExperimentalSubcomposeLayoutApi
 import androidx.ui.core.SubcomposeLayout
 import androidx.compose.ui.unit.IntSize
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 153d742..000c5b8 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
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
 import androidx.compose.foundation.Box
diff --git a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ZIndexModifierSample.kt b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ZIndexModifierSample.kt
index 15f1c2fe..a58d563 100644
--- a/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ZIndexModifierSample.kt
+++ b/ui/ui-core/samples/src/main/java/androidx/ui/core/samples/ZIndexModifierSample.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.zIndex
 import androidx.compose.foundation.Text
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorInvalidationTestCase.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorInvalidationTestCase.kt
index 87c7c80..09da8f9 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorInvalidationTestCase.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/compose/ui/graphics/vector/VectorInvalidationTestCase.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.ui.graphics.vector
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
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 fe53efc..7fbedbc 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
@@ -18,7 +18,7 @@
 
 import android.graphics.Bitmap
 import android.os.Build
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
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 257cdcb..794a893 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
@@ -21,15 +21,15 @@
 import android.view.ViewGroup
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.test.filters.SmallTest
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.pointerinput.PointerInputModifier
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt
index 756336e..00f9ce4 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/HotReloadTests.kt
@@ -20,11 +20,11 @@
 
 import android.widget.LinearLayout
 import android.widget.TextView
-import androidx.compose.clearRoots
-import androidx.compose.Composable
-import androidx.compose.emit
-import androidx.compose.onCommit
-import androidx.compose.simulateHotReload
+import androidx.compose.runtime.clearRoots
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.simulateHotReload
 import androidx.test.filters.MediumTest
 import androidx.ui.core.semantics.semantics
 import androidx.compose.foundation.Box
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 32aaf4e..397fbe3 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
@@ -18,7 +18,7 @@
 
 import android.graphics.Bitmap
 import android.os.Build
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.heightIn
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 ab71ef5..0f4b75a 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
@@ -16,13 +16,13 @@
 package androidx.ui.core
 
 import android.view.View
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.ambientOf
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.lifecycle.ViewTreeLifecycleOwner
 import androidx.test.espresso.Espresso
 import androidx.test.espresso.Root
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 d67dac6..8fe691c 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.focus
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.size
 import androidx.compose.ui.unit.dp
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/OwnerFocusTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/OwnerFocusTest.kt
index c7920ed..81867e2 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/OwnerFocusTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/focus/OwnerFocusTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.core.focus
 
 import android.view.View
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
index b0af704..7e96caa 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/LongPressDragGestureFilterTest.kt
@@ -18,7 +18,7 @@
 import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.emptyContent
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt
index a81a9df..73afdd4 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/gesture/ScaleGestureFilterTest.kt
@@ -18,7 +18,7 @@
 import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.emptyContent
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.LargeTest
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInAppCompatActivityTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInAppCompatActivityTest.kt
index 3a8a8bf..430a07b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInAppCompatActivityTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInAppCompatActivityTest.kt
@@ -18,7 +18,7 @@
 
 import android.widget.FrameLayout
 import androidx.appcompat.app.AppCompatActivity
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.lifecycle.LifecycleOwner
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LifecycleOwnerAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInComponentActivityTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInComponentActivityTest.kt
index dfb2bab..531cf2a 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInComponentActivityTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInComponentActivityTest.kt
@@ -18,7 +18,7 @@
 
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.lifecycle.LifecycleOwner
 import androidx.test.filters.SmallTest
 import androidx.ui.core.LifecycleOwnerAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInFragmentTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInFragmentTest.kt
index 426f808..19b5497 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInFragmentTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/lifecycleowner/LifecycleOwnerInFragmentTest.kt
@@ -20,7 +20,7 @@
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import android.widget.FrameLayout
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentActivity
 import androidx.fragment.app.FragmentContainerView
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 b95a937..e22e5e3 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
@@ -30,16 +30,16 @@
 import android.widget.FrameLayout
 import android.widget.LinearLayout
 import androidx.annotation.RequiresApi
-import androidx.compose.Composable
-import androidx.compose.FrameManager
-import androidx.compose.Stable
-import androidx.compose.State
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.FrameManager
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.AlignmentLine
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 625aa6f..2de86d3 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
@@ -30,15 +30,15 @@
 import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
 import android.widget.FrameLayout
 import android.widget.LinearLayout
-import androidx.compose.Applier
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.emit
-import androidx.compose.getValue
-import androidx.compose.key
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Applier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.key
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.test.espresso.Espresso
 import androidx.test.espresso.assertion.ViewAssertions.matches
 import androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA
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 e92efbe..e9e3cce 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
@@ -18,7 +18,7 @@
 
 import android.graphics.Bitmap
 import android.os.Build
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.DrawLayerModifier
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 50fbfff..06754d0e 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
@@ -19,8 +19,8 @@
 import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
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 b87ba22..f6177b9 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
@@ -20,10 +20,10 @@
 import android.view.View
 import android.view.ViewGroup
 import android.view.ViewTreeObserver
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.emptyContent
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.unit.Constraints
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 5636fd5..1ac6e49 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
@@ -18,9 +18,9 @@
 
 import android.graphics.Bitmap
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
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 1c98095..7bcfc441 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
@@ -17,9 +17,9 @@
 package androidx.ui.core.test
 
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.DensityAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayoutIdTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayoutIdTest.kt
index 86c0871..1d528532 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayoutIdTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/LayoutIdTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.test
 
-import androidx.compose.emptyContent
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ModelReadsTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ModelReadsTest.kt
index 72095a4..0b70ddc 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ModelReadsTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ModelReadsTest.kt
@@ -16,10 +16,10 @@
 
 package androidx.ui.core.test
 
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.MutableState
-import androidx.compose.mutableStateOf
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
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 a93bb41..c218aba 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
@@ -21,10 +21,10 @@
 import android.widget.FrameLayout
 import android.widget.LinearLayout
 import android.widget.ScrollView
-import androidx.compose.Recomposer
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OpacityTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OpacityTest.kt
index 3e5edd7..746d33c 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OpacityTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/OpacityTest.kt
@@ -18,10 +18,10 @@
 
 import android.graphics.Bitmap
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ParentDataModifierTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ParentDataModifierTest.kt
index 3f84002..8f9cb7c 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ParentDataModifierTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/ParentDataModifierTest.kt
@@ -15,8 +15,8 @@
  */
 package androidx.ui.core.test
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutIdParentData
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 435050b..a70de04 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
@@ -18,7 +18,7 @@
 
 import android.view.ViewGroup
 import android.widget.FrameLayout
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
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 c4956f1..3ed599b 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
@@ -17,8 +17,8 @@
 package androidx.ui.core.test
 
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.unit.Constraints
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 171ef80..745a2a3 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
@@ -17,13 +17,13 @@
 package androidx.ui.core.test
 
 import android.graphics.Bitmap
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.size
-import androidx.compose.mutableStateOf
-import androidx.compose.onActive
-import androidx.compose.onDispose
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onActive
+import androidx.compose.runtime.onDispose
 import androidx.test.filters.SmallTest
 import androidx.ui.core.ExperimentalSubcomposeLayoutApi
 import androidx.ui.core.Modifier
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 e86339a..6eeba78 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
@@ -20,15 +20,15 @@
 
 import android.graphics.Bitmap
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onDispose
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.unit.Constraints
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WrapperTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WrapperTest.kt
index 36dd4f7..764f527 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WrapperTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/core/test/WrapperTest.kt
@@ -16,16 +16,16 @@
 package androidx.ui.core.test
 
 import android.widget.FrameLayout
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.Providers
-import androidx.compose.Recomposer
-import androidx.compose.ambientOf
-import androidx.compose.compositionReference
-import androidx.compose.invalidate
-import androidx.compose.onActive
-import androidx.compose.onCommit
-import androidx.compose.onDispose
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.compositionReference
+import androidx.compose.runtime.invalidate
+import androidx.compose.runtime.onActive
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.onDispose
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.LifecycleRegistry
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 65f32ae..b2aad22 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
@@ -23,7 +23,7 @@
 import android.view.View
 import android.view.ViewGroup
 import android.widget.FrameLayout
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.compose.foundation.Box
 import androidx.test.filters.MediumTest
 import androidx.ui.core.DensityAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ColorResourcesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ColorResourcesTest.kt
index a5f085b..916dccb 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ColorResourcesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ColorResourcesTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.res
 
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.ContextAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt
index 64511fb..5b05631 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/FontResourcesTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.res
 
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.ContextAmbient
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 dce1560..0147977 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.res
 
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.ContextAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ResourcesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ResourcesTest.kt
index 57086634..45fb7deb 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ResourcesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/ResourcesTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.res
 
 import android.util.LruCache
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.ContextAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/StringResourcesTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/StringResourcesTest.kt
index 2ce761a..69f7eac 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/StringResourcesTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/res/StringResourcesTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.res
 
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.ui.core.ContextAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
index 676b612..f379706 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/semantics/SemanticsTests.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.semantics
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/AndroidViewTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/AndroidViewTest.kt
index a2ce664..0e744c6 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/AndroidViewTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/AndroidViewTest.kt
@@ -27,10 +27,10 @@
 import android.widget.RelativeLayout
 import android.widget.TextView
 import androidx.activity.ComponentActivity
-import androidx.compose.Recomposer
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.espresso.Espresso
 import androidx.test.espresso.assertion.ViewAssertions.matches
 import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt
index 8f0cf65..4f49b4e 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewinterop/ComposeViewTest.kt
@@ -20,7 +20,7 @@
 import android.view.View
 import android.view.ViewGroup
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInAppCompatActivityTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInAppCompatActivityTest.kt
index dacd630..9e3c777 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInAppCompatActivityTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInAppCompatActivityTest.kt
@@ -18,7 +18,7 @@
 
 import android.widget.FrameLayout
 import androidx.appcompat.app.AppCompatActivity
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.lifecycle.LifecycleOwner
 import androidx.test.filters.MediumTest
 import androidx.ui.core.LifecycleOwnerAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInComponentActivityTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInComponentActivityTest.kt
index 4da0ca8..908dc3b 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInComponentActivityTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInComponentActivityTest.kt
@@ -18,7 +18,7 @@
 
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.lifecycle.LifecycleOwner
 import androidx.test.filters.MediumTest
 import androidx.ui.core.LifecycleOwnerAmbient
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInFragmentTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInFragmentTest.kt
index f08b0b9..35bb0a9 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInFragmentTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelInFragmentTest.kt
@@ -20,7 +20,7 @@
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import android.widget.FrameLayout
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentActivity
 import androidx.fragment.app.FragmentContainerView
diff --git a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelTest.kt b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelTest.kt
index 1b325d0..e5c5937 100644
--- a/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelTest.kt
+++ b/ui/ui-core/src/androidAndroidTest/kotlin/androidx/ui/viewmodel/ViewModelTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.viewmodel
 
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.lifecycle.HasDefaultViewModelProviderFactory
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidAmbients.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidAmbients.kt
index 1e8df3b..ea0df94 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidAmbients.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/AndroidAmbients.kt
@@ -20,16 +20,16 @@
 import android.content.res.Configuration
 import android.view.View
 import androidx.compose.animation.core.rootAnimationClockFactory
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Providers
-import androidx.compose.ambientOf
-import androidx.compose.getValue
-import androidx.compose.neverEqualPolicy
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.neverEqualPolicy
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
+import androidx.compose.runtime.staticAmbientOf
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.ViewModelStoreOwner
 import androidx.ui.platform.AndroidUriHandler
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 43d63e4..f7bedb9 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
@@ -40,8 +40,8 @@
 import android.view.autofill.AutofillValue
 import android.view.inputmethod.EditorInfo
 import android.view.inputmethod.InputConnection
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.snapshots.SnapshotStateObserver
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.snapshots.SnapshotStateObserver
 import androidx.core.os.HandlerCompat
 import androidx.core.view.ViewCompat
 import androidx.lifecycle.LifecycleOwner
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 eb8366a..91d9f4d 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
@@ -25,15 +25,15 @@
 import android.view.View
 import android.view.WindowManager
 import android.widget.FrameLayout
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.compositionReference
-import androidx.compose.currentComposer
-import androidx.compose.emptyContent
-import androidx.compose.onCommit
-import androidx.compose.onDispose
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.compositionReference
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
 import androidx.lifecycle.ViewTreeLifecycleOwner
 import androidx.lifecycle.ViewTreeViewModelStoreOwner
 import androidx.ui.core.semantics.semantics
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt
index d142d0d..895164e 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/ComposeView.kt
@@ -20,11 +20,11 @@
 import android.util.AttributeSet
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.Recomposer
-import androidx.compose.emptyContent
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.mutableStateOf
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.ViewTreeLifecycleOwner
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/TestTag.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/TestTag.kt
index 084285b..f8d0ded 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/TestTag.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/TestTag.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.ui.core.semantics.semantics
 import androidx.ui.semantics.SemanticsPropertyReceiver
 import androidx.ui.semantics.testTag
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/Wrapper.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/Wrapper.kt
index 463f816..4ce56e3 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/Wrapper.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/core/Wrapper.kt
@@ -22,17 +22,17 @@
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
 import androidx.annotation.MainThread
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.CompositionReference
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.FrameManager
-import androidx.compose.InternalComposeApi
-import androidx.compose.Providers
-import androidx.compose.Recomposer
-import androidx.compose.SlotTable
-import androidx.compose.compositionFor
-import androidx.compose.currentComposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionReference
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.FrameManager
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.compositionFor
+import androidx.compose.runtime.currentComposer
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
@@ -112,7 +112,7 @@
     "Specify Recomposer explicitly",
     ReplaceWith(
         "subcomposeInto(context, container, Recomposer.current(), parent, composable)",
-        "androidx.compose.Recomposer"
+        "androidx.compose.runtime.Recomposer"
     )
 )
 @MainThread
@@ -199,7 +199,7 @@
     "Specify Recomposer explicitly",
     ReplaceWith(
         "setContent(Recomposer.current(), content)",
-        "androidx.compose.Recomposer"
+        "androidx.compose.runtime.Recomposer"
     )
 )
 fun ViewGroup.setContent(
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/UiApplier.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/UiApplier.kt
index 798e4c8..16335fb 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/UiApplier.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/node/UiApplier.kt
@@ -19,8 +19,8 @@
 
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.Applier
-import androidx.compose.ExperimentalComposeApi
+import androidx.compose.runtime.Applier
+import androidx.compose.runtime.ExperimentalComposeApi
 import androidx.ui.core.AndroidComposeView
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.LayoutNode
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ColorResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ColorResources.kt
index 61b32cf..321e1f2 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ColorResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ColorResources.kt
@@ -18,7 +18,7 @@
 
 import android.os.Build
 import androidx.annotation.ColorRes
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.ContextAmbient
 import androidx.compose.ui.graphics.Color
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt
index 7c6a28b..73df8f0 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/FontResources.kt
@@ -19,7 +19,7 @@
 import android.content.Context
 import android.util.TypedValue
 import androidx.annotation.GuardedBy
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.ContextAmbient
 import androidx.compose.ui.text.Typeface
 import androidx.compose.ui.text.font.FontFamily
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ImageResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ImageResources.kt
index 7dfe6d7..3a09a78 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ImageResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/ImageResources.kt
@@ -18,8 +18,8 @@
 
 import android.util.TypedValue
 import androidx.annotation.DrawableRes
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.ContextAmbient
 import androidx.compose.ui.graphics.ImageAsset
 import androidx.compose.ui.graphics.imageFromResource
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 cbbc11f9..f88b4ec 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
@@ -20,7 +20,7 @@
 import androidx.annotation.BoolRes
 import androidx.annotation.DimenRes
 import androidx.annotation.IntegerRes
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.ContextAmbient
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.unit.Dp
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/Resources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/Resources.kt
index f53d035..edf9e76 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/Resources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/Resources.kt
@@ -20,12 +20,12 @@
 import android.os.Looper
 import android.util.LruCache
 import androidx.annotation.GuardedBy
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import java.util.concurrent.Executor
 import java.util.concurrent.Executors
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/StringResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/StringResources.kt
index ad71dc4..690acd1 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/StringResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/StringResources.kt
@@ -18,7 +18,7 @@
 
 import androidx.annotation.ArrayRes
 import androidx.annotation.StringRes
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.ContextAmbient
 
 /**
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/VectorResources.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/VectorResources.kt
index 0348ddf..2497a7a 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/VectorResources.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/res/VectorResources.kt
@@ -21,8 +21,8 @@
 import android.util.TypedValue
 import android.util.Xml
 import androidx.annotation.DrawableRes
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.ContextAmbient
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.ui.graphics.vector.compat.createVectorImageBuilder
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/AndroidView.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/AndroidView.kt
index d7435c54..31088eb 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/AndroidView.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/AndroidView.kt
@@ -24,13 +24,13 @@
 import android.view.ViewGroup.LayoutParams.MATCH_PARENT
 import android.widget.FrameLayout
 import androidx.annotation.LayoutRes
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.currentComposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.currentComposer
 import androidx.ui.core.Modifier
 import androidx.ui.core.materialize
-import androidx.compose.emit
-import androidx.compose.snapshots.SnapshotStateObserver
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.snapshots.SnapshotStateObserver
 import androidx.ui.core.ContextAmbient
 import androidx.ui.node.UiApplier
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/EmitView.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/EmitView.kt
index 3b08b43..3d4396b 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/EmitView.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewinterop/EmitView.kt
@@ -19,8 +19,8 @@
 import android.content.Context
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.Composable
-import androidx.compose.emit
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emit
 import androidx.ui.core.ContextAmbient
 import androidx.ui.node.UiApplier
 
diff --git a/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewmodel/ViewModel.kt b/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewmodel/ViewModel.kt
index 76063d3..233836c 100644
--- a/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewmodel/ViewModel.kt
+++ b/ui/ui-core/src/androidMain/kotlin/androidx/ui/viewmodel/ViewModel.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.viewmodel
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
 import androidx.lifecycle.ViewModelStoreOwner
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorCompose.kt b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorCompose.kt
index 8599c37..280694c 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorCompose.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/compose/ui/graphics/vector/VectorCompose.kt
@@ -16,15 +16,15 @@
 @file:OptIn(ExperimentalComposeApi::class)
 package androidx.compose.ui.graphics.vector
 
-import androidx.compose.AbstractApplier
-import androidx.compose.Composable
-import androidx.compose.CompositionReference
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.compositionFor
-import androidx.compose.emit
-import androidx.compose.key
+import androidx.compose.runtime.AbstractApplier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionReference
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.compositionFor
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.key
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.graphics.StrokeJoin
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 00209751..3a24462 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
@@ -16,15 +16,15 @@
 
 package androidx.compose.ui.graphics.vector
 
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.compositionReference
-import androidx.compose.currentComposer
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onPreCommit
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.compositionReference
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onPreCommit
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.graphics.ColorFilter
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 6960c68..9d9120f 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.LayoutDirection
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/AlignmentLine.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/AlignmentLine.kt
index 926858d..f9f8dbf 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/AlignmentLine.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/AlignmentLine.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 
 /**
  * Defines an offset line that can be used by parent layouts to align and position their children.
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 05fc0f0..4ec3f5a 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
@@ -17,8 +17,8 @@
 package androidx.ui.core
 
 import androidx.compose.animation.core.AnimationClockObservable
-import androidx.compose.ambientOf
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.staticAmbientOf
 import androidx.ui.autofill.Autofill
 import androidx.ui.autofill.AutofillTree
 import androidx.ui.core.clipboard.ClipboardManager
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Clip.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Clip.kt
index 3ab1665..c1b0c85 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Clip.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Clip.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.graphics.Shape
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ComposedModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ComposedModifier.kt
index b9903e3..ab14d89 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ComposedModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ComposedModifier.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.core
 
-import androidx.compose.Composable
-import androidx.compose.ComposeCompilerApi
-import androidx.compose.Composer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ComposeCompilerApi
+import androidx.compose.runtime.Composer
 
 /**
  * Declare a just-in-time composition of a [Modifier] that will be composed for each element it
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt
index dba02b7..f22c7ad 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ContentScale.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.core
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Size
 import kotlin.math.max
 import kotlin.math.min
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawLayerModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawLayerModifier.kt
index 7b4ea57..fc1ca6e 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawLayerModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/DrawLayerModifier.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.core
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.util.annotation.FloatRange
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 ffed55e..fe032e9 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.graphics.RectangleShape
 import androidx.compose.ui.graphics.Shape
 import androidx.compose.ui.unit.Dp
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 541b693..037b65a6 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
@@ -16,13 +16,13 @@
 
 package androidx.ui.core
 
-import androidx.compose.Applier
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Stable
-import androidx.compose.currentComposer
-import androidx.compose.emit
-import androidx.compose.remember
+import androidx.compose.runtime.Applier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.remember
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
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 ed6df1f..9ae6948 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Density
 
 /**
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 e539fe2..fa55b69 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
@@ -15,9 +15,9 @@
  */
 package androidx.ui.core
 
-import androidx.compose.collection.ExperimentalCollectionApi
-import androidx.compose.collection.MutableVector
-import androidx.compose.collection.mutableVectorOf
+import androidx.compose.runtime.collection.ExperimentalCollectionApi
+import androidx.compose.runtime.collection.MutableVector
+import androidx.compose.runtime.collection.mutableVectorOf
 import androidx.ui.core.LayoutNode.LayoutState.Measuring
 import androidx.ui.core.LayoutNode.LayoutState.NeedsRelayout
 import androidx.ui.core.LayoutNode.LayoutState.NeedsRemeasure
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModelObserver.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModelObserver.kt
index 30ec233..a2bd959 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModelObserver.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ModelObserver.kt
@@ -18,10 +18,10 @@
 
 package androidx.ui.core
 
-import androidx.compose.ObserverMap
-import androidx.compose.frames.FrameCommitObserver
-import androidx.compose.frames.FrameReadObserver
-import androidx.compose.frames.observeAllReads
+import androidx.compose.runtime.ObserverMap
+import androidx.compose.runtime.frames.FrameCommitObserver
+import androidx.compose.runtime.frames.FrameReadObserver
+import androidx.compose.runtime.frames.observeAllReads
 import androidx.compose.ui.util.fastForEach
 
 /**
@@ -42,7 +42,7 @@
 @Deprecated("Frames have been replaced by snapshots",
     ReplaceWith(
         "SnapshotStateObserver",
-        "androidx.compose.snapshots"
+        "androidx.compose.runtime.snapshots"
     )
 )
 class ModelObserver(private val commitExecutor: (command: () -> Unit) -> Unit) {
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Modifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Modifier.kt
index 493d4d9..bc35472 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Modifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Modifier.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 
 /**
  * An ordered, immutable collection of [modifier elements][Modifier.Element] that decorate or add
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Opacity.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Opacity.kt
index 0699ea0..7d06aa4 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Opacity.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Opacity.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.annotation.FloatRange
 
 /**
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 546c3a1..8e7fa2f 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.core
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.ui.core.pointerinput.PointerInputEvent
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.unit.IntSize
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 0afc558..f2dd621 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
@@ -16,11 +16,11 @@
 
 package androidx.ui.core
 
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Providers
-import androidx.compose.ambientOf
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.remember
 import androidx.compose.ui.unit.IntBounds
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
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 7a73e84..cffbda0 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
@@ -16,18 +16,18 @@
 
 package androidx.ui.core
 
-import androidx.compose.Applier
-import androidx.compose.Composable
-import androidx.compose.ComposeCompilerApi
-import androidx.compose.Composition
-import androidx.compose.CompositionLifecycleObserver
-import androidx.compose.CompositionReference
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.compositionReference
-import androidx.compose.currentComposer
-import androidx.compose.emit
-import androidx.compose.remember
+import androidx.compose.runtime.Applier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ComposeCompilerApi
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionLifecycleObserver
+import androidx.compose.runtime.CompositionReference
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.compositionReference
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.emit
+import androidx.compose.runtime.remember
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutNode.LayoutState.LayingOut
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Subcomposition.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Subcomposition.kt
index dc9f69d..bb06813 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Subcomposition.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/Subcomposition.kt
@@ -15,11 +15,11 @@
  */
 package androidx.ui.core
 
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.CompositionReference
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionReference
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
 import androidx.compose.ui.util.annotation.MainThread
 
 @OptIn(ExperimentalLayoutNodeApi::class)
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ZIndexModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ZIndexModifier.kt
index 3cec714..4834c32 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ZIndexModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/ZIndexModifier.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 
 /**
  * A [Modifier.Element] that controls the drawing order for the children of the same layout
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier.kt
index 92f1624..ff1405f 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.focus
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier2.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier2.kt
index 85ed580..d772291 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier2.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifier2.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.core.focus
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 
 /**
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifierImpl.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifierImpl.kt
index 812c146..42690ee 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifierImpl.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/focus/FocusModifierImpl.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.core.focus
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 
 @Suppress("DEPRECATION")
 internal class FocusModifierImpl(
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 dc6a0d9..609e707 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.CoroutineContextAmbient
 import androidx.ui.core.CustomEventDispatcher
 import androidx.ui.core.Modifier
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt
index cec0a6c..a74387d 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/DragGestureFilter.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Direction
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
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 1df0a0b..c7ff63c 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
@@ -18,7 +18,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.CustomEvent
 import androidx.ui.core.CustomEventDispatcher
 import androidx.ui.core.DensityAmbient
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 d0cae62..2c1b8d1 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.PointerInputChange
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 3dc5f9a..b81a1cf 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.CoroutineContextAmbient
 import androidx.ui.core.CustomEvent
 import androidx.ui.core.CustomEventDispatcher
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 6d71adc..35fa921 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.PointerInputChange
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 aac96af..18fdf97 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
@@ -18,7 +18,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.CustomEvent
 import androidx.ui.core.CustomEventDispatcher
 import androidx.ui.core.Modifier
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 8135046..5c7f39e 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.PointerInputChange
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 b38e6b48..e6ad4e6 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
 import androidx.ui.core.PointerInputChange
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleGestureFilter.kt
index 96f0911..fabe400 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScaleGestureFilter.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
 
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 ad16249..654ec45 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt
index 7d79838..562e261 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/gesture/ScrollGestureFilter.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.Direction
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
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 e863d63..37b43aa 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.gesture
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.CustomEvent
 import androidx.ui.core.Modifier
 import androidx.ui.core.PointerEventPass
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt
index 0e1c3be..66a3b9f 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/Selection.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.selection
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.text.style.ResolvedTextDirection
 
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt
index d36932f..a5ec7ce 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionContainer.kt
@@ -16,10 +16,10 @@
 
 package androidx.ui.core.selection
 
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.ui.core.ClipboardManagerAmbient
 import androidx.ui.core.HapticFeedBackAmbient
 import androidx.ui.core.Modifier
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 2b4b624..cdcef14 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
@@ -16,9 +16,9 @@
 
 package androidx.ui.core.selection
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.remember
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
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 a4ddac3..ab83781 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.selection
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt
index 6d22be3..4462eea 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionManager.kt
@@ -16,11 +16,11 @@
 
 package androidx.ui.core.selection
 
-import androidx.compose.State
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.clipboard.ClipboardManager
 import androidx.ui.core.gesture.DragObserver
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrar.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrar.kt
index e7e258a..368a06a 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrar.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/selection/SelectionRegistrar.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.selection
 
-import androidx.compose.ambientOf
+import androidx.compose.runtime.ambientOf
 
 /**
  *  An interface allowing a composable to subscribe and unsubscribe to selection changes.
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
index 07a0cb5..c14fe67 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/core/semantics/SemanticsModifier.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.core.semantics
 
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.ui.core.AtomicInt
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
diff --git a/ui/ui-core/src/commonMain/kotlin/androidx/ui/tooling/InspectionMode.kt b/ui/ui-core/src/commonMain/kotlin/androidx/ui/tooling/InspectionMode.kt
index 4d81d5a..ba9a742 100644
--- a/ui/ui-core/src/commonMain/kotlin/androidx/ui/tooling/InspectionMode.kt
+++ b/ui/ui-core/src/commonMain/kotlin/androidx/ui/tooling/InspectionMode.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.tooling
 
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.staticAmbientOf
 
 /**
  * Inspectable mode ambient. True if the composition is composed inside a Inspectable component.
diff --git a/ui/ui-core/src/test/kotlin/androidx/ui/core/ComposedModifierTest.kt b/ui/ui-core/src/test/kotlin/androidx/ui/core/ComposedModifierTest.kt
index 8cd9f3c..cb9e823 100644
--- a/ui/ui-core/src/test/kotlin/androidx/ui/core/ComposedModifierTest.kt
+++ b/ui/ui-core/src/test/kotlin/androidx/ui/core/ComposedModifierTest.kt
@@ -16,18 +16,18 @@
 
 package androidx.ui.core
 
-import androidx.compose.Applier
-import androidx.compose.Composable
-import androidx.compose.Composer
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.InternalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.SlotTable
-import androidx.compose.currentComposer
+import androidx.compose.runtime.Applier
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composer
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.currentComposer
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
-import androidx.compose.invalidate
-import androidx.compose.remember
-import androidx.compose.withRunningRecomposer
+import androidx.compose.runtime.invalidate
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.withRunningRecomposer
 import kotlinx.coroutines.channels.Channel
 import kotlinx.coroutines.runBlocking
 import kotlinx.coroutines.withContext
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 6816060..a8c1d45 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
@@ -16,9 +16,9 @@
 package androidx.ui.desktop.examples.example1
 
 import android.graphics.Bitmap
-import androidx.compose.Composable
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.desktop.AppWindow
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 546d095..4fd3f59 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
@@ -15,9 +15,9 @@
  */
 package androidx.ui.desktop.examples.popupexample
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.desktop.AppManager
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 1e124fa..bdd28df 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
@@ -15,10 +15,10 @@
  */
 package androidx.ui.desktop.core
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.onDispose
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.ViewAmbient
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 215a611..340a48a 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
@@ -15,9 +15,9 @@
  */
 package androidx.ui.desktop
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.remember
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import java.awt.Dimension
@@ -26,8 +26,8 @@
 import java.awt.event.WindowEvent
 import javax.swing.JFrame
 import javax.swing.WindowConstants
-import androidx.compose.onActive
-import androidx.compose.onDispose
+import androidx.compose.runtime.onActive
+import androidx.compose.runtime.onDispose
 
 @Composable
 fun Dialog(
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppFrame.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppFrame.kt
index 10d3434..0b31214 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppFrame.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/AppFrame.kt
@@ -15,7 +15,7 @@
  */
 package androidx.ui.desktop
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 abstract class AppFrame {
 
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 5e1c54e..9882b55a 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
@@ -15,10 +15,10 @@
  */
 package androidx.ui.desktop
 
-import androidx.compose.ambientOf
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.Providers
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.Providers
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import java.awt.Dimension
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt
index 73c675b..5cca1ab 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/ComposeInit.kt
@@ -19,7 +19,7 @@
 package androidx.ui.desktop
 
 import androidx.compose.animation.core.rootAnimationClockFactory
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 import androidx.compose.runtime.dispatch.DesktopUiDispatcher
 import androidx.compose.ui.graphics.DesktopCanvas
 import androidx.compose.ui.graphics.DesktopImageShader
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt
index 509cba1..289d651b 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelection.kt
@@ -18,15 +18,15 @@
 import androidx.ui.core.Modifier
 import androidx.ui.core.Layout
 import androidx.ui.core.gesture.DragObserver
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.onPositioned
 import androidx.compose.ui.geometry.Offset
 import kotlin.math.max
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.ui.core.selection.Selection
 import androidx.ui.core.selection.SelectionRegistrarAmbient
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.ui.core.pointerinput.PointerInputModifier
 import androidx.ui.core.pointerinput.PointerInputFilter
 import androidx.ui.core.composed
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt
index b71dfe7..4f076170 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/DesktopSelectionManager.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.desktop
 
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.clipboard.ClipboardManager
 import androidx.ui.core.gesture.DragObserver
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/Wrapper.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/Wrapper.kt
index 27c225d..be965cd 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/Wrapper.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/Wrapper.kt
@@ -17,7 +17,7 @@
 
 import android.content.Context
 import android.view.MotionEvent
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.desktop.view.LayoutScope
 import javax.swing.SwingUtilities
 import org.jetbrains.skija.Canvas
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/SkijaTest.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/SkijaTest.kt
index 0066596..7b63df8 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/SkijaTest.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/SkijaTest.kt
@@ -1,8 +1,8 @@
 package androidx.ui.desktop.test
 
-import androidx.compose.ChoreographerFrameCallback
-import androidx.compose.EmbeddingContext
-import androidx.compose.EmbeddingContextFactory
+import androidx.compose.runtime.ChoreographerFrameCallback
+import androidx.compose.runtime.EmbeddingContext
+import androidx.compose.runtime.EmbeddingContextFactory
 import kotlinx.coroutines.Dispatchers
 import org.jetbrains.skija.Surface
 import java.io.File
diff --git a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt
index cacd0b8..89f8086 100644
--- a/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt
+++ b/ui/ui-desktop/src/jvmMain/kotlin/androidx/ui/desktop/test/TestSkiaWindow.kt
@@ -19,9 +19,9 @@
 import android.view.ViewGroup
 import androidx.compose.animation.core.ManualAnimationClock
 import androidx.compose.animation.core.rootAnimationClockFactory
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Recomposer
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.LifecycleRegistry
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 4c6cfef..ceba800 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics
 
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.vectormath.Matrix4
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 9f8bfac..31a8775 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
@@ -19,9 +19,9 @@
 import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Recomposer
 import androidx.compose.runtime.dispatch.DesktopUiDispatcher
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
diff --git a/ui/ui-foundation/api/current.txt b/ui/ui-foundation/api/current.txt
index 8ccb51d..42fca98 100644
--- a/ui/ui-foundation/api/current.txt
+++ b/ui/ui-foundation/api/current.txt
@@ -2,7 +2,7 @@
 package androidx.compose.foundation {
 
   public final class AndroidDialogKt {
-    method @androidx.compose.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class BackgroundKt {
@@ -13,53 +13,53 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-IbTq1Xk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BaseTextField-IbTq1Xk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
-  @androidx.compose.Immutable public final class Border {
+  @androidx.compose.runtime.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-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.runtime.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-Qek64HU(float size, long color);
+    method @androidx.compose.runtime.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-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 var41192b49: androidx.compose.ui.unit.Dp = border?.size
-    if (var41192b49 != null) var41192b49 else 0.dp
+    method @androidx.compose.runtime.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 var41192dd9: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192dd9 != null) var41192dd9 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());
   }
 
   public final class CanvasKt {
-    method @androidx.compose.Composable public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onCanvas);
+    method @androidx.compose.runtime.Composable public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier clickable(androidx.ui.core.Modifier, boolean enabled = true, String? onClickLabel = null, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier clickable(androidx.ui.core.Modifier, boolean enabled = true, String? onClickLabel = null, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick = null, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
-    method @androidx.compose.Composable public static long contentColor();
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.graphics.Color> getContentColorAmbient();
+    method @androidx.compose.runtime.Composable public static long contentColor();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.graphics.Color> getContentColorAmbient();
   }
 
   public final class DarkThemeKt {
-    method @androidx.compose.Composable public static boolean isSystemInDarkTheme();
+    method @androidx.compose.runtime.Composable public static boolean isSystemInDarkTheme();
   }
 
   public final class DeterminateProgressIndicatorKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier determinateProgressIndicator(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float progress);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier determinateProgressIndicator(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float progress);
   }
 
   public final class DrawBorder implements androidx.ui.core.DrawModifier {
@@ -67,9 +67,9 @@
   }
 
   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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.runtime.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-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);
@@ -79,18 +79,18 @@
   }
 
   public final class IconKt {
-    method @androidx.compose.Composable public static void Icon-P5_f3uQ(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
-    method @androidx.compose.Composable public static void Icon-eFt01zY(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
-    method @androidx.compose.Composable public static void Icon-qrVAsN8(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-P5_f3uQ(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-eFt01zY(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-qrVAsN8(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
   }
 
   public final class ImageKt {
-    method @androidx.compose.Composable public static inline void Image(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
-    method @androidx.compose.Composable public static inline void Image(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
-    method @androidx.compose.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static inline void Image(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static inline void Image(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
   }
 
-  @androidx.compose.Stable public interface Indication {
+  @androidx.compose.runtime.Stable public interface Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
@@ -100,7 +100,7 @@
   }
 
   public final class IndicationKt {
-    method public static androidx.compose.ProvidableAmbient<kotlin.jvm.functions.Function0<androidx.compose.foundation.Indication>> getIndicationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<kotlin.jvm.functions.Function0<androidx.compose.foundation.Indication>> getIndicationAmbient();
     method public static androidx.ui.core.Modifier indication(androidx.ui.core.Modifier, androidx.compose.foundation.InteractionState interactionState, androidx.compose.foundation.Indication? indication = null);
   }
 
@@ -115,7 +115,7 @@
     field public static final androidx.compose.foundation.Interaction.Pressed INSTANCE;
   }
 
-  @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
+  @androidx.compose.runtime.Stable public final class InteractionState implements androidx.compose.runtime.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
     method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
@@ -129,17 +129,17 @@
   }
 
   public final class ScrollKt {
-    method @Deprecated @androidx.compose.Composable public static void HorizontalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @androidx.compose.Composable public static void ScrollableColumn(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
-    method @androidx.compose.Composable public static void ScrollableRow(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.ScrollerPosition ScrollerPosition(float initial = 0f, boolean isReversed = false);
-    method @Deprecated @androidx.compose.Composable public static void VerticalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void HorizontalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void ScrollableColumn(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void ScrollableRow(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollerPosition ScrollerPosition(float initial = 0f, boolean isReversed = false);
+    method @Deprecated @androidx.compose.runtime.Composable public static void VerticalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
     method public static androidx.ui.core.Modifier horizontalScroll(androidx.ui.core.Modifier, androidx.compose.foundation.ScrollState state, boolean enabled = true, boolean reverseScrolling = false);
-    method @androidx.compose.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(float initial = 0f);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(float initial = 0f);
     method public static androidx.ui.core.Modifier verticalScroll(androidx.ui.core.Modifier, androidx.compose.foundation.ScrollState state, boolean enabled = true, boolean reverseScrolling = false);
   }
 
-  @androidx.compose.Stable public final class ScrollState {
+  @androidx.compose.runtime.Stable public final class ScrollState {
     ctor public ScrollState(float initial, internal androidx.compose.foundation.animation.FlingConfig flingConfig, androidx.compose.animation.core.AnimationClockObservable animationClock);
     method public float getMaxValue();
     method public float getValue();
@@ -159,7 +159,7 @@
     method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollState,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, androidx.compose.animation.core.AnimationClockObservable animationClock);
   }
 
-  @Deprecated @androidx.compose.Stable public final class ScrollerPosition {
+  @Deprecated @androidx.compose.runtime.Stable public final class ScrollerPosition {
     ctor @Deprecated public ScrollerPosition(internal androidx.compose.foundation.animation.FlingConfig flingConfig, float initial, internal boolean isReversed, internal androidx.compose.animation.core.AnimationClockObservable animationClock);
     method @Deprecated public float getMaxPosition();
     method @Deprecated public float getValue();
@@ -175,7 +175,7 @@
   }
 
   @Deprecated public static final class ScrollerPosition.Companion {
-    method @Deprecated @androidx.compose.Composable public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollerPosition,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, boolean isReversed, androidx.compose.animation.core.AnimationClockObservable animationClock);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollerPosition,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, boolean isReversed, androidx.compose.animation.core.AnimationClockObservable animationClock);
   }
 
   public final class Strings {
@@ -197,10 +197,10 @@
   }
 
   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-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 @androidx.compose.ComposableContract(readonly=true) public static androidx.compose.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.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.runtime.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.runtime.Composable @androidx.compose.runtime.ComposableContract(readonly=true) public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -226,18 +226,18 @@
   public final class AndroidFlingSplineKt {
   }
 
-  @androidx.compose.Immutable public final class FlingConfig {
+  @androidx.compose.runtime.Immutable public final class FlingConfig {
     ctor public FlingConfig(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
     method public androidx.compose.animation.core.FloatDecayAnimationSpec component1();
     method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.compose.animation.core.TargetAnimation> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.animation.FlingConfig copy(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.animation.FlingConfig copy(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
     method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.compose.animation.core.TargetAnimation> getAdjustTarget();
     method public androidx.compose.animation.core.FloatDecayAnimationSpec getDecayAnimation();
   }
 
   public final class FlingConfigKt {
     method public static androidx.compose.foundation.animation.FlingConfig FlingConfig(java.util.List<java.lang.Float> anchors, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec = androidx.compose.animation.core.SpringSpec(), androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation = androidx.compose.animation.core.ExponentialDecay());
-    method @androidx.compose.Composable public static androidx.compose.foundation.animation.FlingConfig defaultFlingConfig(kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget = { return null });
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.animation.FlingConfig defaultFlingConfig(kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget = { return null });
     method public static void fling(androidx.compose.animation.core.AnimatedFloat, float startVelocity, androidx.compose.foundation.animation.FlingConfig config, kotlin.jvm.functions.Function3<? super androidx.compose.animation.core.AnimationEndReason,? super java.lang.Float,? super java.lang.Float,kotlin.Unit>? onAnimationEnd = null);
   }
 
@@ -260,7 +260,7 @@
   }
 
   public final class ScrollableKt {
-    method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
     method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
@@ -272,7 +272,7 @@
   }
 
   public final class ZoomableKt {
-    method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ZoomableController rememberZoomableController(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ZoomableController rememberZoomableController(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
     method public static androidx.ui.core.Modifier zoomable(androidx.ui.core.Modifier, androidx.compose.foundation.gestures.ZoomableController controller, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStarted = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStopped = null);
     method public static androidx.ui.core.Modifier zoomable(androidx.ui.core.Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStarted = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStopped = null, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
   }
@@ -282,10 +282,10 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyForKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @Deprecated @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @Deprecated @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.runtime.Composable public static <T> void LazyColumnFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.runtime.Composable public static <T> void LazyRowFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
@@ -293,17 +293,17 @@
 package androidx.compose.foundation.selection {
 
   public final class SelectableKt {
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier selectable(androidx.ui.core.Modifier, boolean selected, boolean enabled = true, boolean inMutuallyExclusiveGroup = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier selectable(androidx.ui.core.Modifier, boolean selected, boolean enabled = true, boolean inMutuallyExclusiveGroup = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
 
   public final class ToggleableKt {
     method public static androidx.compose.foundation.selection.ToggleableState ToggleableState(boolean value);
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier toggleable(androidx.ui.core.Modifier, boolean value, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier toggleable(androidx.ui.core.Modifier, boolean value, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier triStateToggleable(androidx.ui.core.Modifier, androidx.compose.foundation.selection.ToggleableState state, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier triStateToggleable(androidx.ui.core.Modifier, androidx.compose.foundation.selection.ToggleableState state, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
@@ -358,14 +358,14 @@
     method public final androidx.compose.foundation.shape.CornerSize getTopRight();
   }
 
-  @androidx.compose.Immutable public interface CornerSize {
+  @androidx.compose.runtime.Immutable public interface CornerSize {
     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.CornerSize CornerSize(float size);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize-0680j_4(float size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.CornerSize getZeroCornerSize();
   }
 
diff --git a/ui/ui-foundation/api/public_plus_experimental_current.txt b/ui/ui-foundation/api/public_plus_experimental_current.txt
index 8ccb51d..42fca98 100644
--- a/ui/ui-foundation/api/public_plus_experimental_current.txt
+++ b/ui/ui-foundation/api/public_plus_experimental_current.txt
@@ -2,7 +2,7 @@
 package androidx.compose.foundation {
 
   public final class AndroidDialogKt {
-    method @androidx.compose.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class BackgroundKt {
@@ -13,53 +13,53 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-IbTq1Xk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BaseTextField-IbTq1Xk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
-  @androidx.compose.Immutable public final class Border {
+  @androidx.compose.runtime.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-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.runtime.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-Qek64HU(float size, long color);
+    method @androidx.compose.runtime.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-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 var41192b49: androidx.compose.ui.unit.Dp = border?.size
-    if (var41192b49 != null) var41192b49 else 0.dp
+    method @androidx.compose.runtime.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 var41192dd9: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192dd9 != null) var41192dd9 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());
   }
 
   public final class CanvasKt {
-    method @androidx.compose.Composable public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onCanvas);
+    method @androidx.compose.runtime.Composable public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier clickable(androidx.ui.core.Modifier, boolean enabled = true, String? onClickLabel = null, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier clickable(androidx.ui.core.Modifier, boolean enabled = true, String? onClickLabel = null, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick = null, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
-    method @androidx.compose.Composable public static long contentColor();
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.graphics.Color> getContentColorAmbient();
+    method @androidx.compose.runtime.Composable public static long contentColor();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.graphics.Color> getContentColorAmbient();
   }
 
   public final class DarkThemeKt {
-    method @androidx.compose.Composable public static boolean isSystemInDarkTheme();
+    method @androidx.compose.runtime.Composable public static boolean isSystemInDarkTheme();
   }
 
   public final class DeterminateProgressIndicatorKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier determinateProgressIndicator(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float progress);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier determinateProgressIndicator(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float progress);
   }
 
   public final class DrawBorder implements androidx.ui.core.DrawModifier {
@@ -67,9 +67,9 @@
   }
 
   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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.runtime.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-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);
@@ -79,18 +79,18 @@
   }
 
   public final class IconKt {
-    method @androidx.compose.Composable public static void Icon-P5_f3uQ(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
-    method @androidx.compose.Composable public static void Icon-eFt01zY(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
-    method @androidx.compose.Composable public static void Icon-qrVAsN8(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-P5_f3uQ(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-eFt01zY(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-qrVAsN8(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
   }
 
   public final class ImageKt {
-    method @androidx.compose.Composable public static inline void Image(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
-    method @androidx.compose.Composable public static inline void Image(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
-    method @androidx.compose.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static inline void Image(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static inline void Image(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
   }
 
-  @androidx.compose.Stable public interface Indication {
+  @androidx.compose.runtime.Stable public interface Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
@@ -100,7 +100,7 @@
   }
 
   public final class IndicationKt {
-    method public static androidx.compose.ProvidableAmbient<kotlin.jvm.functions.Function0<androidx.compose.foundation.Indication>> getIndicationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<kotlin.jvm.functions.Function0<androidx.compose.foundation.Indication>> getIndicationAmbient();
     method public static androidx.ui.core.Modifier indication(androidx.ui.core.Modifier, androidx.compose.foundation.InteractionState interactionState, androidx.compose.foundation.Indication? indication = null);
   }
 
@@ -115,7 +115,7 @@
     field public static final androidx.compose.foundation.Interaction.Pressed INSTANCE;
   }
 
-  @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
+  @androidx.compose.runtime.Stable public final class InteractionState implements androidx.compose.runtime.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
     method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
@@ -129,17 +129,17 @@
   }
 
   public final class ScrollKt {
-    method @Deprecated @androidx.compose.Composable public static void HorizontalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @androidx.compose.Composable public static void ScrollableColumn(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
-    method @androidx.compose.Composable public static void ScrollableRow(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.ScrollerPosition ScrollerPosition(float initial = 0f, boolean isReversed = false);
-    method @Deprecated @androidx.compose.Composable public static void VerticalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void HorizontalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void ScrollableColumn(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void ScrollableRow(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollerPosition ScrollerPosition(float initial = 0f, boolean isReversed = false);
+    method @Deprecated @androidx.compose.runtime.Composable public static void VerticalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
     method public static androidx.ui.core.Modifier horizontalScroll(androidx.ui.core.Modifier, androidx.compose.foundation.ScrollState state, boolean enabled = true, boolean reverseScrolling = false);
-    method @androidx.compose.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(float initial = 0f);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(float initial = 0f);
     method public static androidx.ui.core.Modifier verticalScroll(androidx.ui.core.Modifier, androidx.compose.foundation.ScrollState state, boolean enabled = true, boolean reverseScrolling = false);
   }
 
-  @androidx.compose.Stable public final class ScrollState {
+  @androidx.compose.runtime.Stable public final class ScrollState {
     ctor public ScrollState(float initial, internal androidx.compose.foundation.animation.FlingConfig flingConfig, androidx.compose.animation.core.AnimationClockObservable animationClock);
     method public float getMaxValue();
     method public float getValue();
@@ -159,7 +159,7 @@
     method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollState,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, androidx.compose.animation.core.AnimationClockObservable animationClock);
   }
 
-  @Deprecated @androidx.compose.Stable public final class ScrollerPosition {
+  @Deprecated @androidx.compose.runtime.Stable public final class ScrollerPosition {
     ctor @Deprecated public ScrollerPosition(internal androidx.compose.foundation.animation.FlingConfig flingConfig, float initial, internal boolean isReversed, internal androidx.compose.animation.core.AnimationClockObservable animationClock);
     method @Deprecated public float getMaxPosition();
     method @Deprecated public float getValue();
@@ -175,7 +175,7 @@
   }
 
   @Deprecated public static final class ScrollerPosition.Companion {
-    method @Deprecated @androidx.compose.Composable public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollerPosition,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, boolean isReversed, androidx.compose.animation.core.AnimationClockObservable animationClock);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollerPosition,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, boolean isReversed, androidx.compose.animation.core.AnimationClockObservable animationClock);
   }
 
   public final class Strings {
@@ -197,10 +197,10 @@
   }
 
   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-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 @androidx.compose.ComposableContract(readonly=true) public static androidx.compose.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.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.runtime.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.runtime.Composable @androidx.compose.runtime.ComposableContract(readonly=true) public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -226,18 +226,18 @@
   public final class AndroidFlingSplineKt {
   }
 
-  @androidx.compose.Immutable public final class FlingConfig {
+  @androidx.compose.runtime.Immutable public final class FlingConfig {
     ctor public FlingConfig(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
     method public androidx.compose.animation.core.FloatDecayAnimationSpec component1();
     method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.compose.animation.core.TargetAnimation> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.animation.FlingConfig copy(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.animation.FlingConfig copy(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
     method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.compose.animation.core.TargetAnimation> getAdjustTarget();
     method public androidx.compose.animation.core.FloatDecayAnimationSpec getDecayAnimation();
   }
 
   public final class FlingConfigKt {
     method public static androidx.compose.foundation.animation.FlingConfig FlingConfig(java.util.List<java.lang.Float> anchors, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec = androidx.compose.animation.core.SpringSpec(), androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation = androidx.compose.animation.core.ExponentialDecay());
-    method @androidx.compose.Composable public static androidx.compose.foundation.animation.FlingConfig defaultFlingConfig(kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget = { return null });
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.animation.FlingConfig defaultFlingConfig(kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget = { return null });
     method public static void fling(androidx.compose.animation.core.AnimatedFloat, float startVelocity, androidx.compose.foundation.animation.FlingConfig config, kotlin.jvm.functions.Function3<? super androidx.compose.animation.core.AnimationEndReason,? super java.lang.Float,? super java.lang.Float,kotlin.Unit>? onAnimationEnd = null);
   }
 
@@ -260,7 +260,7 @@
   }
 
   public final class ScrollableKt {
-    method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
     method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
@@ -272,7 +272,7 @@
   }
 
   public final class ZoomableKt {
-    method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ZoomableController rememberZoomableController(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ZoomableController rememberZoomableController(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
     method public static androidx.ui.core.Modifier zoomable(androidx.ui.core.Modifier, androidx.compose.foundation.gestures.ZoomableController controller, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStarted = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStopped = null);
     method public static androidx.ui.core.Modifier zoomable(androidx.ui.core.Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStarted = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStopped = null, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
   }
@@ -282,10 +282,10 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyForKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @Deprecated @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @Deprecated @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.runtime.Composable public static <T> void LazyColumnFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.runtime.Composable public static <T> void LazyRowFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
@@ -293,17 +293,17 @@
 package androidx.compose.foundation.selection {
 
   public final class SelectableKt {
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier selectable(androidx.ui.core.Modifier, boolean selected, boolean enabled = true, boolean inMutuallyExclusiveGroup = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier selectable(androidx.ui.core.Modifier, boolean selected, boolean enabled = true, boolean inMutuallyExclusiveGroup = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
 
   public final class ToggleableKt {
     method public static androidx.compose.foundation.selection.ToggleableState ToggleableState(boolean value);
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier toggleable(androidx.ui.core.Modifier, boolean value, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier toggleable(androidx.ui.core.Modifier, boolean value, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier triStateToggleable(androidx.ui.core.Modifier, androidx.compose.foundation.selection.ToggleableState state, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier triStateToggleable(androidx.ui.core.Modifier, androidx.compose.foundation.selection.ToggleableState state, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
@@ -358,14 +358,14 @@
     method public final androidx.compose.foundation.shape.CornerSize getTopRight();
   }
 
-  @androidx.compose.Immutable public interface CornerSize {
+  @androidx.compose.runtime.Immutable public interface CornerSize {
     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.CornerSize CornerSize(float size);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize-0680j_4(float size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.CornerSize getZeroCornerSize();
   }
 
diff --git a/ui/ui-foundation/api/restricted_current.txt b/ui/ui-foundation/api/restricted_current.txt
index 8ccb51d..42fca98 100644
--- a/ui/ui-foundation/api/restricted_current.txt
+++ b/ui/ui-foundation/api/restricted_current.txt
@@ -2,7 +2,7 @@
 package androidx.compose.foundation {
 
   public final class AndroidDialogKt {
-    method @androidx.compose.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Dialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class BackgroundKt {
@@ -13,53 +13,53 @@
   }
 
   public final class BaseTextFieldKt {
-    method @androidx.compose.Composable @androidx.compose.foundation.ExperimentalFoundationApi public static void BaseTextField-IbTq1Xk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
+    method @androidx.compose.foundation.ExperimentalFoundationApi @androidx.compose.runtime.Composable public static void BaseTextField-IbTq1Xk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, long textColor = Color.Unset, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long cursorColor = contentColor());
   }
 
-  @androidx.compose.Immutable public final class Border {
+  @androidx.compose.runtime.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-v_fYJzc(float size, androidx.compose.ui.graphics.Brush brush);
+    method @androidx.compose.runtime.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-Qek64HU(float size, long color);
+    method @androidx.compose.runtime.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-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 var41192b49: androidx.compose.ui.unit.Dp = border?.size
-    if (var41192b49 != null) var41192b49 else 0.dp
+    method @androidx.compose.runtime.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 var41192dd9: androidx.compose.ui.unit.Dp = border?.size
+    if (var41192dd9 != null) var41192dd9 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());
   }
 
   public final class CanvasKt {
-    method @androidx.compose.Composable public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onCanvas);
+    method @androidx.compose.runtime.Composable public static void Canvas(androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.graphics.drawscope.DrawScope,kotlin.Unit> onCanvas);
   }
 
   public final class ClickableKt {
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier clickable(androidx.ui.core.Modifier, boolean enabled = true, String? onClickLabel = null, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier clickable(androidx.ui.core.Modifier, boolean enabled = true, String? onClickLabel = null, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit>? onLongClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onDoubleClick = null, kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
 
   public final class ClickableTextKt {
-    method @androidx.compose.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
+    method @androidx.compose.runtime.Composable public static void ClickableText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style = TextStyle.Default, boolean softWrap = true, androidx.compose.ui.text.style.TextOverflow overflow = TextOverflow.Clip, int maxLines = 2147483647, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super java.lang.Integer,kotlin.Unit> onClick);
   }
 
   public final class ContentColorKt {
-    method @androidx.compose.Composable public static long contentColor();
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.ui.graphics.Color> getContentColorAmbient();
+    method @androidx.compose.runtime.Composable public static long contentColor();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.ui.graphics.Color> getContentColorAmbient();
   }
 
   public final class DarkThemeKt {
-    method @androidx.compose.Composable public static boolean isSystemInDarkTheme();
+    method @androidx.compose.runtime.Composable public static boolean isSystemInDarkTheme();
   }
 
   public final class DeterminateProgressIndicatorKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier determinateProgressIndicator(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float progress);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier determinateProgressIndicator(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=1.0) float progress);
   }
 
   public final class DrawBorder implements androidx.ui.core.DrawModifier {
@@ -67,9 +67,9 @@
   }
 
   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.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 @Deprecated @androidx.compose.runtime.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.runtime.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.runtime.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-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);
@@ -79,18 +79,18 @@
   }
 
   public final class IconKt {
-    method @androidx.compose.Composable public static void Icon-P5_f3uQ(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
-    method @androidx.compose.Composable public static void Icon-eFt01zY(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
-    method @androidx.compose.Composable public static void Icon-qrVAsN8(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-P5_f3uQ(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-eFt01zY(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
+    method @androidx.compose.runtime.Composable public static void Icon-qrVAsN8(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, long tint = contentColor());
   }
 
   public final class ImageKt {
-    method @androidx.compose.Composable public static inline void Image(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
-    method @androidx.compose.Composable public static inline void Image(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
-    method @androidx.compose.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static inline void Image(androidx.compose.ui.graphics.ImageAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static inline void Image(androidx.compose.ui.graphics.vector.VectorAsset asset, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
+    method @androidx.compose.runtime.Composable public static void Image(androidx.compose.ui.graphics.painter.Painter painter, androidx.ui.core.Modifier modifier = Modifier, androidx.ui.core.Alignment alignment = Alignment.Center, androidx.ui.core.ContentScale contentScale = ContentScale.Fit, float alpha = 1.0f, androidx.compose.ui.graphics.ColorFilter? colorFilter = null);
   }
 
-  @androidx.compose.Stable public interface Indication {
+  @androidx.compose.runtime.Stable public interface Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
@@ -100,7 +100,7 @@
   }
 
   public final class IndicationKt {
-    method public static androidx.compose.ProvidableAmbient<kotlin.jvm.functions.Function0<androidx.compose.foundation.Indication>> getIndicationAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<kotlin.jvm.functions.Function0<androidx.compose.foundation.Indication>> getIndicationAmbient();
     method public static androidx.ui.core.Modifier indication(androidx.ui.core.Modifier, androidx.compose.foundation.InteractionState interactionState, androidx.compose.foundation.Indication? indication = null);
   }
 
@@ -115,7 +115,7 @@
     field public static final androidx.compose.foundation.Interaction.Pressed INSTANCE;
   }
 
-  @androidx.compose.Stable public final class InteractionState implements androidx.compose.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
+  @androidx.compose.runtime.Stable public final class InteractionState implements androidx.compose.runtime.State<java.util.Set<? extends androidx.compose.foundation.Interaction>> {
     ctor public InteractionState();
     method public void addInteraction(androidx.compose.foundation.Interaction interaction, androidx.compose.ui.geometry.Offset? position = null);
     method public operator boolean contains(androidx.compose.foundation.Interaction interaction);
@@ -129,17 +129,17 @@
   }
 
   public final class ScrollKt {
-    method @Deprecated @androidx.compose.Composable public static void HorizontalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @androidx.compose.Composable public static void ScrollableColumn(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
-    method @androidx.compose.Composable public static void ScrollableRow(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static androidx.compose.foundation.ScrollerPosition ScrollerPosition(float initial = 0f, boolean isReversed = false);
-    method @Deprecated @androidx.compose.Composable public static void VerticalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void HorizontalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void ScrollableColumn(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void ScrollableRow(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.ScrollState scrollState = rememberScrollState(0.0), androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, boolean reverseScrollDirection = false, boolean isScrollEnabled = true, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollerPosition ScrollerPosition(float initial = 0f, boolean isReversed = false);
+    method @Deprecated @androidx.compose.runtime.Composable public static void VerticalScroller(androidx.compose.foundation.ScrollerPosition scrollerPosition = ScrollerPosition(), androidx.ui.core.Modifier modifier = Modifier, boolean isScrollable = true, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
     method public static androidx.ui.core.Modifier horizontalScroll(androidx.ui.core.Modifier, androidx.compose.foundation.ScrollState state, boolean enabled = true, boolean reverseScrolling = false);
-    method @androidx.compose.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(float initial = 0f);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.ScrollState rememberScrollState(float initial = 0f);
     method public static androidx.ui.core.Modifier verticalScroll(androidx.ui.core.Modifier, androidx.compose.foundation.ScrollState state, boolean enabled = true, boolean reverseScrolling = false);
   }
 
-  @androidx.compose.Stable public final class ScrollState {
+  @androidx.compose.runtime.Stable public final class ScrollState {
     ctor public ScrollState(float initial, internal androidx.compose.foundation.animation.FlingConfig flingConfig, androidx.compose.animation.core.AnimationClockObservable animationClock);
     method public float getMaxValue();
     method public float getValue();
@@ -159,7 +159,7 @@
     method public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollState,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, androidx.compose.animation.core.AnimationClockObservable animationClock);
   }
 
-  @Deprecated @androidx.compose.Stable public final class ScrollerPosition {
+  @Deprecated @androidx.compose.runtime.Stable public final class ScrollerPosition {
     ctor @Deprecated public ScrollerPosition(internal androidx.compose.foundation.animation.FlingConfig flingConfig, float initial, internal boolean isReversed, internal androidx.compose.animation.core.AnimationClockObservable animationClock);
     method @Deprecated public float getMaxPosition();
     method @Deprecated public float getValue();
@@ -175,7 +175,7 @@
   }
 
   @Deprecated public static final class ScrollerPosition.Companion {
-    method @Deprecated @androidx.compose.Composable public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollerPosition,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, boolean isReversed, androidx.compose.animation.core.AnimationClockObservable animationClock);
+    method @Deprecated @androidx.compose.runtime.Composable public androidx.compose.runtime.savedinstancestate.Saver<androidx.compose.foundation.ScrollerPosition,?> Saver(androidx.compose.foundation.animation.FlingConfig flingConfig, boolean isReversed, androidx.compose.animation.core.AnimationClockObservable animationClock);
   }
 
   public final class Strings {
@@ -197,10 +197,10 @@
   }
 
   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-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 @androidx.compose.ComposableContract(readonly=true) public static androidx.compose.ui.text.TextStyle currentTextStyle();
+    method @androidx.compose.runtime.Composable public static void ProvideTextStyle(androidx.compose.ui.text.TextStyle value, kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.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.runtime.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.runtime.Composable @androidx.compose.runtime.ComposableContract(readonly=true) public static androidx.compose.ui.text.TextStyle currentTextStyle();
   }
 
 }
@@ -226,18 +226,18 @@
   public final class AndroidFlingSplineKt {
   }
 
-  @androidx.compose.Immutable public final class FlingConfig {
+  @androidx.compose.runtime.Immutable public final class FlingConfig {
     ctor public FlingConfig(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
     method public androidx.compose.animation.core.FloatDecayAnimationSpec component1();
     method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.compose.animation.core.TargetAnimation> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.animation.FlingConfig copy(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.animation.FlingConfig copy(androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation, kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget);
     method public kotlin.jvm.functions.Function1<java.lang.Float,androidx.compose.animation.core.TargetAnimation> getAdjustTarget();
     method public androidx.compose.animation.core.FloatDecayAnimationSpec getDecayAnimation();
   }
 
   public final class FlingConfigKt {
     method public static androidx.compose.foundation.animation.FlingConfig FlingConfig(java.util.List<java.lang.Float> anchors, androidx.compose.animation.core.AnimationSpec<java.lang.Float> animationSpec = androidx.compose.animation.core.SpringSpec(), androidx.compose.animation.core.FloatDecayAnimationSpec decayAnimation = androidx.compose.animation.core.ExponentialDecay());
-    method @androidx.compose.Composable public static androidx.compose.foundation.animation.FlingConfig defaultFlingConfig(kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget = { return null });
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.animation.FlingConfig defaultFlingConfig(kotlin.jvm.functions.Function1<? super java.lang.Float,androidx.compose.animation.core.TargetAnimation> adjustTarget = { return null });
     method public static void fling(androidx.compose.animation.core.AnimatedFloat, float startVelocity, androidx.compose.foundation.animation.FlingConfig config, kotlin.jvm.functions.Function3<? super androidx.compose.animation.core.AnimationEndReason,? super java.lang.Float,? super java.lang.Float,kotlin.Unit>? onAnimationEnd = null);
   }
 
@@ -260,7 +260,7 @@
   }
 
   public final class ScrollableKt {
-    method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ScrollableController rememberScrollableController(kotlin.jvm.functions.Function1<? super java.lang.Float,java.lang.Float> consumeScrollDelta);
     method public static androidx.ui.core.Modifier scrollable(androidx.ui.core.Modifier, androidx.ui.core.gesture.scrollorientationlocking.Orientation orientation, androidx.compose.foundation.gestures.ScrollableController controller, boolean enabled = true, boolean reverseDirection = false, kotlin.jvm.functions.Function1<? super androidx.ui.core.Direction,java.lang.Boolean> canScroll = { return enabled }, kotlin.jvm.functions.Function1<? super androidx.compose.ui.geometry.Offset,kotlin.Unit> onScrollStarted = {}, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onScrollStopped = {});
   }
 
@@ -272,7 +272,7 @@
   }
 
   public final class ZoomableKt {
-    method @androidx.compose.Composable public static androidx.compose.foundation.gestures.ZoomableController rememberZoomableController(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
+    method @androidx.compose.runtime.Composable public static androidx.compose.foundation.gestures.ZoomableController rememberZoomableController(kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
     method public static androidx.ui.core.Modifier zoomable(androidx.ui.core.Modifier, androidx.compose.foundation.gestures.ZoomableController controller, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStarted = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStopped = null);
     method public static androidx.ui.core.Modifier zoomable(androidx.ui.core.Modifier, boolean enabled = true, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStarted = null, kotlin.jvm.functions.Function0<kotlin.Unit>? onZoomStopped = null, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onZoomDelta);
   }
@@ -282,10 +282,10 @@
 package androidx.compose.foundation.lazy {
 
   public final class LazyForKt {
-    method @androidx.compose.Composable public static <T> void LazyColumnFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @Deprecated @androidx.compose.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @androidx.compose.Composable public static <T> void LazyRowFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
-    method @Deprecated @androidx.compose.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.runtime.Composable public static <T> void LazyColumnFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void LazyColumnItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @androidx.compose.runtime.Composable public static <T> void LazyRowFor(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
+    method @Deprecated @androidx.compose.runtime.Composable public static <T> void LazyRowItems(java.util.List<? extends T> items, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.InnerPadding contentPadding = androidx.compose.foundation.layout.InnerPadding(0.dp), androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super T,kotlin.Unit> itemContent);
   }
 
 }
@@ -293,17 +293,17 @@
 package androidx.compose.foundation.selection {
 
   public final class SelectableKt {
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier selectable(androidx.ui.core.Modifier, boolean selected, boolean enabled = true, boolean inMutuallyExclusiveGroup = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier selectable(androidx.ui.core.Modifier, boolean selected, boolean enabled = true, boolean inMutuallyExclusiveGroup = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
 
   public final class ToggleableKt {
     method public static androidx.compose.foundation.selection.ToggleableState ToggleableState(boolean value);
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier toggleable(androidx.ui.core.Modifier, boolean value, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier toggleable(androidx.ui.core.Modifier, boolean value, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onValueChange);
-    method @androidx.compose.Composable public static androidx.ui.core.Modifier triStateToggleable(androidx.ui.core.Modifier, androidx.compose.foundation.selection.ToggleableState state, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
+    method @androidx.compose.runtime.Composable public static androidx.ui.core.Modifier triStateToggleable(androidx.ui.core.Modifier, androidx.compose.foundation.selection.ToggleableState state, boolean enabled = true, androidx.compose.foundation.InteractionState interactionState = remember({ 
     return <init>()
 }), androidx.compose.foundation.Indication? indication = IndicationAmbient.invoke(), kotlin.jvm.functions.Function0<kotlin.Unit> onClick);
   }
@@ -358,14 +358,14 @@
     method public final androidx.compose.foundation.shape.CornerSize getTopRight();
   }
 
-  @androidx.compose.Immutable public interface CornerSize {
+  @androidx.compose.runtime.Immutable public interface CornerSize {
     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.CornerSize CornerSize(float size);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
-    method @androidx.compose.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize-0680j_4(float size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(float size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize(@IntRange(from=0, to=100) int percent);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.shape.CornerSize CornerSize-0680j_4(float size);
     method public static androidx.compose.foundation.shape.CornerSize getZeroCornerSize();
   }
 
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 2c58465..63779f4 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Box
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 13ffccd..98761aa 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.samples.BorderSample
 import androidx.compose.foundation.samples.BorderSampleWithBrush
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 68c473c..0c50ab41 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.samples.DraggableSample
 import androidx.compose.foundation.samples.ScrollableSample
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 3767e3a..4bbca25 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
@@ -16,12 +16,12 @@
 
 package androidx.compose.foundation.demos
 
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.demos.common.ComposableDemo
 import androidx.compose.foundation.Box
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 35f7fb1..e065507 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Text
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 9a5350f..342d6a8 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Box
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 3de5307..3e7d770 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
 import androidx.compose.ui.geometry.Offset
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableSamples.kt
index beb7e89..ff80cd8 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableSamples.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.clickable
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
index 1c9e7f9..0819997 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ClickableTextSample.kt
@@ -18,8 +18,8 @@
 
 import android.util.Log
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.longPressGestureFilter
 import androidx.compose.foundation.ClickableText
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 0d3fedc..c9eaa95 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
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 7c22cb1..ccb7f8b 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
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 8cdbaae..0f3c8d6 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Dialog
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 497a423..aeb7878 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.compose.foundation.Box
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 11e528e..c01f9a7 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.background
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 6907228..a675c62 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Image
 import androidx.compose.ui.geometry.Offset
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 de11abd..66ea577 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.IndicationAmbient
 import androidx.compose.foundation.InteractionState
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 b3a0330..d4abebe 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.compose.foundation.Border
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 21f63f4..af357e3 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
 import androidx.compose.foundation.Box
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 e9adca4..b6b4847 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
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 50d2ce0..ef7a8da 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
@@ -17,10 +17,10 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt
index 4b4f1f2..21dbcbd 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/TextFieldSample.kt
@@ -17,9 +17,9 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.Text
diff --git a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ToggleableSamples.kt b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ToggleableSamples.kt
index 8d5a9c1..5b1baf1 100644
--- a/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ToggleableSamples.kt
+++ b/ui/ui-foundation/samples/src/main/java/androidx/compose/foundation/samples/ToggleableSamples.kt
@@ -17,10 +17,10 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.selection.ToggleableState
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 cdbbd05..bf53856 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ContentGravity
 import androidx.compose.foundation.Text
@@ -27,10 +27,10 @@
 import androidx.compose.foundation.gestures.zoomable
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.ui.core.Modifier
 import androidx.ui.core.clipToBounds
 import androidx.ui.core.drawLayer
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 47945b4..87d9e7c 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation
 
 import android.os.Build
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.shape.CircleShape
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 b65adea..f46f9fe 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation
 
 import android.os.Build
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.DensityAmbient
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 6f761b4..c3d588f 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation
 
 import android.os.Build
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.AbsoluteAlignment
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
index 6431c11..cad9bba 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ClickableTest.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
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 fc6cd92..6de7119 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DialogUiTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DialogUiTest.kt
index 0b5d603..da870c2 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DialogUiTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/DialogUiTest.kt
@@ -15,9 +15,9 @@
  */
 package androidx.compose.foundation
 
-import androidx.compose.Providers
-import androidx.compose.ambientOf
-import androidx.compose.state
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.state
 import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
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 6b3d678..33d4f6d 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
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
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 b54bf9f..29e0b12 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
 import androidx.compose.foundation.layout.DpConstraints
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 4b6210c..162e7ab 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.MediumTest
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.Modifier
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 a9843cf..9f1060c 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
@@ -20,8 +20,8 @@
 import androidx.compose.animation.core.ExponentialDecay
 import androidx.compose.animation.core.ManualAnimationClock
 import androidx.annotation.RequiresApi
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
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 594ce40..7972194 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
@@ -20,10 +20,10 @@
 import android.os.Looper
 import androidx.compose.animation.core.ExponentialDecay
 import androidx.compose.animation.core.ManualAnimationClock
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.scrollorientationlocking.Orientation
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
index 021c327..5e21eea 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SelectableTest.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.selection.selectable
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt
index 4cb556f..a83b0cc 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/SoftwareKeyboardTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Providers
-import androidx.compose.state
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.state
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.TextInputServiceAmbient
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 7f81711..9bf8ed0 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.test.annotation.UiThreadTest
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
index 99d0336..500586b 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/TextFieldOnValueChangeTextFieldValueTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Providers
-import androidx.compose.state
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.state
 import androidx.test.filters.SmallTest
 import androidx.ui.core.TextInputServiceAmbient
 import androidx.compose.ui.geometry.Offset
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 d58eaec..cfb5dce 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
@@ -20,17 +20,17 @@
 package androidx.compose.foundation
 
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.Providers
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.Providers
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.compose.ui.text.AnnotatedString
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ToggleableTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ToggleableTest.kt
index fb1e6d4..44b1e58 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ToggleableTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/ToggleableTest.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
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 f382f94c..02e4964 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnForTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnForTest.kt
index 77e89f8..fba42fd 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnForTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyColumnForTest.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.foundation.lazy
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onCommit
-import androidx.compose.onDispose
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.setValue
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.TouchSlop
diff --git a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowForTest.kt b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowForTest.kt
index b575ac4..b7200c2 100644
--- a/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowForTest.kt
+++ b/ui/ui-foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazyRowForTest.kt
@@ -17,9 +17,9 @@
 package androidx.compose.foundation.lazy
 
 import androidx.compose.foundation.layout.Column
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidDialog.kt b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidDialog.kt
index 99b8b0a..74b06e0 100644
--- a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidDialog.kt
+++ b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/AndroidDialog.kt
@@ -21,16 +21,16 @@
 import android.view.View
 import android.view.Window
 import android.widget.FrameLayout
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.CompositionReference
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.compositionReference
-import androidx.compose.currentComposer
-import androidx.compose.onActive
-import androidx.compose.onCommit
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.CompositionReference
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.compositionReference
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.onActive
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
 import androidx.lifecycle.ViewTreeLifecycleOwner
 import androidx.lifecycle.ViewTreeViewModelStoreOwner
 import androidx.ui.core.Modifier
diff --git a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/DarkTheme.kt b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/DarkTheme.kt
index 8eae724..cdc77c6 100644
--- a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/DarkTheme.kt
+++ b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/DarkTheme.kt
@@ -17,7 +17,7 @@
 package androidx.compose.foundation
 
 import android.content.res.Configuration
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.ConfigurationAmbient
 
 /**
diff --git a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingConfig.kt b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingConfig.kt
index a1e03cc..44220cc 100644
--- a/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingConfig.kt
+++ b/ui/ui-foundation/src/androidMain/kotlin/androidx/compose/foundation/animation/AndroidFlingConfig.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.animation
 
 import androidx.compose.animation.core.TargetAnimation
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.DensityAmbient
 
 @Composable
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 508101c..5e102f5 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
@@ -20,15 +20,15 @@
 import androidx.compose.animation.core.AnimationConstants.Infinite
 import androidx.compose.animation.core.keyframes
 import androidx.compose.animation.core.repeatable
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.State
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onCommit
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.animation.animatedColor
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.DrawModifier
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 72aa8c0..9090627 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.graphics.Brush
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.SolidColor
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 7513a6f..e0c343d 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Canvas.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Canvas.kt
index ed9ff48..e803a00 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Canvas.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Canvas.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
 import androidx.compose.ui.graphics.drawscope.DrawScope
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
index 6847db9..f7802fd 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Clickable.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.onCommit
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
 import androidx.ui.core.gesture.doubleTapGestureFilter
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt
index 5045b6c..05d5e2d8 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ClickableText.kt
@@ -15,8 +15,8 @@
  */
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
 import androidx.ui.core.gesture.tapGestureFilter
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ContentColor.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ContentColor.kt
index b4ca269..34ec2b4 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ContentColor.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/ContentColor.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.ambientOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ambientOf
 import androidx.compose.ui.graphics.Color
 
 /**
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DeterminateProgressIndicator.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DeterminateProgressIndicator.kt
index d90180e..5dfa590 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DeterminateProgressIndicator.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/DeterminateProgressIndicator.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
 import androidx.ui.semantics.AccessibilityRangeInfo
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Dialog.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Dialog.kt
index 145d2c3..c3dfd4c 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Dialog.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Dialog.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 /**
  * Opens a dialog with the given content.
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 5b10536..278a98f 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.DrawModifier
 import androidx.ui.core.Modifier
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 a2dc9ae..46f2a60 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
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.paint
 import androidx.compose.ui.geometry.Size
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt
index c891991..a3f38e1 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Image.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.clipToBounds
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt
index 131799f..1445424 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/Indication.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.CompositionLifecycleObserver
-import androidx.compose.Stable
-import androidx.compose.remember
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLifecycleObserver
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.staticAmbientOf
 import androidx.ui.core.ContentDrawScope
 import androidx.ui.core.DrawModifier
 import androidx.ui.core.Modifier
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt
index a4b8b16..f20a55a 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/InteractionState.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Stable
-import androidx.compose.State
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.geometry.Offset
 
 /**
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 d8c3b78..7a9c20a 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
@@ -21,13 +21,13 @@
 import androidx.compose.animation.core.AnimationEndReason
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.SpringSpec
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.Alignment
 import androidx.ui.core.AnimationClockAmbient
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 9b888ba..e332ff7 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
@@ -16,12 +16,12 @@
 
 package androidx.compose.foundation
 
-import androidx.compose.Composable
-import androidx.compose.ComposableContract
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Providers
-import androidx.compose.ambientOf
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ComposableContract
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.ambientOf
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/animation/FlingConfig.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/animation/FlingConfig.kt
index 7b64a57..5df4eec 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/animation/FlingConfig.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/animation/FlingConfig.kt
@@ -24,8 +24,8 @@
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.animation.core.TargetAnimation
 import androidx.compose.animation.core.fling
-import androidx.compose.Composable
-import androidx.compose.Immutable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
 import kotlin.math.abs
 
 /**
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 b01a117..281454d 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.gestures
 
-import androidx.compose.onDispose
+import androidx.compose.runtime.onDispose
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Direction
 import androidx.ui.core.Modifier
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
index 5e6e069..84255ad 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Scrollable.kt
@@ -23,10 +23,10 @@
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.Spring
 import androidx.compose.animation.core.SpringSpec
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
-import androidx.compose.onDispose
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.AnimationClockAmbient
 import androidx.ui.core.Direction
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Zoomable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Zoomable.kt
index da97afd..f7d32858 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Zoomable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/gestures/Zoomable.kt
@@ -22,9 +22,9 @@
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.Spring
 import androidx.compose.animation.core.SpringSpec
-import androidx.compose.Composable
-import androidx.compose.onDispose
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.AnimationClockAmbient
 import androidx.ui.core.Modifier
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt
index 32b170b..0c6caf7 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyFor.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.lazy
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.SubcomposeLayout
 import androidx.ui.core.clipToBounds
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyForState.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyForState.kt
index 7c54067..7706d20 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyForState.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyForState.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.lazy
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.ExperimentalSubcomposeLayoutApi
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt
index 1799067..c8adc67 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Selectable.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.selection
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
 import androidx.ui.core.semantics.semantics
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Toggleable.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Toggleable.kt
index 6882fe6..9aa7b75 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Toggleable.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/selection/Toggleable.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation.selection
 
-import androidx.compose.Composable
-import androidx.compose.onCommit
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.composed
 import androidx.ui.core.gesture.pressIndicatorGestureFilter
diff --git a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/CornerSize.kt b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/CornerSize.kt
index 960bb95..f2a1b9c 100644
--- a/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/CornerSize.kt
+++ b/ui/ui-foundation/src/commonMain/kotlin/androidx/compose/foundation/shape/CornerSize.kt
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.shape
 
 import androidx.compose.ui.geometry.Size
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.util.annotation.FloatRange
diff --git a/ui/ui-geometry/api/0.1.0-dev16.txt b/ui/ui-geometry/api/0.1.0-dev16.txt
index aea918e..480fdc5 100644
--- a/ui/ui-geometry/api/0.1.0-dev16.txt
+++ b/ui/ui-geometry/api/0.1.0-dev16.txt
@@ -1,21 +1,21 @@
 // Signature format: 3.0
 package androidx.compose.ui.geometry {
 
-  @androidx.compose.Immutable public final class Offset {
+  @androidx.compose.runtime.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
     method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
-    method @androidx.compose.Stable public float getDistance();
-    method @androidx.compose.Stable public float getDistanceSquared();
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
+    method @androidx.compose.runtime.Stable public float getDistance();
+    method @androidx.compose.runtime.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
-    method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.runtime.Stable public boolean isValid();
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
     field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
@@ -42,8 +42,8 @@
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -120,23 +120,23 @@
     method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
-  @androidx.compose.Immutable public final inline class Radius {
+  @androidx.compose.runtime.Immutable public final inline class Radius {
     ctor public Radius();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float x = this.x, float y = this.y);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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 operator long minus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long unaryMinus-impl(long $this);
     field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
@@ -146,19 +146,19 @@
   }
 
   public final class RadiusKt {
-    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline long Radius(float x, float y = x);
+    method @androidx.compose.runtime.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Rect {
+  @androidx.compose.runtime.Immutable public final class Rect {
     ctor public Rect(float left, float top, float right, float bottom);
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
     method public boolean contains(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
     method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
     method public androidx.compose.ui.geometry.Offset getBottomCenter();
@@ -178,15 +178,15 @@
     method public androidx.compose.ui.geometry.Offset getTopLeft();
     method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public boolean isEmpty();
-    method @androidx.compose.Stable public boolean isFinite();
-    method @androidx.compose.Stable public boolean isInfinite();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.runtime.Stable public boolean isEmpty();
+    method @androidx.compose.runtime.Stable public boolean isFinite();
+    method @androidx.compose.runtime.Stable public boolean isInfinite();
     method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
     method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
@@ -195,10 +195,10 @@
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
     method public androidx.compose.ui.geometry.Rect getLargest();
     method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
@@ -208,40 +208,40 @@
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final inline class Size {
+  @androidx.compose.runtime.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
-    method @androidx.compose.Stable public static long getFlipped-impl(long $this);
+    method @androidx.compose.runtime.Stable public static long getFlipped-impl(long $this);
     method public static float getHeight-impl(long $this);
     method public static float getMaxDimension-impl(long $this);
     method public static float getMinDimension-impl(long $this);
     method public static float getWidth-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static boolean isEmpty-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static long truncDiv-impl(long $this, float operand);
     field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
@@ -258,12 +258,12 @@
   }
 
   public final class SizeKt {
-    method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
-    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/current.txt b/ui/ui-geometry/api/current.txt
index aea918e..480fdc5 100644
--- a/ui/ui-geometry/api/current.txt
+++ b/ui/ui-geometry/api/current.txt
@@ -1,21 +1,21 @@
 // Signature format: 3.0
 package androidx.compose.ui.geometry {
 
-  @androidx.compose.Immutable public final class Offset {
+  @androidx.compose.runtime.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
     method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
-    method @androidx.compose.Stable public float getDistance();
-    method @androidx.compose.Stable public float getDistanceSquared();
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
+    method @androidx.compose.runtime.Stable public float getDistance();
+    method @androidx.compose.runtime.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
-    method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.runtime.Stable public boolean isValid();
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
     field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
@@ -42,8 +42,8 @@
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -120,23 +120,23 @@
     method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
-  @androidx.compose.Immutable public final inline class Radius {
+  @androidx.compose.runtime.Immutable public final inline class Radius {
     ctor public Radius();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float x = this.x, float y = this.y);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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 operator long minus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long unaryMinus-impl(long $this);
     field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
@@ -146,19 +146,19 @@
   }
 
   public final class RadiusKt {
-    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline long Radius(float x, float y = x);
+    method @androidx.compose.runtime.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Rect {
+  @androidx.compose.runtime.Immutable public final class Rect {
     ctor public Rect(float left, float top, float right, float bottom);
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
     method public boolean contains(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
     method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
     method public androidx.compose.ui.geometry.Offset getBottomCenter();
@@ -178,15 +178,15 @@
     method public androidx.compose.ui.geometry.Offset getTopLeft();
     method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public boolean isEmpty();
-    method @androidx.compose.Stable public boolean isFinite();
-    method @androidx.compose.Stable public boolean isInfinite();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.runtime.Stable public boolean isEmpty();
+    method @androidx.compose.runtime.Stable public boolean isFinite();
+    method @androidx.compose.runtime.Stable public boolean isInfinite();
     method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
     method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
@@ -195,10 +195,10 @@
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
     method public androidx.compose.ui.geometry.Rect getLargest();
     method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
@@ -208,40 +208,40 @@
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final inline class Size {
+  @androidx.compose.runtime.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
-    method @androidx.compose.Stable public static long getFlipped-impl(long $this);
+    method @androidx.compose.runtime.Stable public static long getFlipped-impl(long $this);
     method public static float getHeight-impl(long $this);
     method public static float getMaxDimension-impl(long $this);
     method public static float getMinDimension-impl(long $this);
     method public static float getWidth-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static boolean isEmpty-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static long truncDiv-impl(long $this, float operand);
     field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
@@ -258,12 +258,12 @@
   }
 
   public final class SizeKt {
-    method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
-    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt
index aea918e..480fdc5 100644
--- a/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-geometry/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,21 +1,21 @@
 // Signature format: 3.0
 package androidx.compose.ui.geometry {
 
-  @androidx.compose.Immutable public final class Offset {
+  @androidx.compose.runtime.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
     method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
-    method @androidx.compose.Stable public float getDistance();
-    method @androidx.compose.Stable public float getDistanceSquared();
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
+    method @androidx.compose.runtime.Stable public float getDistance();
+    method @androidx.compose.runtime.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
-    method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.runtime.Stable public boolean isValid();
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
     field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
@@ -42,8 +42,8 @@
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -120,23 +120,23 @@
     method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
-  @androidx.compose.Immutable public final inline class Radius {
+  @androidx.compose.runtime.Immutable public final inline class Radius {
     ctor public Radius();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float x = this.x, float y = this.y);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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 operator long minus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long unaryMinus-impl(long $this);
     field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
@@ -146,19 +146,19 @@
   }
 
   public final class RadiusKt {
-    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline long Radius(float x, float y = x);
+    method @androidx.compose.runtime.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Rect {
+  @androidx.compose.runtime.Immutable public final class Rect {
     ctor public Rect(float left, float top, float right, float bottom);
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
     method public boolean contains(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
     method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
     method public androidx.compose.ui.geometry.Offset getBottomCenter();
@@ -178,15 +178,15 @@
     method public androidx.compose.ui.geometry.Offset getTopLeft();
     method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public boolean isEmpty();
-    method @androidx.compose.Stable public boolean isFinite();
-    method @androidx.compose.Stable public boolean isInfinite();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.runtime.Stable public boolean isEmpty();
+    method @androidx.compose.runtime.Stable public boolean isFinite();
+    method @androidx.compose.runtime.Stable public boolean isInfinite();
     method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
     method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
@@ -195,10 +195,10 @@
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
     method public androidx.compose.ui.geometry.Rect getLargest();
     method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
@@ -208,40 +208,40 @@
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final inline class Size {
+  @androidx.compose.runtime.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
-    method @androidx.compose.Stable public static long getFlipped-impl(long $this);
+    method @androidx.compose.runtime.Stable public static long getFlipped-impl(long $this);
     method public static float getHeight-impl(long $this);
     method public static float getMaxDimension-impl(long $this);
     method public static float getMinDimension-impl(long $this);
     method public static float getWidth-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static boolean isEmpty-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static long truncDiv-impl(long $this, float operand);
     field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
@@ -258,12 +258,12 @@
   }
 
   public final class SizeKt {
-    method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
-    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/public_plus_experimental_current.txt b/ui/ui-geometry/api/public_plus_experimental_current.txt
index aea918e..480fdc5 100644
--- a/ui/ui-geometry/api/public_plus_experimental_current.txt
+++ b/ui/ui-geometry/api/public_plus_experimental_current.txt
@@ -1,21 +1,21 @@
 // Signature format: 3.0
 package androidx.compose.ui.geometry {
 
-  @androidx.compose.Immutable public final class Offset {
+  @androidx.compose.runtime.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
     method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
-    method @androidx.compose.Stable public float getDistance();
-    method @androidx.compose.Stable public float getDistanceSquared();
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
+    method @androidx.compose.runtime.Stable public float getDistance();
+    method @androidx.compose.runtime.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
-    method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.runtime.Stable public boolean isValid();
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
     field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
@@ -42,8 +42,8 @@
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -120,23 +120,23 @@
     method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
-  @androidx.compose.Immutable public final inline class Radius {
+  @androidx.compose.runtime.Immutable public final inline class Radius {
     ctor public Radius();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float x = this.x, float y = this.y);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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 operator long minus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long unaryMinus-impl(long $this);
     field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
@@ -146,19 +146,19 @@
   }
 
   public final class RadiusKt {
-    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline long Radius(float x, float y = x);
+    method @androidx.compose.runtime.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Rect {
+  @androidx.compose.runtime.Immutable public final class Rect {
     ctor public Rect(float left, float top, float right, float bottom);
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
     method public boolean contains(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
     method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
     method public androidx.compose.ui.geometry.Offset getBottomCenter();
@@ -178,15 +178,15 @@
     method public androidx.compose.ui.geometry.Offset getTopLeft();
     method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public boolean isEmpty();
-    method @androidx.compose.Stable public boolean isFinite();
-    method @androidx.compose.Stable public boolean isInfinite();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.runtime.Stable public boolean isEmpty();
+    method @androidx.compose.runtime.Stable public boolean isFinite();
+    method @androidx.compose.runtime.Stable public boolean isInfinite();
     method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
     method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
@@ -195,10 +195,10 @@
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
     method public androidx.compose.ui.geometry.Rect getLargest();
     method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
@@ -208,40 +208,40 @@
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final inline class Size {
+  @androidx.compose.runtime.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
-    method @androidx.compose.Stable public static long getFlipped-impl(long $this);
+    method @androidx.compose.runtime.Stable public static long getFlipped-impl(long $this);
     method public static float getHeight-impl(long $this);
     method public static float getMaxDimension-impl(long $this);
     method public static float getMinDimension-impl(long $this);
     method public static float getWidth-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static boolean isEmpty-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static long truncDiv-impl(long $this, float operand);
     field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
@@ -258,12 +258,12 @@
   }
 
   public final class SizeKt {
-    method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
-    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/restricted_0.1.0-dev16.txt b/ui/ui-geometry/api/restricted_0.1.0-dev16.txt
index aea918e..480fdc5 100644
--- a/ui/ui-geometry/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-geometry/api/restricted_0.1.0-dev16.txt
@@ -1,21 +1,21 @@
 // Signature format: 3.0
 package androidx.compose.ui.geometry {
 
-  @androidx.compose.Immutable public final class Offset {
+  @androidx.compose.runtime.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
     method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
-    method @androidx.compose.Stable public float getDistance();
-    method @androidx.compose.Stable public float getDistanceSquared();
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
+    method @androidx.compose.runtime.Stable public float getDistance();
+    method @androidx.compose.runtime.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
-    method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.runtime.Stable public boolean isValid();
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
     field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
@@ -42,8 +42,8 @@
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -120,23 +120,23 @@
     method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
-  @androidx.compose.Immutable public final inline class Radius {
+  @androidx.compose.runtime.Immutable public final inline class Radius {
     ctor public Radius();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float x = this.x, float y = this.y);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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 operator long minus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long unaryMinus-impl(long $this);
     field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
@@ -146,19 +146,19 @@
   }
 
   public final class RadiusKt {
-    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline long Radius(float x, float y = x);
+    method @androidx.compose.runtime.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Rect {
+  @androidx.compose.runtime.Immutable public final class Rect {
     ctor public Rect(float left, float top, float right, float bottom);
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
     method public boolean contains(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
     method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
     method public androidx.compose.ui.geometry.Offset getBottomCenter();
@@ -178,15 +178,15 @@
     method public androidx.compose.ui.geometry.Offset getTopLeft();
     method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public boolean isEmpty();
-    method @androidx.compose.Stable public boolean isFinite();
-    method @androidx.compose.Stable public boolean isInfinite();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.runtime.Stable public boolean isEmpty();
+    method @androidx.compose.runtime.Stable public boolean isFinite();
+    method @androidx.compose.runtime.Stable public boolean isInfinite();
     method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
     method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
@@ -195,10 +195,10 @@
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
     method public androidx.compose.ui.geometry.Rect getLargest();
     method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
@@ -208,40 +208,40 @@
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final inline class Size {
+  @androidx.compose.runtime.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
-    method @androidx.compose.Stable public static long getFlipped-impl(long $this);
+    method @androidx.compose.runtime.Stable public static long getFlipped-impl(long $this);
     method public static float getHeight-impl(long $this);
     method public static float getMaxDimension-impl(long $this);
     method public static float getMinDimension-impl(long $this);
     method public static float getWidth-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static boolean isEmpty-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static long truncDiv-impl(long $this, float operand);
     field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
@@ -258,12 +258,12 @@
   }
 
   public final class SizeKt {
-    method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
-    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/api/restricted_current.txt b/ui/ui-geometry/api/restricted_current.txt
index aea918e..480fdc5 100644
--- a/ui/ui-geometry/api/restricted_current.txt
+++ b/ui/ui-geometry/api/restricted_current.txt
@@ -1,21 +1,21 @@
 // Signature format: 3.0
 package androidx.compose.ui.geometry {
 
-  @androidx.compose.Immutable public final class Offset {
+  @androidx.compose.runtime.Immutable public final class Offset {
     ctor public Offset(internal long packedValue);
     method public androidx.compose.ui.geometry.Offset copy(float x = this.x, float y = this.y);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
-    method @androidx.compose.Stable public float getDistance();
-    method @androidx.compose.Stable public float getDistanceSquared();
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Offset copy(long packedValue);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset div(float operand);
+    method @androidx.compose.runtime.Stable public float getDistance();
+    method @androidx.compose.runtime.Stable public float getDistanceSquared();
     method public float getX();
     method public float getY();
-    method @androidx.compose.Stable public boolean isValid();
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
-    method @androidx.compose.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
+    method @androidx.compose.runtime.Stable public boolean isValid();
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset rem(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset times(float operand);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.geometry.Offset unaryMinus();
     property public final float x;
     property public final float y;
     field public static final androidx.compose.ui.geometry.Offset.Companion Companion;
@@ -42,8 +42,8 @@
   }
 
   public final class OffsetKt {
-    method @androidx.compose.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset Offset(float x, float y);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset lerp(androidx.compose.ui.geometry.Offset start, androidx.compose.ui.geometry.Offset stop, float fraction);
   }
 
   public final class RRect {
@@ -120,23 +120,23 @@
     method public static androidx.compose.ui.geometry.RRect withRadius-LKZqP28(androidx.compose.ui.geometry.RRect, long radius);
   }
 
-  @androidx.compose.Immutable public final inline class Radius {
+  @androidx.compose.runtime.Immutable public final inline class Radius {
     ctor public Radius();
     method public static long constructor-impl(internal long packedValue);
     method public static long copy-impl(long $this, float x = this.x, float y = this.y);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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 operator long minus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-OoK_8eo(long $this, long other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static operator long minus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-OoK_8eo(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
     method public static long truncDiv-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long unaryMinus-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long unaryMinus-impl(long $this);
     field public static final androidx.compose.ui.geometry.Radius.Companion Companion;
   }
 
@@ -146,19 +146,19 @@
   }
 
   public final class RadiusKt {
-    method @androidx.compose.Stable public static inline long Radius(float x, float y = x);
-    method @androidx.compose.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline long Radius(float x, float y = x);
+    method @androidx.compose.runtime.Stable public static long lerp-dD-ENU0(long start, long stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Rect {
+  @androidx.compose.runtime.Immutable public final class Rect {
     ctor public Rect(float left, float top, float right, float bottom);
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
     method public boolean contains(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.geometry.Rect copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect deflate(float delta);
     method public androidx.compose.ui.geometry.Rect expandToInclude(androidx.compose.ui.geometry.Rect other);
     method public float getBottom();
     method public androidx.compose.ui.geometry.Offset getBottomCenter();
@@ -178,15 +178,15 @@
     method public androidx.compose.ui.geometry.Offset getTopLeft();
     method public androidx.compose.ui.geometry.Offset getTopRight();
     method public float getWidth();
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public boolean isEmpty();
-    method @androidx.compose.Stable public boolean isFinite();
-    method @androidx.compose.Stable public boolean isInfinite();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect inflate(float delta);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect intersect(androidx.compose.ui.geometry.Rect other);
+    method @androidx.compose.runtime.Stable public boolean isEmpty();
+    method @androidx.compose.runtime.Stable public boolean isFinite();
+    method @androidx.compose.runtime.Stable public boolean isInfinite();
     method public androidx.compose.ui.geometry.Rect join(androidx.compose.ui.geometry.Rect other);
     method public boolean overlaps(androidx.compose.ui.geometry.Rect other);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect shift(androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect translate(float translateX, float translateY);
     property public final float height;
     property public final float maxDimension;
     property public final float minDimension;
@@ -195,10 +195,10 @@
   }
 
   public static final class Rect.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
-    method @androidx.compose.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromCircle(androidx.compose.ui.geometry.Offset center, float radius);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTRB(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromLTWH(float left, float top, float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.geometry.Rect fromPoints(androidx.compose.ui.geometry.Offset a, androidx.compose.ui.geometry.Offset b);
     method public androidx.compose.ui.geometry.Rect getLargest();
     method public androidx.compose.ui.geometry.Rect getZero();
     method public float get_giantScalar();
@@ -208,40 +208,40 @@
   }
 
   public final class RectKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect lerp(androidx.compose.ui.geometry.Rect start, androidx.compose.ui.geometry.Rect stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final inline class Size {
+  @androidx.compose.runtime.Immutable public final inline class Size {
     ctor public Size();
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset bottomRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-impl(long $this, androidx.compose.ui.geometry.Offset origin = Offset.Zero);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset centerRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
     method public static long constructor-impl(internal long packedValue);
-    method @androidx.compose.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static boolean contains-impl(long $this, androidx.compose.ui.geometry.Offset offset);
     method public static long copy-impl(long $this, float width = this.width, float height = this.height);
-    method @androidx.compose.Stable public static operator long div-impl(long $this, float operand);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static operator long div-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
-    method @androidx.compose.Stable public static long getFlipped-impl(long $this);
+    method @androidx.compose.runtime.Stable public static long getFlipped-impl(long $this);
     method public static float getHeight-impl(long $this);
     method public static float getMaxDimension-impl(long $this);
     method public static float getMinDimension-impl(long $this);
     method public static float getWidth-impl(long $this);
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
-    method @androidx.compose.Stable public static boolean isEmpty-impl(long $this);
-    method @androidx.compose.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
-    method @androidx.compose.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
-    method @androidx.compose.Stable public static operator long rem-impl(long $this, float operand);
-    method @androidx.compose.Stable public static operator long times-impl(long $this, float operand);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static boolean isEmpty-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator long minus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus-uvyYCjk(long $this, long other);
+    method @androidx.compose.runtime.Stable public static operator long plus-impl(long $this, androidx.compose.ui.geometry.Offset other);
+    method @androidx.compose.runtime.Stable public static operator long rem-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static operator long times-impl(long $this, float operand);
     method public static String toString-impl(long $this);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
-    method @androidx.compose.Stable public static long truncDiv-impl(long $this, float operand);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topCenter-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topLeft-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset topRight-impl(long $this, androidx.compose.ui.geometry.Offset origin);
+    method @androidx.compose.runtime.Stable public static long truncDiv-impl(long $this, float operand);
     field public static final androidx.compose.ui.geometry.Size.Companion Companion;
   }
 
@@ -258,12 +258,12 @@
   }
 
   public final class SizeKt {
-    method @androidx.compose.Stable public static long Size(float width, float height);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
-    method @androidx.compose.Stable public static inline operator long times-2DtskRk(float, long size);
-    method @androidx.compose.Stable public static inline operator long times-B9jgaKk(double, long size);
-    method @androidx.compose.Stable public static inline operator long times-cEP68aU(int, long size);
-    method @androidx.compose.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static long Size(float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Size? lerp-3tf5JpU(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline operator long times-2DtskRk(float, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-B9jgaKk(double, long size);
+    method @androidx.compose.runtime.Stable public static inline operator long times-cEP68aU(int, long size);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect-uvyYCjk(long);
   }
 
 }
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt
index eaa00e3..a1f3b41 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Offset.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.geometry
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 import androidx.compose.ui.util.packFloats
 import androidx.compose.ui.util.toStringAsFixed
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt
index 0aa1907..25d0705 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Radius.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.geometry
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 import androidx.compose.ui.util.packFloats
 import androidx.compose.ui.util.toStringAsFixed
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt
index f2e1599..43c6b0b 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Rect.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.geometry
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 import androidx.compose.ui.util.toStringAsFixed
 import kotlin.math.absoluteValue
diff --git a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt
index 8152fc2..4919042 100644
--- a/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt
+++ b/ui/ui-geometry/src/commonMain/kotlin/androidx/compose/ui/geometry/Size.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.geometry
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 import androidx.compose.ui.util.packFloats
 import androidx.compose.ui.util.toStringAsFixed
diff --git a/ui/ui-graphics/api/0.1.0-dev16.txt b/ui/ui-graphics/api/0.1.0-dev16.txt
index 040b8db..65e100d 100644
--- a/ui/ui-graphics/api/0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/0.1.0-dev16.txt
@@ -221,17 +221,17 @@
     enum_constant public static final androidx.compose.ui.graphics.ClipOp intersect;
   }
 
-  @androidx.compose.Immutable public final inline class Color {
+  @androidx.compose.runtime.Immutable public final inline class Color {
     ctor public Color();
-    method @androidx.compose.Stable public static operator float component1-impl(long $this);
-    method @androidx.compose.Stable public static operator float component2-impl(long $this);
-    method @androidx.compose.Stable public static operator float component3-impl(long $this);
-    method @androidx.compose.Stable public static operator float component4-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component1-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component2-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component3-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component4-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
     method public static long constructor-impl(long value);
     method public static long convert-impl(long $this, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
-    method @androidx.compose.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getAlpha-impl(long $this);
     method public static float getBlue-impl(long $this);
@@ -239,7 +239,7 @@
     method public static float getGreen-impl(long $this);
     method public static float getRed-impl(long $this);
     method public long getValue();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
     method public static String toString-impl(long $this);
     field public static final androidx.compose.ui.graphics.Color.Companion Companion;
   }
@@ -273,30 +273,30 @@
     property public final long Yellow;
   }
 
-  @androidx.compose.Immutable public final class ColorFilter {
+  @androidx.compose.runtime.Immutable public final class ColorFilter {
     method public long component1();
     method public androidx.compose.ui.graphics.BlendMode component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
     method public androidx.compose.ui.graphics.BlendMode getBlendMode();
     method public long getColor();
     field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
   }
 
   public static final class ColorFilter.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method @androidx.compose.Stable public static long Color(@ColorInt int color);
-    method @androidx.compose.Stable public static long Color(long color);
-    method @androidx.compose.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
-    method @androidx.compose.Stable public static long compositeOver-6xK2E-Q(long, long background);
+    method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method @androidx.compose.runtime.Stable public static long Color(@ColorInt int color);
+    method @androidx.compose.runtime.Stable public static long Color(long color);
+    method @androidx.compose.runtime.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method @androidx.compose.runtime.Stable public static long compositeOver-6xK2E-Q(long, long background);
     method public static inline boolean isSet-8_81llA(long);
     method public static inline boolean isUnset-8_81llA(long);
-    method @androidx.compose.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
-    method @androidx.compose.Stable public static float luminance-8_81llA(long);
-    method @ColorInt @androidx.compose.Stable public static int toArgb-8_81llA(long);
+    method @androidx.compose.runtime.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
+    method @androidx.compose.runtime.Stable public static float luminance-8_81llA(long);
+    method @ColorInt @androidx.compose.runtime.Stable public static int toArgb-8_81llA(long);
     method public static inline long useOrElse-iYUlWp8(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
   }
 
@@ -312,7 +312,7 @@
   public final class Float16Kt {
   }
 
-  @Deprecated @androidx.compose.InternalComposeApi public final class GraphicsFactory {
+  @Deprecated @androidx.compose.runtime.InternalComposeApi public final class GraphicsFactory {
     method @Deprecated public kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.InternalCanvasHolder> getCanvasHolder();
     method @Deprecated public kotlin.reflect.KFunction<androidx.compose.ui.graphics.Canvas> getImageCanvas();
     method @Deprecated public kotlin.jvm.functions.Function1<android.graphics.Canvas,androidx.compose.ui.graphics.Canvas> getNativeCanvas();
@@ -374,7 +374,7 @@
     method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageAsset, int startX = 0, int startY = 0, int width = this.width, int height = this.height, int[] buffer = null(width * height), int bufferOffset = 0, int stride = width);
   }
 
-  @androidx.compose.InternalComposeApi public interface InternalCanvasHolder {
+  @androidx.compose.runtime.InternalComposeApi public interface InternalCanvasHolder {
     method public androidx.compose.ui.graphics.Canvas getCanvas();
     method public android.graphics.Canvas getInternalCanvas();
     method public void setInternalCanvas(android.graphics.Canvas p);
@@ -575,11 +575,11 @@
     method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.compose.ui.graphics.TileMode tileMode = androidx.compose.ui.graphics.TileMode.Clamp);
   }
 
-  @androidx.compose.Immutable public final class Shadow {
+  @androidx.compose.runtime.Immutable public final class Shadow {
     method public long component1();
     method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
     method public androidx.compose.ui.geometry.Offset getOffset();
@@ -592,10 +592,10 @@
   }
 
   public final class ShadowKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
   }
 
-  @androidx.compose.Immutable public interface Shape {
+  @androidx.compose.runtime.Immutable public interface Shape {
     method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
diff --git a/ui/ui-graphics/api/current.txt b/ui/ui-graphics/api/current.txt
index 040b8db..65e100d 100644
--- a/ui/ui-graphics/api/current.txt
+++ b/ui/ui-graphics/api/current.txt
@@ -221,17 +221,17 @@
     enum_constant public static final androidx.compose.ui.graphics.ClipOp intersect;
   }
 
-  @androidx.compose.Immutable public final inline class Color {
+  @androidx.compose.runtime.Immutable public final inline class Color {
     ctor public Color();
-    method @androidx.compose.Stable public static operator float component1-impl(long $this);
-    method @androidx.compose.Stable public static operator float component2-impl(long $this);
-    method @androidx.compose.Stable public static operator float component3-impl(long $this);
-    method @androidx.compose.Stable public static operator float component4-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component1-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component2-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component3-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component4-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
     method public static long constructor-impl(long value);
     method public static long convert-impl(long $this, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
-    method @androidx.compose.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getAlpha-impl(long $this);
     method public static float getBlue-impl(long $this);
@@ -239,7 +239,7 @@
     method public static float getGreen-impl(long $this);
     method public static float getRed-impl(long $this);
     method public long getValue();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
     method public static String toString-impl(long $this);
     field public static final androidx.compose.ui.graphics.Color.Companion Companion;
   }
@@ -273,30 +273,30 @@
     property public final long Yellow;
   }
 
-  @androidx.compose.Immutable public final class ColorFilter {
+  @androidx.compose.runtime.Immutable public final class ColorFilter {
     method public long component1();
     method public androidx.compose.ui.graphics.BlendMode component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
     method public androidx.compose.ui.graphics.BlendMode getBlendMode();
     method public long getColor();
     field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
   }
 
   public static final class ColorFilter.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method @androidx.compose.Stable public static long Color(@ColorInt int color);
-    method @androidx.compose.Stable public static long Color(long color);
-    method @androidx.compose.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
-    method @androidx.compose.Stable public static long compositeOver-6xK2E-Q(long, long background);
+    method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method @androidx.compose.runtime.Stable public static long Color(@ColorInt int color);
+    method @androidx.compose.runtime.Stable public static long Color(long color);
+    method @androidx.compose.runtime.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method @androidx.compose.runtime.Stable public static long compositeOver-6xK2E-Q(long, long background);
     method public static inline boolean isSet-8_81llA(long);
     method public static inline boolean isUnset-8_81llA(long);
-    method @androidx.compose.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
-    method @androidx.compose.Stable public static float luminance-8_81llA(long);
-    method @ColorInt @androidx.compose.Stable public static int toArgb-8_81llA(long);
+    method @androidx.compose.runtime.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
+    method @androidx.compose.runtime.Stable public static float luminance-8_81llA(long);
+    method @ColorInt @androidx.compose.runtime.Stable public static int toArgb-8_81llA(long);
     method public static inline long useOrElse-iYUlWp8(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
   }
 
@@ -312,7 +312,7 @@
   public final class Float16Kt {
   }
 
-  @Deprecated @androidx.compose.InternalComposeApi public final class GraphicsFactory {
+  @Deprecated @androidx.compose.runtime.InternalComposeApi public final class GraphicsFactory {
     method @Deprecated public kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.InternalCanvasHolder> getCanvasHolder();
     method @Deprecated public kotlin.reflect.KFunction<androidx.compose.ui.graphics.Canvas> getImageCanvas();
     method @Deprecated public kotlin.jvm.functions.Function1<android.graphics.Canvas,androidx.compose.ui.graphics.Canvas> getNativeCanvas();
@@ -374,7 +374,7 @@
     method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageAsset, int startX = 0, int startY = 0, int width = this.width, int height = this.height, int[] buffer = null(width * height), int bufferOffset = 0, int stride = width);
   }
 
-  @androidx.compose.InternalComposeApi public interface InternalCanvasHolder {
+  @androidx.compose.runtime.InternalComposeApi public interface InternalCanvasHolder {
     method public androidx.compose.ui.graphics.Canvas getCanvas();
     method public android.graphics.Canvas getInternalCanvas();
     method public void setInternalCanvas(android.graphics.Canvas p);
@@ -575,11 +575,11 @@
     method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.compose.ui.graphics.TileMode tileMode = androidx.compose.ui.graphics.TileMode.Clamp);
   }
 
-  @androidx.compose.Immutable public final class Shadow {
+  @androidx.compose.runtime.Immutable public final class Shadow {
     method public long component1();
     method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
     method public androidx.compose.ui.geometry.Offset getOffset();
@@ -592,10 +592,10 @@
   }
 
   public final class ShadowKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
   }
 
-  @androidx.compose.Immutable public interface Shape {
+  @androidx.compose.runtime.Immutable public interface Shape {
     method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
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 040b8db..65e100d 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
@@ -221,17 +221,17 @@
     enum_constant public static final androidx.compose.ui.graphics.ClipOp intersect;
   }
 
-  @androidx.compose.Immutable public final inline class Color {
+  @androidx.compose.runtime.Immutable public final inline class Color {
     ctor public Color();
-    method @androidx.compose.Stable public static operator float component1-impl(long $this);
-    method @androidx.compose.Stable public static operator float component2-impl(long $this);
-    method @androidx.compose.Stable public static operator float component3-impl(long $this);
-    method @androidx.compose.Stable public static operator float component4-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component1-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component2-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component3-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component4-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
     method public static long constructor-impl(long value);
     method public static long convert-impl(long $this, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
-    method @androidx.compose.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getAlpha-impl(long $this);
     method public static float getBlue-impl(long $this);
@@ -239,7 +239,7 @@
     method public static float getGreen-impl(long $this);
     method public static float getRed-impl(long $this);
     method public long getValue();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
     method public static String toString-impl(long $this);
     field public static final androidx.compose.ui.graphics.Color.Companion Companion;
   }
@@ -273,30 +273,30 @@
     property public final long Yellow;
   }
 
-  @androidx.compose.Immutable public final class ColorFilter {
+  @androidx.compose.runtime.Immutable public final class ColorFilter {
     method public long component1();
     method public androidx.compose.ui.graphics.BlendMode component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
     method public androidx.compose.ui.graphics.BlendMode getBlendMode();
     method public long getColor();
     field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
   }
 
   public static final class ColorFilter.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method @androidx.compose.Stable public static long Color(@ColorInt int color);
-    method @androidx.compose.Stable public static long Color(long color);
-    method @androidx.compose.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
-    method @androidx.compose.Stable public static long compositeOver-6xK2E-Q(long, long background);
+    method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method @androidx.compose.runtime.Stable public static long Color(@ColorInt int color);
+    method @androidx.compose.runtime.Stable public static long Color(long color);
+    method @androidx.compose.runtime.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method @androidx.compose.runtime.Stable public static long compositeOver-6xK2E-Q(long, long background);
     method public static inline boolean isSet-8_81llA(long);
     method public static inline boolean isUnset-8_81llA(long);
-    method @androidx.compose.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
-    method @androidx.compose.Stable public static float luminance-8_81llA(long);
-    method @ColorInt @androidx.compose.Stable public static int toArgb-8_81llA(long);
+    method @androidx.compose.runtime.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
+    method @androidx.compose.runtime.Stable public static float luminance-8_81llA(long);
+    method @ColorInt @androidx.compose.runtime.Stable public static int toArgb-8_81llA(long);
     method public static inline long useOrElse-iYUlWp8(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
   }
 
@@ -312,7 +312,7 @@
   public final class Float16Kt {
   }
 
-  @Deprecated @androidx.compose.InternalComposeApi public final class GraphicsFactory {
+  @Deprecated @androidx.compose.runtime.InternalComposeApi public final class GraphicsFactory {
     method @Deprecated public kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.InternalCanvasHolder> getCanvasHolder();
     method @Deprecated public kotlin.reflect.KFunction<androidx.compose.ui.graphics.Canvas> getImageCanvas();
     method @Deprecated public kotlin.jvm.functions.Function1<android.graphics.Canvas,androidx.compose.ui.graphics.Canvas> getNativeCanvas();
@@ -374,7 +374,7 @@
     method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageAsset, int startX = 0, int startY = 0, int width = this.width, int height = this.height, int[] buffer = null(width * height), int bufferOffset = 0, int stride = width);
   }
 
-  @androidx.compose.InternalComposeApi public interface InternalCanvasHolder {
+  @androidx.compose.runtime.InternalComposeApi public interface InternalCanvasHolder {
     method public androidx.compose.ui.graphics.Canvas getCanvas();
     method public android.graphics.Canvas getInternalCanvas();
     method public void setInternalCanvas(android.graphics.Canvas p);
@@ -575,11 +575,11 @@
     method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.compose.ui.graphics.TileMode tileMode = androidx.compose.ui.graphics.TileMode.Clamp);
   }
 
-  @androidx.compose.Immutable public final class Shadow {
+  @androidx.compose.runtime.Immutable public final class Shadow {
     method public long component1();
     method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
     method public androidx.compose.ui.geometry.Offset getOffset();
@@ -592,10 +592,10 @@
   }
 
   public final class ShadowKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
   }
 
-  @androidx.compose.Immutable public interface Shape {
+  @androidx.compose.runtime.Immutable public interface Shape {
     method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
diff --git a/ui/ui-graphics/api/public_plus_experimental_current.txt b/ui/ui-graphics/api/public_plus_experimental_current.txt
index 040b8db..65e100d 100644
--- a/ui/ui-graphics/api/public_plus_experimental_current.txt
+++ b/ui/ui-graphics/api/public_plus_experimental_current.txt
@@ -221,17 +221,17 @@
     enum_constant public static final androidx.compose.ui.graphics.ClipOp intersect;
   }
 
-  @androidx.compose.Immutable public final inline class Color {
+  @androidx.compose.runtime.Immutable public final inline class Color {
     ctor public Color();
-    method @androidx.compose.Stable public static operator float component1-impl(long $this);
-    method @androidx.compose.Stable public static operator float component2-impl(long $this);
-    method @androidx.compose.Stable public static operator float component3-impl(long $this);
-    method @androidx.compose.Stable public static operator float component4-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component1-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component2-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component3-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component4-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
     method public static long constructor-impl(long value);
     method public static long convert-impl(long $this, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
-    method @androidx.compose.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getAlpha-impl(long $this);
     method public static float getBlue-impl(long $this);
@@ -239,7 +239,7 @@
     method public static float getGreen-impl(long $this);
     method public static float getRed-impl(long $this);
     method public long getValue();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
     method public static String toString-impl(long $this);
     field public static final androidx.compose.ui.graphics.Color.Companion Companion;
   }
@@ -273,30 +273,30 @@
     property public final long Yellow;
   }
 
-  @androidx.compose.Immutable public final class ColorFilter {
+  @androidx.compose.runtime.Immutable public final class ColorFilter {
     method public long component1();
     method public androidx.compose.ui.graphics.BlendMode component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
     method public androidx.compose.ui.graphics.BlendMode getBlendMode();
     method public long getColor();
     field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
   }
 
   public static final class ColorFilter.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method @androidx.compose.Stable public static long Color(@ColorInt int color);
-    method @androidx.compose.Stable public static long Color(long color);
-    method @androidx.compose.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
-    method @androidx.compose.Stable public static long compositeOver-6xK2E-Q(long, long background);
+    method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method @androidx.compose.runtime.Stable public static long Color(@ColorInt int color);
+    method @androidx.compose.runtime.Stable public static long Color(long color);
+    method @androidx.compose.runtime.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method @androidx.compose.runtime.Stable public static long compositeOver-6xK2E-Q(long, long background);
     method public static inline boolean isSet-8_81llA(long);
     method public static inline boolean isUnset-8_81llA(long);
-    method @androidx.compose.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
-    method @androidx.compose.Stable public static float luminance-8_81llA(long);
-    method @ColorInt @androidx.compose.Stable public static int toArgb-8_81llA(long);
+    method @androidx.compose.runtime.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
+    method @androidx.compose.runtime.Stable public static float luminance-8_81llA(long);
+    method @ColorInt @androidx.compose.runtime.Stable public static int toArgb-8_81llA(long);
     method public static inline long useOrElse-iYUlWp8(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
   }
 
@@ -312,7 +312,7 @@
   public final class Float16Kt {
   }
 
-  @Deprecated @androidx.compose.InternalComposeApi public final class GraphicsFactory {
+  @Deprecated @androidx.compose.runtime.InternalComposeApi public final class GraphicsFactory {
     method @Deprecated public kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.InternalCanvasHolder> getCanvasHolder();
     method @Deprecated public kotlin.reflect.KFunction<androidx.compose.ui.graphics.Canvas> getImageCanvas();
     method @Deprecated public kotlin.jvm.functions.Function1<android.graphics.Canvas,androidx.compose.ui.graphics.Canvas> getNativeCanvas();
@@ -374,7 +374,7 @@
     method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageAsset, int startX = 0, int startY = 0, int width = this.width, int height = this.height, int[] buffer = null(width * height), int bufferOffset = 0, int stride = width);
   }
 
-  @androidx.compose.InternalComposeApi public interface InternalCanvasHolder {
+  @androidx.compose.runtime.InternalComposeApi public interface InternalCanvasHolder {
     method public androidx.compose.ui.graphics.Canvas getCanvas();
     method public android.graphics.Canvas getInternalCanvas();
     method public void setInternalCanvas(android.graphics.Canvas p);
@@ -575,11 +575,11 @@
     method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.compose.ui.graphics.TileMode tileMode = androidx.compose.ui.graphics.TileMode.Clamp);
   }
 
-  @androidx.compose.Immutable public final class Shadow {
+  @androidx.compose.runtime.Immutable public final class Shadow {
     method public long component1();
     method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
     method public androidx.compose.ui.geometry.Offset getOffset();
@@ -592,10 +592,10 @@
   }
 
   public final class ShadowKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
   }
 
-  @androidx.compose.Immutable public interface Shape {
+  @androidx.compose.runtime.Immutable public interface Shape {
     method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
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 a8964c4..190462e 100644
--- a/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-graphics/api/restricted_0.1.0-dev16.txt
@@ -254,17 +254,17 @@
     enum_constant public static final androidx.compose.ui.graphics.ClipOp intersect;
   }
 
-  @androidx.compose.Immutable public final inline class Color {
+  @androidx.compose.runtime.Immutable public final inline class Color {
     ctor public Color();
-    method @androidx.compose.Stable public static operator float component1-impl(long $this);
-    method @androidx.compose.Stable public static operator float component2-impl(long $this);
-    method @androidx.compose.Stable public static operator float component3-impl(long $this);
-    method @androidx.compose.Stable public static operator float component4-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component1-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component2-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component3-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component4-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
     method public static long constructor-impl(long value);
     method public static long convert-impl(long $this, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
-    method @androidx.compose.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getAlpha-impl(long $this);
     method public static float getBlue-impl(long $this);
@@ -272,7 +272,7 @@
     method public static float getGreen-impl(long $this);
     method public static float getRed-impl(long $this);
     method public long getValue();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
     method public static String toString-impl(long $this);
     field public static final androidx.compose.ui.graphics.Color.Companion Companion;
   }
@@ -306,30 +306,30 @@
     property public final long Yellow;
   }
 
-  @androidx.compose.Immutable public final class ColorFilter {
+  @androidx.compose.runtime.Immutable public final class ColorFilter {
     method public long component1();
     method public androidx.compose.ui.graphics.BlendMode component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
     method public androidx.compose.ui.graphics.BlendMode getBlendMode();
     method public long getColor();
     field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
   }
 
   public static final class ColorFilter.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method @androidx.compose.Stable public static long Color(@ColorInt int color);
-    method @androidx.compose.Stable public static long Color(long color);
-    method @androidx.compose.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
-    method @androidx.compose.Stable public static long compositeOver-6xK2E-Q(long, long background);
+    method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method @androidx.compose.runtime.Stable public static long Color(@ColorInt int color);
+    method @androidx.compose.runtime.Stable public static long Color(long color);
+    method @androidx.compose.runtime.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method @androidx.compose.runtime.Stable public static long compositeOver-6xK2E-Q(long, long background);
     method public static inline boolean isSet-8_81llA(long);
     method public static inline boolean isUnset-8_81llA(long);
-    method @androidx.compose.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
-    method @androidx.compose.Stable public static float luminance-8_81llA(long);
-    method @ColorInt @androidx.compose.Stable public static int toArgb-8_81llA(long);
+    method @androidx.compose.runtime.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
+    method @androidx.compose.runtime.Stable public static float luminance-8_81llA(long);
+    method @ColorInt @androidx.compose.runtime.Stable public static int toArgb-8_81llA(long);
     method public static inline long useOrElse-iYUlWp8(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
   }
 
@@ -345,7 +345,7 @@
   public final class Float16Kt {
   }
 
-  @Deprecated @androidx.compose.InternalComposeApi public final class GraphicsFactory {
+  @Deprecated @androidx.compose.runtime.InternalComposeApi public final class GraphicsFactory {
     method @Deprecated public kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.InternalCanvasHolder> getCanvasHolder();
     method @Deprecated public kotlin.reflect.KFunction<androidx.compose.ui.graphics.Canvas> getImageCanvas();
     method @Deprecated public kotlin.jvm.functions.Function1<android.graphics.Canvas,androidx.compose.ui.graphics.Canvas> getNativeCanvas();
@@ -407,7 +407,7 @@
     method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageAsset, int startX = 0, int startY = 0, int width = this.width, int height = this.height, int[] buffer = null(width * height), int bufferOffset = 0, int stride = width);
   }
 
-  @androidx.compose.InternalComposeApi public interface InternalCanvasHolder {
+  @androidx.compose.runtime.InternalComposeApi public interface InternalCanvasHolder {
     method public androidx.compose.ui.graphics.Canvas getCanvas();
     method public android.graphics.Canvas getInternalCanvas();
     method public void setInternalCanvas(android.graphics.Canvas p);
@@ -608,11 +608,11 @@
     method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.compose.ui.graphics.TileMode tileMode = androidx.compose.ui.graphics.TileMode.Clamp);
   }
 
-  @androidx.compose.Immutable public final class Shadow {
+  @androidx.compose.runtime.Immutable public final class Shadow {
     method public long component1();
     method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
     method public androidx.compose.ui.geometry.Offset getOffset();
@@ -625,10 +625,10 @@
   }
 
   public final class ShadowKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
   }
 
-  @androidx.compose.Immutable public interface Shape {
+  @androidx.compose.runtime.Immutable public interface Shape {
     method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
diff --git a/ui/ui-graphics/api/restricted_current.txt b/ui/ui-graphics/api/restricted_current.txt
index a8964c4..190462e 100644
--- a/ui/ui-graphics/api/restricted_current.txt
+++ b/ui/ui-graphics/api/restricted_current.txt
@@ -254,17 +254,17 @@
     enum_constant public static final androidx.compose.ui.graphics.ClipOp intersect;
   }
 
-  @androidx.compose.Immutable public final inline class Color {
+  @androidx.compose.runtime.Immutable public final inline class Color {
     ctor public Color();
-    method @androidx.compose.Stable public static operator float component1-impl(long $this);
-    method @androidx.compose.Stable public static operator float component2-impl(long $this);
-    method @androidx.compose.Stable public static operator float component3-impl(long $this);
-    method @androidx.compose.Stable public static operator float component4-impl(long $this);
-    method @androidx.compose.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component1-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component2-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component3-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator float component4-impl(long $this);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.graphics.colorspace.ColorSpace component5-impl(long $this);
     method public static long constructor-impl(long value);
     method public static long convert-impl(long $this, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace);
-    method @androidx.compose.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Stable public static long copy-impl(long $this, float alpha = this.alpha, float red = this.red, float green = this.green, float blue = this.blue);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getAlpha-impl(long $this);
     method public static float getBlue-impl(long $this);
@@ -272,7 +272,7 @@
     method public static float getGreen-impl(long $this);
     method public static float getRed-impl(long $this);
     method public long getValue();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
     method public static String toString-impl(long $this);
     field public static final androidx.compose.ui.graphics.Color.Companion Companion;
   }
@@ -306,30 +306,30 @@
     property public final long Yellow;
   }
 
-  @androidx.compose.Immutable public final class ColorFilter {
+  @androidx.compose.runtime.Immutable public final class ColorFilter {
     method public long component1();
     method public androidx.compose.ui.graphics.BlendMode component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.ColorFilter copy-aamYUWA(long color, androidx.compose.ui.graphics.BlendMode blendMode);
     method public androidx.compose.ui.graphics.BlendMode getBlendMode();
     method public long getColor();
     field public static final androidx.compose.ui.graphics.ColorFilter.Companion Companion;
   }
 
   public static final class ColorFilter.Companion {
-    method @androidx.compose.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.graphics.ColorFilter tint-8_81llA(long color);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
-    method @androidx.compose.Stable public static long Color(@ColorInt int color);
-    method @androidx.compose.Stable public static long Color(long color);
-    method @androidx.compose.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
-    method @androidx.compose.Stable public static long compositeOver-6xK2E-Q(long, long background);
+    method @androidx.compose.runtime.Stable public static long Color(float red, float green, float blue, float alpha = 1f, androidx.compose.ui.graphics.colorspace.ColorSpace colorSpace = ColorSpaces.Srgb);
+    method @androidx.compose.runtime.Stable public static long Color(@ColorInt int color);
+    method @androidx.compose.runtime.Stable public static long Color(long color);
+    method @androidx.compose.runtime.Stable public static long Color(@IntRange(from=0, to=255) int red, @IntRange(from=0, to=255) int green, @IntRange(from=0, to=255) int blue, @IntRange(from=0, to=255) int alpha = 0xFF);
+    method @androidx.compose.runtime.Stable public static long compositeOver-6xK2E-Q(long, long background);
     method public static inline boolean isSet-8_81llA(long);
     method public static inline boolean isUnset-8_81llA(long);
-    method @androidx.compose.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
-    method @androidx.compose.Stable public static float luminance-8_81llA(long);
-    method @ColorInt @androidx.compose.Stable public static int toArgb-8_81llA(long);
+    method @androidx.compose.runtime.Stable public static long lerp-m18UwgE(long start, long stop, @FloatRange(from=0.0, to=1.0) float fraction);
+    method @androidx.compose.runtime.Stable public static float luminance-8_81llA(long);
+    method @ColorInt @androidx.compose.runtime.Stable public static int toArgb-8_81llA(long);
     method public static inline long useOrElse-iYUlWp8(long, kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.Color> block);
   }
 
@@ -345,7 +345,7 @@
   public final class Float16Kt {
   }
 
-  @Deprecated @androidx.compose.InternalComposeApi public final class GraphicsFactory {
+  @Deprecated @androidx.compose.runtime.InternalComposeApi public final class GraphicsFactory {
     method @Deprecated public kotlin.jvm.functions.Function0<androidx.compose.ui.graphics.InternalCanvasHolder> getCanvasHolder();
     method @Deprecated public kotlin.reflect.KFunction<androidx.compose.ui.graphics.Canvas> getImageCanvas();
     method @Deprecated public kotlin.jvm.functions.Function1<android.graphics.Canvas,androidx.compose.ui.graphics.Canvas> getNativeCanvas();
@@ -407,7 +407,7 @@
     method public static androidx.compose.ui.graphics.PixelMap toPixelMap(androidx.compose.ui.graphics.ImageAsset, int startX = 0, int startY = 0, int width = this.width, int height = this.height, int[] buffer = null(width * height), int bufferOffset = 0, int stride = width);
   }
 
-  @androidx.compose.InternalComposeApi public interface InternalCanvasHolder {
+  @androidx.compose.runtime.InternalComposeApi public interface InternalCanvasHolder {
     method public androidx.compose.ui.graphics.Canvas getCanvas();
     method public android.graphics.Canvas getInternalCanvas();
     method public void setInternalCanvas(android.graphics.Canvas p);
@@ -608,11 +608,11 @@
     method public static android.graphics.Shader RadialGradientShader(androidx.compose.ui.geometry.Offset center, float radius, java.util.List<androidx.compose.ui.graphics.Color> colors, java.util.List<java.lang.Float>? colorStops = null, androidx.compose.ui.graphics.TileMode tileMode = androidx.compose.ui.graphics.TileMode.Clamp);
   }
 
-  @androidx.compose.Immutable public final class Shadow {
+  @androidx.compose.runtime.Immutable public final class Shadow {
     method public long component1();
     method public androidx.compose.ui.geometry.Offset component2();
     method public float component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.graphics.Shadow copy-vQQzcCI(long color, androidx.compose.ui.geometry.Offset offset, float blurRadius);
     method public float getBlurRadius();
     method public long getColor();
     method public androidx.compose.ui.geometry.Offset getOffset();
@@ -625,10 +625,10 @@
   }
 
   public final class ShadowKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.graphics.Shadow lerp(androidx.compose.ui.graphics.Shadow start, androidx.compose.ui.graphics.Shadow stop, float fraction);
   }
 
-  @androidx.compose.Immutable public interface Shape {
+  @androidx.compose.runtime.Immutable public interface Shape {
     method public androidx.compose.ui.graphics.Outline createOutline-lwCvPpU(long size, androidx.compose.ui.unit.Density density);
   }
 
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 257dae6..32e6dff 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.graphics.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Canvas
 import androidx.compose.ui.graphics.Color
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 c9f52b5..7e817ce 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.graphics
 
 import android.graphics.Matrix
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.graphics.vectormath.Matrix4
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPaint.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPaint.kt
index a530346..d5de43eb 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPaint.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPaint.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics
 
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 
 actual typealias NativePaint = android.graphics.Paint
 
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.kt
index 79a11c2..2f42f76 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidPath.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics
 
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.RRect
 import androidx.compose.ui.geometry.Rect
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.kt
index 8e54c6b..9e25ebf 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/AndroidShader.kt
@@ -19,7 +19,7 @@
 import android.graphics.BitmapShader
 import android.graphics.LinearGradient
 import android.graphics.RadialGradient
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 import androidx.compose.ui.geometry.Offset
 
 actual typealias Shader = android.graphics.Shader
diff --git a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/GraphicsFactory.kt b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/GraphicsFactory.kt
index 20e89ef..b418fac 100644
--- a/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/GraphicsFactory.kt
+++ b/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/GraphicsFactory.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.graphics
 
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 
 // TODO(b/160916667): temporary workaround for ui-desktop. remove when full support of MPP will
 //  be in-place
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Color.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Color.kt
index cfaa803..4ca88ce 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Color.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Color.kt
@@ -21,8 +21,8 @@
 import androidx.compose.ui.util.annotation.FloatRange
 import androidx.compose.ui.util.annotation.IntRange
 import androidx.compose.ui.util.annotation.Size
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.graphics.colorspace.ColorModel
 import androidx.compose.ui.graphics.colorspace.ColorSpace
 import androidx.compose.ui.graphics.colorspace.ColorSpaces
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt
index 6f18a4b..92b6cb8 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/ColorFilter.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.graphics
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 
 /**
  * Creates a color filter that applies the blend mode given as the second
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 8861c63..0759d58 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
@@ -18,7 +18,7 @@
 
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.geometry.toRect
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Density
 
 /**
diff --git a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shadow.kt b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shadow.kt
index 10df40d..55df384 100644
--- a/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shadow.kt
+++ b/ui/ui-graphics/src/commonMain/kotlin/androidx/compose/ui/graphics/Shadow.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.graphics
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.lerp
 import androidx.compose.ui.util.lerp
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 f7f77ea4..bb01608 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.graphics
 
 import androidx.compose.ui.geometry.Size
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.unit.Density
 
 /**
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 855f93b..a265117 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
@@ -75,7 +75,8 @@
             "androidx.ui.graphics" to "androidx.compose.ui.graphics",
             "androidx.ui.unit" to "androidx.compose.ui.unit",
             "androidx.ui.util" to "androidx.compose.ui.util",
-            "androidx.ui.material" to "androidx.compose.material"
+            "androidx.ui.material" to "androidx.compose.material",
+            "androidx.compose.plugins" to "androidx.compose.compiler.plugins"
         )
 
         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 6fb5e4d..939d0b0 100644
--- a/ui/ui-layout/api/0.1.0-dev16.txt
+++ b/ui/ui-layout/api/0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.foundation.layout {
 
-  @androidx.compose.Immutable public final class AbsoluteArrangement {
+  @androidx.compose.runtime.Immutable public final class AbsoluteArrangement {
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement INSTANCE;
   }
 
@@ -36,11 +36,11 @@
   }
 
   public final class AlignmentLineKt {
-    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);
+    method @Deprecated @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Arrangement {
     field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
   }
 
@@ -111,14 +111,14 @@
   }
 
   public final class ColumnKt {
-    method @androidx.compose.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class ColumnScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class ColumnScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.ColumnScope INSTANCE;
   }
 
@@ -227,8 +227,8 @@
   }
 
   public final class ConstraintLayoutKt {
-    method @androidx.compose.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
-    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 @androidx.compose.runtime.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.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-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
@@ -266,7 +266,7 @@
     method public operator androidx.compose.foundation.layout.ConstrainedLayoutReference component9();
   }
 
-  @androidx.compose.Immutable public interface ConstraintSet {
+  @androidx.compose.runtime.Immutable public interface ConstraintSet {
     method public void applyTo(androidx.compose.foundation.layout.State state, java.util.List<? extends androidx.ui.core.Measurable> measurables);
   }
 
@@ -457,7 +457,7 @@
     method public androidx.compose.foundation.layout.ConstrainedLayoutReference createRefFor(Object id);
   }
 
-  @androidx.compose.Immutable public abstract sealed class CrossAxisAlignment {
+  @androidx.compose.runtime.Immutable public abstract sealed class CrossAxisAlignment {
     field public static final androidx.compose.foundation.layout.CrossAxisAlignment.Companion Companion;
   }
 
@@ -496,12 +496,12 @@
   public static interface Dimension.MinCoercible extends androidx.compose.foundation.layout.Dimension {
   }
 
-  @androidx.compose.Immutable public final class DpConstraints {
+  @androidx.compose.runtime.Immutable public final class DpConstraints {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.runtime.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,22 +510,22 @@
   }
 
   public static final class DpConstraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
+    method @androidx.compose.runtime.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);
     method public static boolean getHasFixedHeight(androidx.compose.foundation.layout.DpConstraints);
     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-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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,16 +540,16 @@
   }
 
   public final class FlowKt {
-    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);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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 {
+  @androidx.compose.runtime.Immutable public final class InnerPadding {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
+    method @androidx.compose.runtime.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();
@@ -557,12 +557,12 @@
   }
 
   public final class IntrinsicKt {
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
   }
 
   public enum IntrinsicSize {
@@ -573,7 +573,7 @@
   }
 
   public final class LayoutAspectRatioKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
   }
 
   public final class LayoutDirectionsKt {
@@ -582,45 +582,45 @@
   }
 
   public final class LayoutOffsetKt {
-    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));
+    method @androidx.compose.runtime.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.runtime.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.runtime.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    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 @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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-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-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-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-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);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
   }
 
   public enum MainAxisAlignment {
@@ -638,14 +638,14 @@
   }
 
   public final class RowKt {
-    method @androidx.compose.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class RowScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class RowScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.RowScope INSTANCE;
   }
 
@@ -657,17 +657,17 @@
   }
 
   public final class SpacerKt {
-    method @androidx.compose.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
+    method @androidx.compose.runtime.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
   public final class StackKt {
-    method @androidx.compose.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class StackScope {
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class StackScope {
     ctor public StackScope();
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
diff --git a/ui/ui-layout/api/current.txt b/ui/ui-layout/api/current.txt
index 6fb5e4d..939d0b0 100644
--- a/ui/ui-layout/api/current.txt
+++ b/ui/ui-layout/api/current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.foundation.layout {
 
-  @androidx.compose.Immutable public final class AbsoluteArrangement {
+  @androidx.compose.runtime.Immutable public final class AbsoluteArrangement {
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement INSTANCE;
   }
 
@@ -36,11 +36,11 @@
   }
 
   public final class AlignmentLineKt {
-    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);
+    method @Deprecated @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Arrangement {
     field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
   }
 
@@ -111,14 +111,14 @@
   }
 
   public final class ColumnKt {
-    method @androidx.compose.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class ColumnScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class ColumnScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.ColumnScope INSTANCE;
   }
 
@@ -227,8 +227,8 @@
   }
 
   public final class ConstraintLayoutKt {
-    method @androidx.compose.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
-    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 @androidx.compose.runtime.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.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-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
@@ -266,7 +266,7 @@
     method public operator androidx.compose.foundation.layout.ConstrainedLayoutReference component9();
   }
 
-  @androidx.compose.Immutable public interface ConstraintSet {
+  @androidx.compose.runtime.Immutable public interface ConstraintSet {
     method public void applyTo(androidx.compose.foundation.layout.State state, java.util.List<? extends androidx.ui.core.Measurable> measurables);
   }
 
@@ -457,7 +457,7 @@
     method public androidx.compose.foundation.layout.ConstrainedLayoutReference createRefFor(Object id);
   }
 
-  @androidx.compose.Immutable public abstract sealed class CrossAxisAlignment {
+  @androidx.compose.runtime.Immutable public abstract sealed class CrossAxisAlignment {
     field public static final androidx.compose.foundation.layout.CrossAxisAlignment.Companion Companion;
   }
 
@@ -496,12 +496,12 @@
   public static interface Dimension.MinCoercible extends androidx.compose.foundation.layout.Dimension {
   }
 
-  @androidx.compose.Immutable public final class DpConstraints {
+  @androidx.compose.runtime.Immutable public final class DpConstraints {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.runtime.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,22 +510,22 @@
   }
 
   public static final class DpConstraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
+    method @androidx.compose.runtime.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);
     method public static boolean getHasFixedHeight(androidx.compose.foundation.layout.DpConstraints);
     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-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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,16 +540,16 @@
   }
 
   public final class FlowKt {
-    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);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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 {
+  @androidx.compose.runtime.Immutable public final class InnerPadding {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
+    method @androidx.compose.runtime.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();
@@ -557,12 +557,12 @@
   }
 
   public final class IntrinsicKt {
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
   }
 
   public enum IntrinsicSize {
@@ -573,7 +573,7 @@
   }
 
   public final class LayoutAspectRatioKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
   }
 
   public final class LayoutDirectionsKt {
@@ -582,45 +582,45 @@
   }
 
   public final class LayoutOffsetKt {
-    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));
+    method @androidx.compose.runtime.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.runtime.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.runtime.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    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 @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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-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-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-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-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);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
   }
 
   public enum MainAxisAlignment {
@@ -638,14 +638,14 @@
   }
 
   public final class RowKt {
-    method @androidx.compose.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class RowScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class RowScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.RowScope INSTANCE;
   }
 
@@ -657,17 +657,17 @@
   }
 
   public final class SpacerKt {
-    method @androidx.compose.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
+    method @androidx.compose.runtime.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
   public final class StackKt {
-    method @androidx.compose.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class StackScope {
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class StackScope {
     ctor public StackScope();
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
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 6fb5e4d..939d0b0 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
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.foundation.layout {
 
-  @androidx.compose.Immutable public final class AbsoluteArrangement {
+  @androidx.compose.runtime.Immutable public final class AbsoluteArrangement {
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement INSTANCE;
   }
 
@@ -36,11 +36,11 @@
   }
 
   public final class AlignmentLineKt {
-    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);
+    method @Deprecated @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Arrangement {
     field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
   }
 
@@ -111,14 +111,14 @@
   }
 
   public final class ColumnKt {
-    method @androidx.compose.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class ColumnScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class ColumnScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.ColumnScope INSTANCE;
   }
 
@@ -227,8 +227,8 @@
   }
 
   public final class ConstraintLayoutKt {
-    method @androidx.compose.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
-    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 @androidx.compose.runtime.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.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-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
@@ -266,7 +266,7 @@
     method public operator androidx.compose.foundation.layout.ConstrainedLayoutReference component9();
   }
 
-  @androidx.compose.Immutable public interface ConstraintSet {
+  @androidx.compose.runtime.Immutable public interface ConstraintSet {
     method public void applyTo(androidx.compose.foundation.layout.State state, java.util.List<? extends androidx.ui.core.Measurable> measurables);
   }
 
@@ -457,7 +457,7 @@
     method public androidx.compose.foundation.layout.ConstrainedLayoutReference createRefFor(Object id);
   }
 
-  @androidx.compose.Immutable public abstract sealed class CrossAxisAlignment {
+  @androidx.compose.runtime.Immutable public abstract sealed class CrossAxisAlignment {
     field public static final androidx.compose.foundation.layout.CrossAxisAlignment.Companion Companion;
   }
 
@@ -496,12 +496,12 @@
   public static interface Dimension.MinCoercible extends androidx.compose.foundation.layout.Dimension {
   }
 
-  @androidx.compose.Immutable public final class DpConstraints {
+  @androidx.compose.runtime.Immutable public final class DpConstraints {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.runtime.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,22 +510,22 @@
   }
 
   public static final class DpConstraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
+    method @androidx.compose.runtime.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);
     method public static boolean getHasFixedHeight(androidx.compose.foundation.layout.DpConstraints);
     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-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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,16 +540,16 @@
   }
 
   public final class FlowKt {
-    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);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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 {
+  @androidx.compose.runtime.Immutable public final class InnerPadding {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
+    method @androidx.compose.runtime.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();
@@ -557,12 +557,12 @@
   }
 
   public final class IntrinsicKt {
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
   }
 
   public enum IntrinsicSize {
@@ -573,7 +573,7 @@
   }
 
   public final class LayoutAspectRatioKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
   }
 
   public final class LayoutDirectionsKt {
@@ -582,45 +582,45 @@
   }
 
   public final class LayoutOffsetKt {
-    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));
+    method @androidx.compose.runtime.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.runtime.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.runtime.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    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 @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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-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-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-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-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);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
   }
 
   public enum MainAxisAlignment {
@@ -638,14 +638,14 @@
   }
 
   public final class RowKt {
-    method @androidx.compose.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class RowScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class RowScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.RowScope INSTANCE;
   }
 
@@ -657,17 +657,17 @@
   }
 
   public final class SpacerKt {
-    method @androidx.compose.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
+    method @androidx.compose.runtime.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
   public final class StackKt {
-    method @androidx.compose.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class StackScope {
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class StackScope {
     ctor public StackScope();
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
diff --git a/ui/ui-layout/api/public_plus_experimental_current.txt b/ui/ui-layout/api/public_plus_experimental_current.txt
index 6fb5e4d..939d0b0 100644
--- a/ui/ui-layout/api/public_plus_experimental_current.txt
+++ b/ui/ui-layout/api/public_plus_experimental_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.foundation.layout {
 
-  @androidx.compose.Immutable public final class AbsoluteArrangement {
+  @androidx.compose.runtime.Immutable public final class AbsoluteArrangement {
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement INSTANCE;
   }
 
@@ -36,11 +36,11 @@
   }
 
   public final class AlignmentLineKt {
-    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);
+    method @Deprecated @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Arrangement {
     field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
   }
 
@@ -111,14 +111,14 @@
   }
 
   public final class ColumnKt {
-    method @androidx.compose.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class ColumnScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class ColumnScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.ColumnScope INSTANCE;
   }
 
@@ -227,8 +227,8 @@
   }
 
   public final class ConstraintLayoutKt {
-    method @androidx.compose.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
-    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 @androidx.compose.runtime.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.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-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
@@ -266,7 +266,7 @@
     method public operator androidx.compose.foundation.layout.ConstrainedLayoutReference component9();
   }
 
-  @androidx.compose.Immutable public interface ConstraintSet {
+  @androidx.compose.runtime.Immutable public interface ConstraintSet {
     method public void applyTo(androidx.compose.foundation.layout.State state, java.util.List<? extends androidx.ui.core.Measurable> measurables);
   }
 
@@ -457,7 +457,7 @@
     method public androidx.compose.foundation.layout.ConstrainedLayoutReference createRefFor(Object id);
   }
 
-  @androidx.compose.Immutable public abstract sealed class CrossAxisAlignment {
+  @androidx.compose.runtime.Immutable public abstract sealed class CrossAxisAlignment {
     field public static final androidx.compose.foundation.layout.CrossAxisAlignment.Companion Companion;
   }
 
@@ -496,12 +496,12 @@
   public static interface Dimension.MinCoercible extends androidx.compose.foundation.layout.Dimension {
   }
 
-  @androidx.compose.Immutable public final class DpConstraints {
+  @androidx.compose.runtime.Immutable public final class DpConstraints {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.runtime.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,22 +510,22 @@
   }
 
   public static final class DpConstraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
+    method @androidx.compose.runtime.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);
     method public static boolean getHasFixedHeight(androidx.compose.foundation.layout.DpConstraints);
     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-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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,16 +540,16 @@
   }
 
   public final class FlowKt {
-    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);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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 {
+  @androidx.compose.runtime.Immutable public final class InnerPadding {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
+    method @androidx.compose.runtime.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();
@@ -557,12 +557,12 @@
   }
 
   public final class IntrinsicKt {
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
   }
 
   public enum IntrinsicSize {
@@ -573,7 +573,7 @@
   }
 
   public final class LayoutAspectRatioKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
   }
 
   public final class LayoutDirectionsKt {
@@ -582,45 +582,45 @@
   }
 
   public final class LayoutOffsetKt {
-    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));
+    method @androidx.compose.runtime.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.runtime.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.runtime.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    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 @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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-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-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-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-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);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
   }
 
   public enum MainAxisAlignment {
@@ -638,14 +638,14 @@
   }
 
   public final class RowKt {
-    method @androidx.compose.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class RowScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class RowScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.RowScope INSTANCE;
   }
 
@@ -657,17 +657,17 @@
   }
 
   public final class SpacerKt {
-    method @androidx.compose.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
+    method @androidx.compose.runtime.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
   public final class StackKt {
-    method @androidx.compose.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class StackScope {
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class StackScope {
     ctor public StackScope();
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
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 e083d0c..577517a 100644
--- a/ui/ui-layout/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-layout/api/restricted_0.1.0-dev16.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.foundation.layout {
 
-  @androidx.compose.Immutable public final class AbsoluteArrangement {
+  @androidx.compose.runtime.Immutable public final class AbsoluteArrangement {
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement INSTANCE;
   }
 
@@ -36,11 +36,11 @@
   }
 
   public final class AlignmentLineKt {
-    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);
+    method @Deprecated @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Arrangement {
     field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
   }
 
@@ -111,16 +111,16 @@
   }
 
   public final class ColumnKt {
-    method @androidx.compose.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
-    method @androidx.compose.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks columnMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, androidx.ui.core.Alignment.Horizontal horizontalGravity);
+    method @androidx.compose.runtime.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks columnMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, androidx.ui.core.Alignment.Horizontal horizontalGravity);
     field @kotlin.PublishedApi internal static final androidx.ui.core.LayoutNode.MeasureBlocks DefaultColumnMeasureBlocks;
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class ColumnScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class ColumnScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.ColumnScope INSTANCE;
   }
 
@@ -229,8 +229,8 @@
   }
 
   public final class ConstraintLayoutKt {
-    method @androidx.compose.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
-    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 @androidx.compose.runtime.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.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-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
@@ -268,7 +268,7 @@
     method public operator androidx.compose.foundation.layout.ConstrainedLayoutReference component9();
   }
 
-  @androidx.compose.Immutable public interface ConstraintSet {
+  @androidx.compose.runtime.Immutable public interface ConstraintSet {
     method public void applyTo(androidx.compose.foundation.layout.State state, java.util.List<? extends androidx.ui.core.Measurable> measurables);
   }
 
@@ -459,7 +459,7 @@
     method public androidx.compose.foundation.layout.ConstrainedLayoutReference createRefFor(Object id);
   }
 
-  @androidx.compose.Immutable public abstract sealed class CrossAxisAlignment {
+  @androidx.compose.runtime.Immutable public abstract sealed class CrossAxisAlignment {
     field public static final androidx.compose.foundation.layout.CrossAxisAlignment.Companion Companion;
   }
 
@@ -498,12 +498,12 @@
   public static interface Dimension.MinCoercible extends androidx.compose.foundation.layout.Dimension {
   }
 
-  @androidx.compose.Immutable public final class DpConstraints {
+  @androidx.compose.runtime.Immutable public final class DpConstraints {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.runtime.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,22 +512,22 @@
   }
 
   public static final class DpConstraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
+    method @androidx.compose.runtime.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);
     method public static boolean getHasFixedHeight(androidx.compose.foundation.layout.DpConstraints);
     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-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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,16 +542,16 @@
   }
 
   public final class FlowKt {
-    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);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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 {
+  @androidx.compose.runtime.Immutable public final class InnerPadding {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
+    method @androidx.compose.runtime.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();
@@ -559,12 +559,12 @@
   }
 
   public final class IntrinsicKt {
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
   }
 
   public enum IntrinsicSize {
@@ -575,7 +575,7 @@
   }
 
   public final class LayoutAspectRatioKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
   }
 
   public final class LayoutDirectionsKt {
@@ -584,45 +584,45 @@
   }
 
   public final class LayoutOffsetKt {
-    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));
+    method @androidx.compose.runtime.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.runtime.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.runtime.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    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 @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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-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-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-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-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);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
   }
 
   public enum MainAxisAlignment {
@@ -641,16 +641,16 @@
   }
 
   public final class RowKt {
-    method @androidx.compose.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @androidx.compose.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, androidx.ui.core.Alignment.Vertical verticalGravity);
+    method @androidx.compose.runtime.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, androidx.ui.core.Alignment.Vertical verticalGravity);
     field @kotlin.PublishedApi internal static final androidx.ui.core.LayoutNode.MeasureBlocks DefaultRowMeasureBlocks;
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class RowScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class RowScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.RowScope INSTANCE;
   }
 
@@ -662,17 +662,17 @@
   }
 
   public final class SpacerKt {
-    method @androidx.compose.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
+    method @androidx.compose.runtime.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
   public final class StackKt {
-    method @androidx.compose.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class StackScope {
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class StackScope {
     ctor public StackScope();
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
diff --git a/ui/ui-layout/api/restricted_current.txt b/ui/ui-layout/api/restricted_current.txt
index e083d0c..577517a 100644
--- a/ui/ui-layout/api/restricted_current.txt
+++ b/ui/ui-layout/api/restricted_current.txt
@@ -1,7 +1,7 @@
 // Signature format: 3.0
 package androidx.compose.foundation.layout {
 
-  @androidx.compose.Immutable public final class AbsoluteArrangement {
+  @androidx.compose.runtime.Immutable public final class AbsoluteArrangement {
     field public static final androidx.compose.foundation.layout.AbsoluteArrangement INSTANCE;
   }
 
@@ -36,11 +36,11 @@
   }
 
   public final class AlignmentLineKt {
-    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);
+    method @Deprecated @androidx.compose.runtime.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.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Arrangement {
     field public static final androidx.compose.foundation.layout.Arrangement INSTANCE;
   }
 
@@ -111,16 +111,16 @@
   }
 
   public final class ColumnKt {
-    method @androidx.compose.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
-    method @androidx.compose.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks columnMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, androidx.ui.core.Alignment.Horizontal horizontalGravity);
+    method @androidx.compose.runtime.Composable public static inline void Column(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement = Arrangement.Top, androidx.ui.core.Alignment.Horizontal horizontalGravity = Alignment.Start, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ColumnScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks columnMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Vertical verticalArrangement, androidx.ui.core.Alignment.Horizontal horizontalGravity);
     field @kotlin.PublishedApi internal static final androidx.ui.core.LayoutNode.MeasureBlocks DefaultColumnMeasureBlocks;
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class ColumnScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class ColumnScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.VerticalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.ColumnScope INSTANCE;
   }
 
@@ -229,8 +229,8 @@
   }
 
   public final class ConstraintLayoutKt {
-    method @androidx.compose.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
-    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 @androidx.compose.runtime.Composable public static void ConstraintLayout(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.ConstraintLayoutScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.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-mVwPmw8(androidx.compose.foundation.layout.Dimension.Coercible, float dp);
@@ -268,7 +268,7 @@
     method public operator androidx.compose.foundation.layout.ConstrainedLayoutReference component9();
   }
 
-  @androidx.compose.Immutable public interface ConstraintSet {
+  @androidx.compose.runtime.Immutable public interface ConstraintSet {
     method public void applyTo(androidx.compose.foundation.layout.State state, java.util.List<? extends androidx.ui.core.Measurable> measurables);
   }
 
@@ -459,7 +459,7 @@
     method public androidx.compose.foundation.layout.ConstrainedLayoutReference createRefFor(Object id);
   }
 
-  @androidx.compose.Immutable public abstract sealed class CrossAxisAlignment {
+  @androidx.compose.runtime.Immutable public abstract sealed class CrossAxisAlignment {
     field public static final androidx.compose.foundation.layout.CrossAxisAlignment.Companion Companion;
   }
 
@@ -498,12 +498,12 @@
   public static interface Dimension.MinCoercible extends androidx.compose.foundation.layout.Dimension {
   }
 
-  @androidx.compose.Immutable public final class DpConstraints {
+  @androidx.compose.runtime.Immutable public final class DpConstraints {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.DpConstraints copy-ZmiikuI(float minWidth, float maxWidth, float minHeight, float maxHeight);
+    method @androidx.compose.runtime.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,22 +512,22 @@
   }
 
   public static final class DpConstraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixed-ioHfwGI(float width, float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedHeight-0680j_4(float height);
+    method @androidx.compose.runtime.Stable public androidx.compose.foundation.layout.DpConstraints fixedWidth-0680j_4(float width);
   }
 
   public final class DpConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(androidx.compose.ui.unit.Density, androidx.compose.foundation.layout.DpConstraints dpConstraints);
+    method @androidx.compose.runtime.Stable public static androidx.compose.foundation.layout.DpConstraints DpConstraints(androidx.compose.ui.unit.Density, androidx.compose.ui.unit.Constraints constraints);
+    method @androidx.compose.runtime.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);
     method public static boolean getHasFixedHeight(androidx.compose.foundation.layout.DpConstraints);
     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-Dnn0juw(androidx.compose.foundation.layout.DpConstraints, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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,16 +542,16 @@
   }
 
   public final class FlowKt {
-    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);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Composable 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 {
+  @androidx.compose.runtime.Immutable public final class InnerPadding {
     method public float component1();
     method public float component2();
     method public float component3();
     method public float component4();
-    method @androidx.compose.Immutable public androidx.compose.foundation.layout.InnerPadding copy-ZmiikuI(float start, float top, float end, float bottom);
+    method @androidx.compose.runtime.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();
@@ -559,12 +559,12 @@
   }
 
   public final class IntrinsicKt {
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @Deprecated @androidx.compose.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
-    method @androidx.compose.Stable @androidx.compose.foundation.layout.ExperimentalLayout public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MaxIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicHeight(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @Deprecated @androidx.compose.runtime.Composable public static void MinIntrinsicWidth(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
+    method @androidx.compose.foundation.layout.ExperimentalLayout @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidth(androidx.ui.core.Modifier, androidx.compose.foundation.layout.IntrinsicSize intrinsicSize);
   }
 
   public enum IntrinsicSize {
@@ -575,7 +575,7 @@
   }
 
   public final class LayoutAspectRatioKt {
-    method @androidx.compose.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier aspectRatio(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float ratio);
   }
 
   public final class LayoutDirectionsKt {
@@ -584,45 +584,45 @@
   }
 
   public final class LayoutOffsetKt {
-    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));
+    method @androidx.compose.runtime.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.runtime.State<java.lang.Float> x = mutableStateOf(0.0), androidx.compose.runtime.State<java.lang.Float> y = mutableStateOf(0.0));
   }
 
   public final class LayoutPaddingKt {
-    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 @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier padding-K6IzfrQ(androidx.ui.core.Modifier, float horizontal = 0.dp, float vertical = 0.dp);
+    method @androidx.compose.runtime.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-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-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-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-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);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier defaultMinSizeConstraints-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float minHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxHeight(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier fillMaxWidth(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier height-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier heightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeight-Zgi1SAs(androidx.ui.core.Modifier, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredHeightIn-K6IzfrQ(androidx.ui.core.Modifier, float minHeight = Dp.Unspecified, float maxHeight = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSize-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredSizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier preferredWidth-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier preferredWidthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-K6IzfrQ(androidx.ui.core.Modifier, float width, float height);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier size-Zgi1SAs(androidx.ui.core.Modifier, float size);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier sizeIn(androidx.ui.core.Modifier, androidx.compose.foundation.layout.DpConstraints constraints);
+    method @androidx.compose.runtime.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.runtime.Stable public static androidx.ui.core.Modifier width-Zgi1SAs(androidx.ui.core.Modifier, float width);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier widthIn-K6IzfrQ(androidx.ui.core.Modifier, float minWidth = Dp.Unspecified, float maxWidth = Dp.Unspecified);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentHeight(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align = Alignment.CenterVertically);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentSize(androidx.ui.core.Modifier, androidx.ui.core.Alignment align = Alignment.Center);
+    method @androidx.compose.runtime.Stable public static androidx.ui.core.Modifier wrapContentWidth(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Horizontal align = Alignment.CenterHorizontally);
   }
 
   public enum MainAxisAlignment {
@@ -641,16 +641,16 @@
   }
 
   public final class RowKt {
-    method @androidx.compose.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
-    method @androidx.compose.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, androidx.ui.core.Alignment.Vertical verticalGravity);
+    method @androidx.compose.runtime.Composable public static inline void Row(androidx.ui.core.Modifier modifier = Modifier, androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement = Arrangement.Start, androidx.ui.core.Alignment.Vertical verticalGravity = Alignment.Top, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable @kotlin.PublishedApi internal static androidx.ui.core.LayoutNode.MeasureBlocks rowMeasureBlocks(androidx.compose.foundation.layout.Arrangement.Horizontal horizontalArrangement, androidx.ui.core.Alignment.Vertical verticalGravity);
     field @kotlin.PublishedApi internal static final androidx.ui.core.LayoutNode.MeasureBlocks DefaultRowMeasureBlocks;
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class RowScope {
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class RowScope {
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, androidx.ui.core.HorizontalAlignmentLine alignmentLine);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier alignWithSiblings(androidx.ui.core.Modifier, kotlin.jvm.functions.Function1<? super androidx.ui.core.Measured,java.lang.Integer> alignmentLineBlock);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment.Vertical align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier weight(androidx.ui.core.Modifier, @FloatRange(from=0.0, to=3.4E38, fromInclusive=false) float weight, boolean fill = true);
     field public static final androidx.compose.foundation.layout.RowScope INSTANCE;
   }
 
@@ -662,17 +662,17 @@
   }
 
   public final class SpacerKt {
-    method @androidx.compose.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
+    method @androidx.compose.runtime.Composable public static void Spacer(androidx.ui.core.Modifier modifier);
   }
 
   public final class StackKt {
-    method @androidx.compose.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void Stack(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.StackScope,kotlin.Unit> children);
   }
 
-  @androidx.compose.Immutable @androidx.compose.foundation.layout.LayoutScopeMarker public final class StackScope {
+  @androidx.compose.foundation.layout.LayoutScopeMarker @androidx.compose.runtime.Immutable public final class StackScope {
     ctor public StackScope();
-    method @androidx.compose.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
-    method @androidx.compose.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier gravity(androidx.ui.core.Modifier, androidx.ui.core.Alignment align);
+    method @androidx.compose.runtime.Stable public androidx.ui.core.Modifier matchParentSize(androidx.ui.core.Modifier);
   }
 
   public final class State extends androidx.constraintlayout.core.state.State {
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 7dacc13..2e3063f5 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.background
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ConstraintLayoutDemo.kt b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ConstraintLayoutDemo.kt
index 14b12fc..75f87b0 100644
--- a/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ConstraintLayoutDemo.kt
+++ b/ui/ui-layout/integration-tests/layout-demos/src/main/java/androidx/compose/foundation/layout/demos/ConstraintLayoutDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 /**
  * Simple ConstraintLayout demo
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 3a1aaa6..a8a8032 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Layout
 import androidx.compose.ui.unit.LayoutDirection
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 dfb3d86..e337538 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
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 16b9d7c..bfe3208 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.ui.graphics.Color
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 cbad93cf..797f8ea 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
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 10ad5c6..6f99dbb 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.layoutId
 import androidx.compose.foundation.Text
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 5a96261..922cc17 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.ui.graphics.Color
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 fc3be05..ca51f0b 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
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 b7237c8..fc4cd57 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.ui.core.gesture.tapGestureFilter
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 f7e1aa0..890a9ba 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
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 fcb67ba..ba8464e 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.relativePaddingFrom
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 152f9d3..e749872 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.ui.core.Modifier
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 dc9f2f6..f41dc82 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
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 3c536e7a..9ecbe61 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.ui.graphics.Color
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 b77d835..42202ad 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
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 cbe2405..e7ad504 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.Ref
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 b9bac27..3e33e8e 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
 import androidx.ui.core.Layout
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 4f1000d..ee946d9 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
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 fc8396a..0994c61 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
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 0fab7855..c33538e 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
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 2ec890b..2e4f874 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.ConfigurationAmbient
 import androidx.ui.core.Layout
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 86f4fd8..67c7d8d 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout
 
 import android.os.Build
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
 import androidx.ui.core.LayoutCoordinates
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 924090d..dc85302 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Dp
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 7b8ea35..eb4a5e3 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.layout
 
 import android.content.res.Resources
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Box
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.unit.Constraints
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 25baf84..1f3d67c 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
@@ -22,8 +22,8 @@
 import android.view.View
 import android.view.ViewGroup
 import android.view.ViewTreeObserver
-import androidx.compose.Composable
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Recomposer
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
 import androidx.ui.core.AndroidOwner
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 d76549b..26108d6 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
@@ -17,11 +17,11 @@
 package androidx.compose.foundation.layout
 
 import android.widget.FrameLayout
-import androidx.compose.Composable
-import androidx.compose.Recomposer
-import androidx.compose.State
-import androidx.compose.emptyContent
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.State
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Layout
 import androidx.ui.core.LayoutCoordinates
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 ba5bf69..d845e69 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
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 b4d3372..8ce4b35 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
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 65d3ab3..7d9e3ac 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
@@ -21,8 +21,8 @@
 import android.annotation.SuppressLint
 import android.util.Log
 import androidx.annotation.FloatRange
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.constraintlayout.core.state.ConstraintReference
 import androidx.constraintlayout.core.state.Dimension.SPREAD_DIMENSION
 import androidx.constraintlayout.core.state.Dimension.WRAP_DIMENSION
@@ -36,7 +36,7 @@
 import androidx.constraintlayout.core.widgets.ConstraintWidgetContainer
 import androidx.constraintlayout.core.widgets.Optimizer
 import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.foundation.text.FirstBaseline
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 c0562bbd..b8198b0 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.Stable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
 
 import androidx.ui.core.AlignmentLine
 import androidx.compose.ui.unit.Constraints
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt
index e286025..c29633c 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Column.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Stable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Alignment
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.Layout
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 2563039..d5e74b5 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.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 ebfb1c1..9286d7c 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
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 32f3973..7f051f5 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.Stable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
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 5042e296..9005812 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.IntrinsicMeasurable
 import androidx.ui.core.IntrinsicMeasureScope
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 67299a5..f35cda7 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
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Stable
-import androidx.compose.State
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.mutableStateOf
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.LayoutModifier
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 c235a1de..e8d7f27 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.LayoutDirection
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 b629bfb..d6d769a 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.Dp
diff --git a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt
index 9f64430..987e258 100644
--- a/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt
+++ b/ui/ui-layout/src/commonMain/kotlin/androidx/compose/foundation/layout/Row.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Stable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Alignment
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.HorizontalAlignmentLine
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 33b0c21..bc291cc 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
 import androidx.compose.ui.unit.Constraints
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 f814e0e..bdb8386 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
 import androidx.compose.ui.unit.hasFixedHeight
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 ef0a6dc..33f89c1 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
@@ -16,9 +16,9 @@
 
 package androidx.compose.foundation.layout
 
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
diff --git a/ui/ui-livedata/api/0.1.0-dev16.txt b/ui/ui-livedata/api/0.1.0-dev16.txt
index 84b4da4..d84ebdc 100644
--- a/ui/ui-livedata/api/0.1.0-dev16.txt
+++ b/ui/ui-livedata/api/0.1.0-dev16.txt
@@ -2,8 +2,8 @@
 package androidx.compose.runtime.livedata {
 
   public final class LiveDataAdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
   }
 
 }
diff --git a/ui/ui-livedata/api/current.txt b/ui/ui-livedata/api/current.txt
index 84b4da4..d84ebdc 100644
--- a/ui/ui-livedata/api/current.txt
+++ b/ui/ui-livedata/api/current.txt
@@ -2,8 +2,8 @@
 package androidx.compose.runtime.livedata {
 
   public final class LiveDataAdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
   }
 
 }
diff --git a/ui/ui-livedata/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-livedata/api/public_plus_experimental_0.1.0-dev16.txt
index 84b4da4..d84ebdc 100644
--- a/ui/ui-livedata/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-livedata/api/public_plus_experimental_0.1.0-dev16.txt
@@ -2,8 +2,8 @@
 package androidx.compose.runtime.livedata {
 
   public final class LiveDataAdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
   }
 
 }
diff --git a/ui/ui-livedata/api/public_plus_experimental_current.txt b/ui/ui-livedata/api/public_plus_experimental_current.txt
index 84b4da4..d84ebdc 100644
--- a/ui/ui-livedata/api/public_plus_experimental_current.txt
+++ b/ui/ui-livedata/api/public_plus_experimental_current.txt
@@ -2,8 +2,8 @@
 package androidx.compose.runtime.livedata {
 
   public final class LiveDataAdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
   }
 
 }
diff --git a/ui/ui-livedata/api/restricted_0.1.0-dev16.txt b/ui/ui-livedata/api/restricted_0.1.0-dev16.txt
index 84b4da4..d84ebdc 100644
--- a/ui/ui-livedata/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-livedata/api/restricted_0.1.0-dev16.txt
@@ -2,8 +2,8 @@
 package androidx.compose.runtime.livedata {
 
   public final class LiveDataAdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
   }
 
 }
diff --git a/ui/ui-livedata/api/restricted_current.txt b/ui/ui-livedata/api/restricted_current.txt
index 84b4da4..d84ebdc 100644
--- a/ui/ui-livedata/api/restricted_current.txt
+++ b/ui/ui-livedata/api/restricted_current.txt
@@ -2,8 +2,8 @@
 package androidx.compose.runtime.livedata {
 
   public final class LiveDataAdapterKt {
-    method @androidx.compose.Composable public static inline <T> androidx.compose.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> observeAsState(androidx.lifecycle.LiveData<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> observeAsState(androidx.lifecycle.LiveData<T>, R? initial);
   }
 
 }
diff --git a/ui/ui-livedata/samples/src/main/java/androidx/compose/runtime/livedata/samples/Samples.kt b/ui/ui-livedata/samples/src/main/java/androidx/compose/runtime/livedata/samples/Samples.kt
index cb55710..46fdcee 100644
--- a/ui/ui-livedata/samples/src/main/java/androidx/compose/runtime/livedata/samples/Samples.kt
+++ b/ui/ui-livedata/samples/src/main/java/androidx/compose/runtime/livedata/samples/Samples.kt
@@ -17,8 +17,8 @@
 package androidx.compose.runtime.livedata.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
 import androidx.lifecycle.LiveData
 import androidx.compose.foundation.Text
 import androidx.compose.runtime.livedata.observeAsState
diff --git a/ui/ui-livedata/src/androidTest/java/androidx/compose/runtime/livedata/LiveDataAdapterTest.kt b/ui/ui-livedata/src/androidTest/java/androidx/compose/runtime/livedata/LiveDataAdapterTest.kt
index 77a6c08..91e58f7 100644
--- a/ui/ui-livedata/src/androidTest/java/androidx/compose/runtime/livedata/LiveDataAdapterTest.kt
+++ b/ui/ui-livedata/src/androidTest/java/androidx/compose/runtime/livedata/LiveDataAdapterTest.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.runtime.livedata
 
-import androidx.compose.Providers
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.LifecycleRegistry
diff --git a/ui/ui-livedata/src/main/java/androidx/compose/runtime/livedata/LiveDataAdapter.kt b/ui/ui-livedata/src/main/java/androidx/compose/runtime/livedata/LiveDataAdapter.kt
index 47bf720..405cbb8 100644
--- a/ui/ui-livedata/src/main/java/androidx/compose/runtime/livedata/LiveDataAdapter.kt
+++ b/ui/ui-livedata/src/main/java/androidx/compose/runtime/livedata/LiveDataAdapter.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.runtime.livedata
 
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.onPreCommit
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.onPreCommit
+import androidx.compose.runtime.state
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.LiveData
diff --git a/ui/ui-material/api/0.1.0-dev16.txt b/ui/ui-material/api/0.1.0-dev16.txt
index ab2d0d7..d5b36d36 100644
--- a/ui/ui-material/api/0.1.0-dev16.txt
+++ b/ui/ui-material/api/0.1.0-dev16.txt
@@ -9,14 +9,14 @@
   }
 
   public final class AlertDialogKt {
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
   }
 
   public final class AppBarKt {
-    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.compose.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.compose.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,8 +28,8 @@
   }
 
   public final class BottomNavigationKt {
-    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.compose.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));
+    method @androidx.compose.runtime.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.compose.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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));
   }
 
   public final class ButtonConstants {
@@ -51,22 +51,22 @@
   }
 
   public final class ButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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.runtime.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-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);
+    method @androidx.compose.runtime.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 {
-    method @androidx.compose.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
-    method @androidx.compose.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
+    method @androidx.compose.runtime.Composable public static long contentColorFor-8_81llA(long color);
     method public static long contentColorFor-MlVJVp4(androidx.compose.material.ColorPalette, long color);
     method public static androidx.compose.material.ColorPalette darkColorPalette-T8B3sC8(long primary = Color(4290479868), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long background = Color(4279374354), long surface = Color(4279374354), long error = Color(4291782265), long onPrimary = Color.Black, long onSecondary = Color.Black, long onBackground = Color.White, long onSurface = Color.White, long onError = Color.Black);
     method public static androidx.compose.material.ColorPalette lightColorPalette-hW7iGhc(long primary = Color(4284612846), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long secondaryVariant = Color(4278290310), long background = Color.White, long surface = Color.White, long error = Color(4289724448), long onPrimary = Color.White, long onSecondary = Color.Black, long onBackground = Color.Black, long onSurface = Color.Black, long onError = Color.White);
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    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);
+    method @androidx.compose.runtime.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-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void BottomDrawerLayout-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void ModalDrawerLayout-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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 {
@@ -123,13 +123,13 @@
     enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
-  @androidx.compose.Immutable public interface Emphasis {
+  @androidx.compose.runtime.Immutable public interface Emphasis {
     method public long applyEmphasis-8_81llA(long color);
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
+    method @androidx.compose.runtime.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
   }
 
   public interface EmphasisLevels {
@@ -145,18 +145,18 @@
   }
 
   public final class FloatingActionButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
-    method @androidx.compose.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
-    method @androidx.compose.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class ListItemKt {
-    method @androidx.compose.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
-    method @androidx.compose.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+    method @androidx.compose.runtime.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
+    method @androidx.compose.runtime.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
   }
 
   public final class MaterialTheme {
@@ -170,17 +170,17 @@
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class MenuKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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);
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -190,10 +190,10 @@
   }
 
   public final class ProgressIndicatorKt {
-    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);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.runtime.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.runtime.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.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);
   }
 
   public final class RadioButtonConstants {
@@ -205,14 +205,14 @@
   }
 
   public final class RadioButtonKt {
-    method @androidx.compose.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+    method @androidx.compose.runtime.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
-  @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
-    method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+  @Deprecated @androidx.compose.runtime.Stable public final class RadioGroupScope {
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -227,12 +227,12 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-_B-Z858(androidx.compose.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.runtime.Composable public static void Scaffold-_B-Z858(androidx.compose.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.compose.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.compose.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);
   }
 
-  @androidx.compose.Stable public final class ScaffoldState {
+  @androidx.compose.runtime.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
@@ -265,41 +265,41 @@
   }
 
   public final class SliderKt {
-    method @androidx.compose.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
   }
 
   public final class SnackbarKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
-    method @androidx.compose.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
+    method @androidx.compose.runtime.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
   }
 
   public final class TabKt {
-    method @androidx.compose.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
-    method @androidx.compose.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
+    method @androidx.compose.runtime.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function0<kotlin.Unit> divider = { Divider(1.dp, contentColor().copy(DividerOpacity)) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
   }
 
   public final class TabRow {
-    method @androidx.compose.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
-    method @androidx.compose.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    method @androidx.compose.runtime.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
+    method @androidx.compose.runtime.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
     field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
-  @androidx.compose.Immutable public static final class TabRow.TabPosition {
+  @androidx.compose.runtime.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -316,13 +316,13 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
-  @androidx.compose.Immutable public final class Typography {
+  @androidx.compose.runtime.Immutable public final class Typography {
     ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle component1();
     method public androidx.compose.ui.text.TextStyle component10();
@@ -337,7 +337,7 @@
     method public androidx.compose.ui.text.TextStyle component7();
     method public androidx.compose.ui.text.TextStyle component8();
     method public androidx.compose.ui.text.TextStyle component9();
-    method @androidx.compose.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
     method public androidx.compose.ui.text.TextStyle getButton();
@@ -370,12 +370,12 @@
   public final class RippleAnimationKt {
   }
 
-  @androidx.compose.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
+  @androidx.compose.runtime.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.runtime.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
@@ -383,12 +383,12 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
-    method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.runtime.Composable public long defaultColor();
+    method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index ab2d0d7..d5b36d36 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -9,14 +9,14 @@
   }
 
   public final class AlertDialogKt {
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
   }
 
   public final class AppBarKt {
-    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.compose.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.compose.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,8 +28,8 @@
   }
 
   public final class BottomNavigationKt {
-    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.compose.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));
+    method @androidx.compose.runtime.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.compose.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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));
   }
 
   public final class ButtonConstants {
@@ -51,22 +51,22 @@
   }
 
   public final class ButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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.runtime.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-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);
+    method @androidx.compose.runtime.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 {
-    method @androidx.compose.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
-    method @androidx.compose.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
+    method @androidx.compose.runtime.Composable public static long contentColorFor-8_81llA(long color);
     method public static long contentColorFor-MlVJVp4(androidx.compose.material.ColorPalette, long color);
     method public static androidx.compose.material.ColorPalette darkColorPalette-T8B3sC8(long primary = Color(4290479868), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long background = Color(4279374354), long surface = Color(4279374354), long error = Color(4291782265), long onPrimary = Color.Black, long onSecondary = Color.Black, long onBackground = Color.White, long onSurface = Color.White, long onError = Color.Black);
     method public static androidx.compose.material.ColorPalette lightColorPalette-hW7iGhc(long primary = Color(4284612846), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long secondaryVariant = Color(4278290310), long background = Color.White, long surface = Color.White, long error = Color(4289724448), long onPrimary = Color.White, long onSecondary = Color.Black, long onBackground = Color.Black, long onSurface = Color.Black, long onError = Color.White);
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    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);
+    method @androidx.compose.runtime.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-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void BottomDrawerLayout-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void ModalDrawerLayout-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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 {
@@ -123,13 +123,13 @@
     enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
-  @androidx.compose.Immutable public interface Emphasis {
+  @androidx.compose.runtime.Immutable public interface Emphasis {
     method public long applyEmphasis-8_81llA(long color);
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
+    method @androidx.compose.runtime.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
   }
 
   public interface EmphasisLevels {
@@ -145,18 +145,18 @@
   }
 
   public final class FloatingActionButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
-    method @androidx.compose.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
-    method @androidx.compose.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class ListItemKt {
-    method @androidx.compose.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
-    method @androidx.compose.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+    method @androidx.compose.runtime.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
+    method @androidx.compose.runtime.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
   }
 
   public final class MaterialTheme {
@@ -170,17 +170,17 @@
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class MenuKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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);
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -190,10 +190,10 @@
   }
 
   public final class ProgressIndicatorKt {
-    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);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.runtime.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.runtime.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.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);
   }
 
   public final class RadioButtonConstants {
@@ -205,14 +205,14 @@
   }
 
   public final class RadioButtonKt {
-    method @androidx.compose.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+    method @androidx.compose.runtime.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
-  @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
-    method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+  @Deprecated @androidx.compose.runtime.Stable public final class RadioGroupScope {
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -227,12 +227,12 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-_B-Z858(androidx.compose.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.runtime.Composable public static void Scaffold-_B-Z858(androidx.compose.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.compose.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.compose.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);
   }
 
-  @androidx.compose.Stable public final class ScaffoldState {
+  @androidx.compose.runtime.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
@@ -265,41 +265,41 @@
   }
 
   public final class SliderKt {
-    method @androidx.compose.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
   }
 
   public final class SnackbarKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
-    method @androidx.compose.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
+    method @androidx.compose.runtime.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
   }
 
   public final class TabKt {
-    method @androidx.compose.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
-    method @androidx.compose.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
+    method @androidx.compose.runtime.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function0<kotlin.Unit> divider = { Divider(1.dp, contentColor().copy(DividerOpacity)) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
   }
 
   public final class TabRow {
-    method @androidx.compose.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
-    method @androidx.compose.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    method @androidx.compose.runtime.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
+    method @androidx.compose.runtime.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
     field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
-  @androidx.compose.Immutable public static final class TabRow.TabPosition {
+  @androidx.compose.runtime.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -316,13 +316,13 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
-  @androidx.compose.Immutable public final class Typography {
+  @androidx.compose.runtime.Immutable public final class Typography {
     ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle component1();
     method public androidx.compose.ui.text.TextStyle component10();
@@ -337,7 +337,7 @@
     method public androidx.compose.ui.text.TextStyle component7();
     method public androidx.compose.ui.text.TextStyle component8();
     method public androidx.compose.ui.text.TextStyle component9();
-    method @androidx.compose.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
     method public androidx.compose.ui.text.TextStyle getButton();
@@ -370,12 +370,12 @@
   public final class RippleAnimationKt {
   }
 
-  @androidx.compose.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
+  @androidx.compose.runtime.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.runtime.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
@@ -383,12 +383,12 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
-    method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.runtime.Composable public long defaultColor();
+    method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
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 ab2d0d7..d5b36d36 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
@@ -9,14 +9,14 @@
   }
 
   public final class AlertDialogKt {
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
   }
 
   public final class AppBarKt {
-    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.compose.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.compose.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,8 +28,8 @@
   }
 
   public final class BottomNavigationKt {
-    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.compose.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));
+    method @androidx.compose.runtime.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.compose.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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));
   }
 
   public final class ButtonConstants {
@@ -51,22 +51,22 @@
   }
 
   public final class ButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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.runtime.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-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);
+    method @androidx.compose.runtime.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 {
-    method @androidx.compose.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
-    method @androidx.compose.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
+    method @androidx.compose.runtime.Composable public static long contentColorFor-8_81llA(long color);
     method public static long contentColorFor-MlVJVp4(androidx.compose.material.ColorPalette, long color);
     method public static androidx.compose.material.ColorPalette darkColorPalette-T8B3sC8(long primary = Color(4290479868), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long background = Color(4279374354), long surface = Color(4279374354), long error = Color(4291782265), long onPrimary = Color.Black, long onSecondary = Color.Black, long onBackground = Color.White, long onSurface = Color.White, long onError = Color.Black);
     method public static androidx.compose.material.ColorPalette lightColorPalette-hW7iGhc(long primary = Color(4284612846), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long secondaryVariant = Color(4278290310), long background = Color.White, long surface = Color.White, long error = Color(4289724448), long onPrimary = Color.White, long onSecondary = Color.Black, long onBackground = Color.Black, long onSurface = Color.Black, long onError = Color.White);
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    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);
+    method @androidx.compose.runtime.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-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void BottomDrawerLayout-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void ModalDrawerLayout-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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 {
@@ -123,13 +123,13 @@
     enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
-  @androidx.compose.Immutable public interface Emphasis {
+  @androidx.compose.runtime.Immutable public interface Emphasis {
     method public long applyEmphasis-8_81llA(long color);
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
+    method @androidx.compose.runtime.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
   }
 
   public interface EmphasisLevels {
@@ -145,18 +145,18 @@
   }
 
   public final class FloatingActionButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
-    method @androidx.compose.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
-    method @androidx.compose.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class ListItemKt {
-    method @androidx.compose.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
-    method @androidx.compose.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+    method @androidx.compose.runtime.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
+    method @androidx.compose.runtime.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
   }
 
   public final class MaterialTheme {
@@ -170,17 +170,17 @@
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class MenuKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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);
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -190,10 +190,10 @@
   }
 
   public final class ProgressIndicatorKt {
-    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);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.runtime.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.runtime.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.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);
   }
 
   public final class RadioButtonConstants {
@@ -205,14 +205,14 @@
   }
 
   public final class RadioButtonKt {
-    method @androidx.compose.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+    method @androidx.compose.runtime.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
-  @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
-    method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+  @Deprecated @androidx.compose.runtime.Stable public final class RadioGroupScope {
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -227,12 +227,12 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-_B-Z858(androidx.compose.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.runtime.Composable public static void Scaffold-_B-Z858(androidx.compose.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.compose.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.compose.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);
   }
 
-  @androidx.compose.Stable public final class ScaffoldState {
+  @androidx.compose.runtime.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
@@ -265,41 +265,41 @@
   }
 
   public final class SliderKt {
-    method @androidx.compose.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
   }
 
   public final class SnackbarKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
-    method @androidx.compose.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
+    method @androidx.compose.runtime.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
   }
 
   public final class TabKt {
-    method @androidx.compose.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
-    method @androidx.compose.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
+    method @androidx.compose.runtime.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function0<kotlin.Unit> divider = { Divider(1.dp, contentColor().copy(DividerOpacity)) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
   }
 
   public final class TabRow {
-    method @androidx.compose.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
-    method @androidx.compose.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    method @androidx.compose.runtime.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
+    method @androidx.compose.runtime.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
     field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
-  @androidx.compose.Immutable public static final class TabRow.TabPosition {
+  @androidx.compose.runtime.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -316,13 +316,13 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
-  @androidx.compose.Immutable public final class Typography {
+  @androidx.compose.runtime.Immutable public final class Typography {
     ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle component1();
     method public androidx.compose.ui.text.TextStyle component10();
@@ -337,7 +337,7 @@
     method public androidx.compose.ui.text.TextStyle component7();
     method public androidx.compose.ui.text.TextStyle component8();
     method public androidx.compose.ui.text.TextStyle component9();
-    method @androidx.compose.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
     method public androidx.compose.ui.text.TextStyle getButton();
@@ -370,12 +370,12 @@
   public final class RippleAnimationKt {
   }
 
-  @androidx.compose.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
+  @androidx.compose.runtime.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.runtime.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
@@ -383,12 +383,12 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
-    method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.runtime.Composable public long defaultColor();
+    method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
diff --git a/ui/ui-material/api/public_plus_experimental_current.txt b/ui/ui-material/api/public_plus_experimental_current.txt
index ab2d0d7..d5b36d36 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -9,14 +9,14 @@
   }
 
   public final class AlertDialogKt {
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
   }
 
   public final class AppBarKt {
-    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.compose.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.compose.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,8 +28,8 @@
   }
 
   public final class BottomNavigationKt {
-    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.compose.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));
+    method @androidx.compose.runtime.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.compose.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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));
   }
 
   public final class ButtonConstants {
@@ -51,22 +51,22 @@
   }
 
   public final class ButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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.runtime.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-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);
+    method @androidx.compose.runtime.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 {
-    method @androidx.compose.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
-    method @androidx.compose.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
+    method @androidx.compose.runtime.Composable public static long contentColorFor-8_81llA(long color);
     method public static long contentColorFor-MlVJVp4(androidx.compose.material.ColorPalette, long color);
     method public static androidx.compose.material.ColorPalette darkColorPalette-T8B3sC8(long primary = Color(4290479868), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long background = Color(4279374354), long surface = Color(4279374354), long error = Color(4291782265), long onPrimary = Color.Black, long onSecondary = Color.Black, long onBackground = Color.White, long onSurface = Color.White, long onError = Color.Black);
     method public static androidx.compose.material.ColorPalette lightColorPalette-hW7iGhc(long primary = Color(4284612846), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long secondaryVariant = Color(4278290310), long background = Color.White, long surface = Color.White, long error = Color(4289724448), long onPrimary = Color.White, long onSecondary = Color.Black, long onBackground = Color.Black, long onSurface = Color.Black, long onError = Color.White);
@@ -102,7 +102,7 @@
   }
 
   public final class DividerKt {
-    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);
+    method @androidx.compose.runtime.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-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void BottomDrawerLayout-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void ModalDrawerLayout-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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 {
@@ -123,13 +123,13 @@
     enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
-  @androidx.compose.Immutable public interface Emphasis {
+  @androidx.compose.runtime.Immutable public interface Emphasis {
     method public long applyEmphasis-8_81llA(long color);
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
+    method @androidx.compose.runtime.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
   }
 
   public interface EmphasisLevels {
@@ -145,18 +145,18 @@
   }
 
   public final class FloatingActionButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
-    method @androidx.compose.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
-    method @androidx.compose.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class ListItemKt {
-    method @androidx.compose.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
-    method @androidx.compose.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+    method @androidx.compose.runtime.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
+    method @androidx.compose.runtime.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
   }
 
   public final class MaterialTheme {
@@ -170,17 +170,17 @@
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class MenuKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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);
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -190,10 +190,10 @@
   }
 
   public final class ProgressIndicatorKt {
-    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);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.runtime.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.runtime.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.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);
   }
 
   public final class RadioButtonConstants {
@@ -205,14 +205,14 @@
   }
 
   public final class RadioButtonKt {
-    method @androidx.compose.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+    method @androidx.compose.runtime.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
-  @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
-    method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+  @Deprecated @androidx.compose.runtime.Stable public final class RadioGroupScope {
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -227,12 +227,12 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-_B-Z858(androidx.compose.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.runtime.Composable public static void Scaffold-_B-Z858(androidx.compose.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.compose.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.compose.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);
   }
 
-  @androidx.compose.Stable public final class ScaffoldState {
+  @androidx.compose.runtime.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
@@ -265,41 +265,41 @@
   }
 
   public final class SliderKt {
-    method @androidx.compose.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
   }
 
   public final class SnackbarKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
-    method @androidx.compose.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
+    method @androidx.compose.runtime.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
   }
 
   public final class TabKt {
-    method @androidx.compose.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
-    method @androidx.compose.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
+    method @androidx.compose.runtime.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function0<kotlin.Unit> divider = { Divider(1.dp, contentColor().copy(DividerOpacity)) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
   }
 
   public final class TabRow {
-    method @androidx.compose.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
-    method @androidx.compose.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    method @androidx.compose.runtime.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
+    method @androidx.compose.runtime.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
     field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
-  @androidx.compose.Immutable public static final class TabRow.TabPosition {
+  @androidx.compose.runtime.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -316,13 +316,13 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
-  @androidx.compose.Immutable public final class Typography {
+  @androidx.compose.runtime.Immutable public final class Typography {
     ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle component1();
     method public androidx.compose.ui.text.TextStyle component10();
@@ -337,7 +337,7 @@
     method public androidx.compose.ui.text.TextStyle component7();
     method public androidx.compose.ui.text.TextStyle component8();
     method public androidx.compose.ui.text.TextStyle component9();
-    method @androidx.compose.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
     method public androidx.compose.ui.text.TextStyle getButton();
@@ -370,12 +370,12 @@
   public final class RippleAnimationKt {
   }
 
-  @androidx.compose.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
+  @androidx.compose.runtime.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.runtime.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
@@ -383,12 +383,12 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
-    method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.runtime.Composable public long defaultColor();
+    method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
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 41365c0e..237abc9 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev16.txt
@@ -9,14 +9,14 @@
   }
 
   public final class AlertDialogKt {
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
   }
 
   public final class AppBarKt {
-    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.compose.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.compose.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,8 +28,8 @@
   }
 
   public final class BottomNavigationKt {
-    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.compose.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));
+    method @androidx.compose.runtime.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.compose.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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));
   }
 
   public final class ButtonConstants {
@@ -51,23 +51,23 @@
   }
 
   public final class ButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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.runtime.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-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);
+    method @androidx.compose.runtime.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 {
-    method @androidx.compose.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
-    method @androidx.compose.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
+    method @androidx.compose.runtime.Composable public static long contentColorFor-8_81llA(long color);
     method public static long contentColorFor-MlVJVp4(androidx.compose.material.ColorPalette, long color);
     method public static androidx.compose.material.ColorPalette darkColorPalette-T8B3sC8(long primary = Color(4290479868), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long background = Color(4279374354), long surface = Color(4279374354), long error = Color(4291782265), long onPrimary = Color.Black, long onSecondary = Color.Black, long onBackground = Color.White, long onSurface = Color.White, long onError = Color.Black);
     method public static androidx.compose.material.ColorPalette lightColorPalette-hW7iGhc(long primary = Color(4284612846), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long secondaryVariant = Color(4278290310), long background = Color.White, long surface = Color.White, long error = Color(4289724448), long onPrimary = Color.White, long onSecondary = Color.Black, long onBackground = Color.Black, long onSurface = Color.Black, long onError = Color.White);
@@ -103,7 +103,7 @@
   }
 
   public final class DividerKt {
-    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);
+    method @androidx.compose.runtime.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-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void BottomDrawerLayout-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void ModalDrawerLayout-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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 {
@@ -124,13 +124,13 @@
     enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
-  @androidx.compose.Immutable public interface Emphasis {
+  @androidx.compose.runtime.Immutable public interface Emphasis {
     method public long applyEmphasis-8_81llA(long color);
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
+    method @androidx.compose.runtime.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
   }
 
   public interface EmphasisLevels {
@@ -146,18 +146,18 @@
   }
 
   public final class FloatingActionButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
-    method @androidx.compose.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
-    method @androidx.compose.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class ListItemKt {
-    method @androidx.compose.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
-    method @androidx.compose.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+    method @androidx.compose.runtime.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
+    method @androidx.compose.runtime.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
   }
 
   public final class MaterialTheme {
@@ -171,17 +171,17 @@
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class MenuKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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);
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -191,10 +191,10 @@
   }
 
   public final class ProgressIndicatorKt {
-    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);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.runtime.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.runtime.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.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);
   }
 
   public final class RadioButtonConstants {
@@ -206,14 +206,14 @@
   }
 
   public final class RadioButtonKt {
-    method @androidx.compose.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+    method @androidx.compose.runtime.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
-  @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
-    method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+  @Deprecated @androidx.compose.runtime.Stable public final class RadioGroupScope {
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -228,12 +228,12 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-_B-Z858(androidx.compose.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.runtime.Composable public static void Scaffold-_B-Z858(androidx.compose.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.compose.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.compose.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);
   }
 
-  @androidx.compose.Stable public final class ScaffoldState {
+  @androidx.compose.runtime.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
@@ -266,41 +266,41 @@
   }
 
   public final class SliderKt {
-    method @androidx.compose.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
   }
 
   public final class SnackbarKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
-    method @androidx.compose.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
+    method @androidx.compose.runtime.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
   }
 
   public final class TabKt {
-    method @androidx.compose.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
-    method @androidx.compose.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
+    method @androidx.compose.runtime.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function0<kotlin.Unit> divider = { Divider(1.dp, contentColor().copy(DividerOpacity)) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
   }
 
   public final class TabRow {
-    method @androidx.compose.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
-    method @androidx.compose.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    method @androidx.compose.runtime.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
+    method @androidx.compose.runtime.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
     field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
-  @androidx.compose.Immutable public static final class TabRow.TabPosition {
+  @androidx.compose.runtime.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -317,13 +317,13 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
-  @androidx.compose.Immutable public final class Typography {
+  @androidx.compose.runtime.Immutable public final class Typography {
     ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle component1();
     method public androidx.compose.ui.text.TextStyle component10();
@@ -338,7 +338,7 @@
     method public androidx.compose.ui.text.TextStyle component7();
     method public androidx.compose.ui.text.TextStyle component8();
     method public androidx.compose.ui.text.TextStyle component9();
-    method @androidx.compose.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
     method public androidx.compose.ui.text.TextStyle getButton();
@@ -371,12 +371,12 @@
   public final class RippleAnimationKt {
   }
 
-  @androidx.compose.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
+  @androidx.compose.runtime.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.runtime.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
@@ -384,12 +384,12 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
-    method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.runtime.Composable public long defaultColor();
+    method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
diff --git a/ui/ui-material/api/restricted_current.txt b/ui/ui-material/api/restricted_current.txt
index 41365c0e..237abc9 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -9,14 +9,14 @@
   }
 
   public final class AlertDialogKt {
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
-    method @androidx.compose.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> confirmButton, kotlin.jvm.functions.Function0<kotlin.Unit>? dismissButton = null, androidx.compose.material.AlertDialogButtonLayout buttonLayout = androidx.compose.material.AlertDialogButtonLayout.SideBySide, androidx.compose.ui.graphics.Shape shape = medium);
+    method @androidx.compose.runtime.Composable public static void AlertDialog(kotlin.jvm.functions.Function0<kotlin.Unit> onCloseRequest, kotlin.jvm.functions.Function0<kotlin.Unit>? title = null, kotlin.jvm.functions.Function0<kotlin.Unit> text, kotlin.jvm.functions.Function0<kotlin.Unit> buttons, androidx.compose.ui.graphics.Shape shape = medium);
   }
 
   public final class AppBarKt {
-    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.compose.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.compose.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation);
+    method @androidx.compose.runtime.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.compose.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
   }
 
   public enum BottomDrawerState {
@@ -28,8 +28,8 @@
   }
 
   public final class BottomNavigationKt {
-    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.compose.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));
+    method @androidx.compose.runtime.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.compose.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.runtime.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));
   }
 
   public final class ButtonConstants {
@@ -51,23 +51,23 @@
   }
 
   public final class ButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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.runtime.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-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);
+    method @androidx.compose.runtime.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 {
-    method @androidx.compose.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
-    method @androidx.compose.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void Checkbox-VvF3hRA(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
+    method @androidx.compose.runtime.Composable public static void TriStateCheckbox-hOEsDnM(androidx.compose.foundation.selection.ToggleableState state, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, long checkedColor = MaterialTheme.colors.secondary, long uncheckedColor = MaterialTheme.colors.onSurface, long disabledColor = MaterialTheme.colors.onSurface, long checkMarkColor = MaterialTheme.colors.surface);
   }
 
   public final class ColorKt {
-    method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
+    method @androidx.compose.runtime.Composable public static long contentColorFor-8_81llA(long color);
     method public static long contentColorFor-MlVJVp4(androidx.compose.material.ColorPalette, long color);
     method public static androidx.compose.material.ColorPalette darkColorPalette-T8B3sC8(long primary = Color(4290479868), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long background = Color(4279374354), long surface = Color(4279374354), long error = Color(4291782265), long onPrimary = Color.Black, long onSecondary = Color.Black, long onBackground = Color.White, long onSurface = Color.White, long onError = Color.Black);
     method public static androidx.compose.material.ColorPalette lightColorPalette-hW7iGhc(long primary = Color(4284612846), long primaryVariant = Color(4281794739), long secondary = Color(4278442694), long secondaryVariant = Color(4278290310), long background = Color.White, long surface = Color.White, long error = Color(4289724448), long onPrimary = Color.White, long onSecondary = Color.Black, long onBackground = Color.Black, long onSurface = Color.Black, long onError = Color.White);
@@ -103,7 +103,7 @@
   }
 
   public final class DividerKt {
-    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);
+    method @androidx.compose.runtime.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-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void BottomDrawerLayout-cIpOu6M(androidx.compose.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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.runtime.Composable public static void ModalDrawerLayout-T3JXCKk(androidx.compose.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.compose.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 {
@@ -124,13 +124,13 @@
     enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
-  @androidx.compose.Immutable public interface Emphasis {
+  @androidx.compose.runtime.Immutable public interface Emphasis {
     method public long applyEmphasis-8_81llA(long color);
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
+    method @androidx.compose.runtime.Composable public static void ProvideEmphasis(androidx.compose.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method public static androidx.compose.runtime.Ambient<androidx.compose.material.EmphasisLevels> getEmphasisAmbient();
   }
 
   public interface EmphasisLevels {
@@ -146,18 +146,18 @@
   }
 
   public final class FloatingActionButtonKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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 {
-    method @androidx.compose.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
-    method @androidx.compose.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconButton(kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
+    method @androidx.compose.runtime.Composable public static void IconToggleButton(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, boolean enabled = true, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> icon);
   }
 
   public final class ListItemKt {
-    method @androidx.compose.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
-    method @androidx.compose.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
+    method @androidx.compose.runtime.Composable public static void ListItem(String text, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, androidx.compose.ui.graphics.ImageAsset? icon = null, String? secondaryText = null, boolean singleLineSecondaryText = true, String? overlineText = null, String? metaText = null);
+    method @androidx.compose.runtime.Composable public static void ListItem(androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? onClick = null, kotlin.jvm.functions.Function0<kotlin.Unit>? icon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? secondaryText = null, boolean singleLineSecondaryText = true, kotlin.jvm.functions.Function0<kotlin.Unit>? overlineText = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailing = null, kotlin.jvm.functions.Function0<kotlin.Unit> text);
   }
 
   public final class MaterialTheme {
@@ -171,17 +171,17 @@
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void MaterialTheme(androidx.compose.material.ColorPalette colors = MaterialTheme.colors, androidx.compose.material.Typography typography = MaterialTheme.typography, androidx.compose.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
   }
 
   public final class MenuKt {
-    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);
+    method @androidx.compose.runtime.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.runtime.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);
   }
 
   public final class OutlinedTextFieldKt {
-    method @androidx.compose.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
-    method @androidx.compose.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-9q5ETgg(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
+    method @androidx.compose.runtime.Composable public static void OutlinedTextField-iZVB1pk(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error);
   }
 
   public final class ProgressIndicatorConstants {
@@ -191,10 +191,10 @@
   }
 
   public final class ProgressIndicatorKt {
-    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);
+    method @androidx.compose.runtime.Composable public static void CircularProgressIndicator-RAAM6N0(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary, float strokeWidth = ProgressIndicatorConstants.DefaultStrokeWidth);
+    method @androidx.compose.runtime.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.runtime.Composable public static void LinearProgressIndicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.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);
   }
 
   public final class RadioButtonConstants {
@@ -206,14 +206,14 @@
   }
 
   public final class RadioButtonKt {
-    method @androidx.compose.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+    method @androidx.compose.runtime.Composable public static void RadioButton-T-C1lGE(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onClick, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long selectedColor = MaterialTheme.colors.secondary, long unselectedColor = RadioButtonConstants.defaultUnselectedColor, long disabledColor = RadioButtonConstants.defaultDisabledColor);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup(kotlin.jvm.functions.Function1<? super androidx.compose.material.RadioGroupScope,kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public static void RadioGroup-myzhYQQ(java.util.List<java.lang.String> options, String? selectedOption, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onSelectedChange, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
-  @Deprecated @androidx.compose.Stable public final class RadioGroupScope {
-    method @Deprecated @androidx.compose.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @Deprecated @androidx.compose.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
+  @Deprecated @androidx.compose.runtime.Stable public final class RadioGroupScope {
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupItem(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @Deprecated @androidx.compose.runtime.Composable public void RadioGroupTextItem-HmYz3PU(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelect, String text, androidx.ui.core.Modifier modifier = Modifier, long radioColor = MaterialTheme.colors.secondary, androidx.compose.ui.text.TextStyle? textStyle = null);
   }
 
   public final class Scaffold {
@@ -228,12 +228,12 @@
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-_B-Z858(androidx.compose.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.runtime.Composable public static void Scaffold-_B-Z858(androidx.compose.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.compose.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.compose.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);
   }
 
-  @androidx.compose.Stable public final class ScaffoldState {
+  @androidx.compose.runtime.Stable public final class ScaffoldState {
     ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
@@ -266,41 +266,41 @@
   }
 
   public final class SliderKt {
-    method @androidx.compose.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
+    method @androidx.compose.runtime.Composable public static void Slider-q0dHRpQ(float value, kotlin.jvm.functions.Function1<? super java.lang.Float,kotlin.Unit> onValueChange, androidx.ui.core.Modifier modifier = Modifier, kotlin.ranges.ClosedFloatingPointRange<java.lang.Float> valueRange = 0.0 .. 1.0, @IntRange(from=0) int steps = 0, kotlin.jvm.functions.Function0<kotlin.Unit> onValueChangeEnd = {}, long color = MaterialTheme.colors.primary);
   }
 
   public final class SnackbarKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette colors);
   }
 
   public final class SurfaceKt {
-    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 @androidx.compose.runtime.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.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
-    method @androidx.compose.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
+    method @androidx.compose.runtime.Composable public static void Switch-x-xaikk(boolean checked, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onCheckedChange, androidx.ui.core.Modifier modifier = Modifier, boolean enabled = true, long color = MaterialTheme.colors.secondaryVariant);
   }
 
   public final class TabKt {
-    method @androidx.compose.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method @androidx.compose.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
-    method @androidx.compose.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    method @androidx.compose.runtime.Composable public static void Tab(boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    method @androidx.compose.runtime.Composable public static void Tab-4J70ySM(kotlin.jvm.functions.Function0<kotlin.Unit> text = emptyContent(), kotlin.jvm.functions.Function0<kotlin.Unit> icon = emptyContent(), boolean selected, kotlin.jvm.functions.Function0<kotlin.Unit> onSelected, androidx.ui.core.Modifier modifier = Modifier, long activeColor = contentColor(), long inactiveColor = EmphasisAmbient.current.medium.applyEmphasis(activeColor));
+    method @androidx.compose.runtime.Composable public static <T> void TabRow-jEfc4-o(java.util.List<? extends T> items, int selectedIndex, androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), boolean scrollable = false, kotlin.jvm.functions.Function1<? super java.util.List<androidx.compose.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
     TabRow.Indicator()
 }) }, kotlin.jvm.functions.Function0<kotlin.Unit> divider = { Divider(1.dp, contentColor().copy(DividerOpacity)) }, kotlin.jvm.functions.Function2<? super java.lang.Integer,? super T,kotlin.Unit> tab);
   }
 
   public final class TabRow {
-    method @androidx.compose.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
-    method @androidx.compose.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
+    method @androidx.compose.runtime.Composable public void Indicator-46qoZ30(androidx.ui.core.Modifier modifier = Modifier, long color = contentColor());
+    method @androidx.compose.runtime.Composable public void IndicatorContainer(java.util.List<androidx.compose.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
     field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
-  @androidx.compose.Immutable public static final class TabRow.TabPosition {
+  @androidx.compose.runtime.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
     method public float getLeft();
     method public float getRight();
     method public float getWidth();
@@ -317,13 +317,13 @@
   }
 
   public final class TextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @Deprecated @androidx.compose.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
-    method @androidx.compose.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @Deprecated @androidx.compose.runtime.Composable public static void FilledTextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-FohAeog(androidx.compose.ui.text.input.TextFieldValue value, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
+    method @androidx.compose.runtime.Composable public static void TextField-QpwO7oQ(String value, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> onValueChange, kotlin.jvm.functions.Function0<kotlin.Unit> label, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle textStyle = currentTextStyle(), kotlin.jvm.functions.Function0<kotlin.Unit>? placeholder = null, kotlin.jvm.functions.Function0<kotlin.Unit>? leadingIcon = null, kotlin.jvm.functions.Function0<kotlin.Unit>? trailingIcon = null, boolean isErrorValue = false, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function2<? super androidx.compose.ui.text.input.ImeAction,? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onImeActionPerformed = { _, _ ->  }, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {}, long activeColor = MaterialTheme.colors.primary, long inactiveColor = MaterialTheme.colors.onSurface, long errorColor = MaterialTheme.colors.error, long backgroundColor = MaterialTheme.colors.onSurface, androidx.compose.ui.graphics.Shape shape = MaterialTheme.shapes.small.copy(ZeroCornerSize, ZeroCornerSize));
   }
 
-  @androidx.compose.Immutable public final class Typography {
+  @androidx.compose.runtime.Immutable public final class Typography {
     ctor public Typography(androidx.compose.ui.text.font.FontFamily defaultFontFamily, androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle component1();
     method public androidx.compose.ui.text.TextStyle component10();
@@ -338,7 +338,7 @@
     method public androidx.compose.ui.text.TextStyle component7();
     method public androidx.compose.ui.text.TextStyle component8();
     method public androidx.compose.ui.text.TextStyle component9();
-    method @androidx.compose.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
+    method @androidx.compose.runtime.Immutable public androidx.compose.material.Typography copy(androidx.compose.ui.text.TextStyle h1, androidx.compose.ui.text.TextStyle h2, androidx.compose.ui.text.TextStyle h3, androidx.compose.ui.text.TextStyle h4, androidx.compose.ui.text.TextStyle h5, androidx.compose.ui.text.TextStyle h6, androidx.compose.ui.text.TextStyle subtitle1, androidx.compose.ui.text.TextStyle subtitle2, androidx.compose.ui.text.TextStyle body1, androidx.compose.ui.text.TextStyle body2, androidx.compose.ui.text.TextStyle button, androidx.compose.ui.text.TextStyle caption, androidx.compose.ui.text.TextStyle overline);
     method public androidx.compose.ui.text.TextStyle getBody1();
     method public androidx.compose.ui.text.TextStyle getBody2();
     method public androidx.compose.ui.text.TextStyle getButton();
@@ -371,12 +371,12 @@
   public final class RippleAnimationKt {
   }
 
-  @androidx.compose.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
+  @androidx.compose.runtime.Stable public final class RippleIndication implements androidx.compose.foundation.Indication {
     method public androidx.compose.foundation.IndicationInstance createInstance();
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    method @androidx.compose.runtime.Composable public static androidx.compose.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
@@ -384,12 +384,12 @@
   }
 
   @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
-    method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.runtime.Composable public long defaultColor();
+    method @androidx.compose.runtime.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
diff --git a/ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt b/ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt
index b94daa4..56f5d55 100644
--- a/ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt
+++ b/ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.icons.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.paint
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt b/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt
index 62fa3df..32f6a25 100644
--- a/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt
+++ b/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt
@@ -19,8 +19,8 @@
 import android.graphics.Bitmap
 import android.os.Build
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.Composition
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.matchers.MSSIMMatcher
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt
index 815f524..8bc8685 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt
index e478308..ed1a81d 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt
index c303776..f3afb02 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.ScrollableColumn
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
index 51a21a8..51eee64 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
@@ -20,12 +20,12 @@
 import androidx.compose.animation.core.FloatPropKey
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
index b7b4d53..b84abe5 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
@@ -19,10 +19,10 @@
 import android.os.Bundle
 import androidx.activity.ComponentActivity
 import androidx.compose.animation.core.FastOutSlowInEasing
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt
index 8d6bbe4..f2dac19 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt
index 7f354f9..899a66f 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Call
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
index 8392de2..988cf38 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt
index 8d8fb43..99eec42 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
index 1ca80eb..b53a09c 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
index 6348896..f460db2 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
@@ -18,14 +18,14 @@
 
 import android.os.Handler
 import android.os.Looper
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onActive
-import androidx.compose.onDispose
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onActive
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt
index f8f2f0c..83b2915 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt
index 4ff89d9..2216d3d 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt
index fdf2e1f..2e1901b 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
index b68035e..6e6adcb 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.material.demos
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt
index 2e450cc..966787b 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt
index ae26080..ade4ae6 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt
index 345186e..54f4cb2 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt
index 856b665..39ca001 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.paint
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt
index 07d3134..b7edb50 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material.studies.rally
 
 import android.annotation.SuppressLint
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt
index 07f8717..7b498da 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt
@@ -18,10 +18,10 @@
 
 import android.os.Bundle
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt
index bd6cb5a..bee5d70 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.RectangleShape
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt
index ce95a22..eb5451b 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt
@@ -21,7 +21,7 @@
 import androidx.compose.animation.core.LinearOutSlowInEasing
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt
index 32825f9..d49acd4 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.material.icons.Icons
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt
index 3871bcb..9bcc549 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material.studies.rally
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.ui.graphics.Color
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.Typography
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt
index 5ae3730..ef32a56 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt
@@ -19,8 +19,8 @@
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.transition
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt
index a2e655f..caf4721 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Arrangement
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt
index a78f589..7ef288c 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt
index cd256874..632e46d 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
 import androidx.compose.material.BottomNavigation
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt
index 119d1f6..f494684 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt
index 089686d..5510c6e 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.material.Card
 
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt
index 85b21ef..e85130d 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ContentGravity
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt
index c4a3bed..73725ad 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
 import androidx.compose.material.EmphasisAmbient
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt
index 820e455..66fdc9e 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt
index f8d05d0..a6bd23a 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.animation.animate
 import androidx.compose.foundation.Icon
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt
index 145a8cb..21e6bd5 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt
index 2105e7f..9b99393 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
index 3655d7c..53317d1 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
@@ -18,8 +18,8 @@
 
 import androidx.compose.animation.core.TweenSpec
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.animation.animatedFloat
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
index dddeabd..984cfd0 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
@@ -17,11 +17,11 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt
index b036d6d..00685ac 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.foundation.Text
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.Slider
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt
index c5e6c90..04b246c 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.material.MaterialTheme
 import androidx.compose.material.Snackbar
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
index ceda0c1..6f56fee 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
@@ -19,12 +19,12 @@
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.transitionDefinition
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt
index 1ea64cd..8d61a40 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt
@@ -17,9 +17,9 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt
index 49467df..de42ff0f 100644
--- a/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt
index ef14c3d..ef89497 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
index adf65ac..3769d12 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
@@ -17,11 +17,11 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt
index 104b035..31f70b3 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt
index 76059aa..2c87bf9 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt
@@ -16,7 +16,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.AndroidXScreenshotTestRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt
index 6ff73ca..dde168e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt
@@ -15,7 +15,7 @@
  */
 package androidx.compose.material
 
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt
index 3d3b3b6..1f5700b 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material
 
 import android.os.SystemClock.sleep
-import androidx.compose.emptyContent
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.MediumTest
 import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
index 127f343..7e5d73c 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.LayoutCoordinates
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt
index 358df05..9965821 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt
@@ -15,7 +15,7 @@
  */
 package androidx.compose.material
 
-import androidx.compose.emptyContent
+import androidx.compose.runtime.emptyContent
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt
index 4ca16e2..cbb1017 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
index 79166fd..bf79fa2 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.material
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.unit.LayoutDirection
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt
index 9e59753..7f455c2 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt
@@ -15,7 +15,7 @@
  */
 package androidx.compose.material
 
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt
index 700e2e9..43b9dc0 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.AndroidXScreenshotTestRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
index 818c30e..878a78d 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
index 149e777..b165e95 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.LayoutCoordinates
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt
index 2db7a27..7f09fdf 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.DensityAmbient
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt
index bd485e8..acf0faf 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.Providers
+import androidx.compose.runtime.Providers
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
index ca7995c..99b34ee 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material
 
 import android.os.Build
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.AndroidXScreenshotTestRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt
index 7e12e79..0e66bbb 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.material
 
-import androidx.compose.mutableStateOf
-import androidx.compose.state
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt
index 0a0039e..f25d080 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt
@@ -15,10 +15,10 @@
  */
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.test.filters.LargeTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt
index f223219..7f1dc57 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt
@@ -17,12 +17,12 @@
 package androidx.compose.material.ripple
 
 import android.os.Build
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.LargeTest
 import androidx.test.filters.SdkSuppress
 import androidx.test.screenshot.AndroidXScreenshotTestRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt
index d669fc2..c6cd83d 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material.textfield
 
 import android.os.Build
-import androidx.compose.Providers
-import androidx.compose.state
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
index e22a31e..e0a2a26 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
@@ -17,8 +17,8 @@
 package androidx.compose.material.textfield
 
 import android.os.Build
-import androidx.compose.Providers
-import androidx.compose.state
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldImplTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldImplTest.kt
index f73533c..e68d084 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldImplTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldImplTest.kt
@@ -17,7 +17,7 @@
 package androidx.compose.material.textfield
 
 import android.os.Build
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.test.filters.MediumTest
 import androidx.test.filters.SdkSuppress
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
index 113000e..aff424f 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt
index d86aaef..f13cc1d 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt
@@ -15,7 +15,7 @@
  */
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ContentGravity
 import androidx.compose.foundation.ProvideTextStyle
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt
index 0472b39..cfe8656 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt
@@ -19,9 +19,9 @@
 import androidx.compose.animation.core.VectorizedAnimationSpec
 import androidx.compose.animation.core.FastOutSlowInEasing
 import androidx.compose.animation.core.TweenSpec
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.emptyContent
 import androidx.compose.animation.animate
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt
index e724b76..aab8cee 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt
@@ -18,10 +18,10 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
-import androidx.compose.remember
+import androidx.compose.runtime.remember
 import androidx.compose.foundation.Border
 import androidx.compose.foundation.IndicationAmbient
 import androidx.compose.foundation.InteractionState
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt
index 7711f17..b5a1fc3 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Border
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt
index 5594d13..ec1587e 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt
@@ -22,9 +22,9 @@
 import androidx.compose.animation.core.snap
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.remember
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.transition
 import androidx.ui.core.Alignment
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt
index 14072c1..eb7be86 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt
@@ -16,15 +16,15 @@
 
 package androidx.compose.material
 
-import androidx.compose.Ambient
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
-import androidx.compose.Providers
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.staticAmbientOf
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Ambient
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.staticAmbientOf
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.compose.foundation.contentColor
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.useOrElse
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
index 142a9c1..e0a46d4 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.background
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
index c91af79..54f349a 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
@@ -17,9 +17,9 @@
 package androidx.compose.material
 
 import androidx.compose.animation.core.SpringSpec
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.state
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt
index d2fc69c..618c444 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.material
 
-import androidx.compose.Ambient
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Providers
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.Ambient
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.staticAmbientOf
 import androidx.compose.foundation.ContentColorAmbient
 import androidx.compose.foundation.contentColor
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
index a0bf07e..aaccc09 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
@@ -18,8 +18,8 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ContentGravity
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
index a2bd7103..342290c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.ContentGravity
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
index 8a34058..3452683 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
 import androidx.compose.ui.unit.Constraints
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
index c7ef885..6c6c53c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
@@ -16,9 +16,9 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.remember
 import androidx.compose.foundation.Indication
 import androidx.compose.foundation.IndicationAmbient
 import androidx.compose.foundation.ProvideTextStyle
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
index ef9c077..18147cd 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
@@ -20,12 +20,12 @@
 import androidx.compose.animation.core.LinearOutSlowInEasing
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.getValue
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.DrawLayerModifier
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
index 2f207af..b376afe 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
@@ -19,13 +19,13 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt
index fc1e0676..b721d50 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt
@@ -25,7 +25,7 @@
 import androidx.compose.animation.core.repeatable
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.animation.transition
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.unit.LayoutDirection
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt
index 6b7f0a9..9724d06 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt
@@ -18,9 +18,9 @@
 
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.remember
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
index be3bfa9..f673652 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
@@ -16,16 +16,16 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onDispose
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.staticAmbientOf
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.staticAmbientOf
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt
index 5bbf58c..f25804c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.staticAmbientOf
 import androidx.compose.foundation.shape.CornerBasedShape
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.ui.unit.dp
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
index 1266141..b40d386 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
@@ -21,8 +21,8 @@
 import androidx.compose.animation.core.AnimationEndReason
 import androidx.compose.animation.core.TargetAnimation
 import androidx.compose.animation.core.TweenSpec
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.Alignment
 import androidx.ui.core.AnimationClockAmbient
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt
index d795881..647592b 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
 import androidx.ui.core.Layout
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt
index 546a094..a858ee2c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.Providers
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt
index e20a9d5..be95e33 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt
@@ -17,10 +17,10 @@
 package androidx.compose.material
 
 import androidx.compose.animation.core.TweenSpec
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.unit.LayoutDirection
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt
index adeaefe..9293f70 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt
@@ -20,11 +20,11 @@
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.Immutable
-import androidx.compose.Providers
-import androidx.compose.emptyContent
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.remember
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
index 9cb9cc8..03232ca 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.material
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.Alignment
 import androidx.ui.core.AlignmentLine
 import androidx.ui.core.Layout
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
index ff130f7..8bc5922 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
@@ -23,15 +23,15 @@
 import androidx.compose.animation.core.TransitionSpec
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.Stable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.stateFor
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.stateFor
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.compose.animation.ColorPropKey
 import androidx.compose.animation.DpPropKey
 import androidx.compose.animation.transition
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
index 84254e8..b205fd0 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.material
 
-import androidx.compose.Immutable
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.staticAmbientOf
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.text.font.FontWeight
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt
index 3252b7b..aaaaafc 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt
@@ -24,9 +24,9 @@
 import androidx.compose.animation.core.OnAnimationEnd
 import androidx.compose.animation.core.Spring
 import androidx.compose.animation.core.TargetAnimation
-import androidx.compose.onCommit
-import androidx.compose.remember
-import androidx.compose.state
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.state
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.AnimationClockAmbient
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
index c06ad05..51e7c6f 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
@@ -25,9 +25,9 @@
 import androidx.compose.animation.core.createAnimation
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.compose.animation.OffsetPropKey
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Size
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt
index 7bc2d98..6c284a6 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt
@@ -20,13 +20,13 @@
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.TweenSpec
-import androidx.compose.Composable
-import androidx.compose.Stable
-import androidx.compose.State
-import androidx.compose.remember
-import androidx.compose.mutableStateListOf
-import androidx.compose.state
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.mutableStateListOf
+import androidx.compose.runtime.state
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.compose.animation.AnimatedFloatModel
 import androidx.compose.animation.asDisposableClock
 import androidx.ui.core.AnimationClockAmbient
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt
index 5e2fc25..25bc816 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt
@@ -17,8 +17,8 @@
 
 package androidx.compose.material.ripple
 
-import androidx.compose.Composable
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.staticAmbientOf
 import androidx.compose.foundation.Interaction
 import androidx.compose.foundation.contentColor
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-rxjava2/api/0.1.0-dev16.txt b/ui/ui-rxjava2/api/0.1.0-dev16.txt
index 313daa8..3078c8b 100644
--- a/ui/ui-rxjava2/api/0.1.0-dev16.txt
+++ b/ui/ui-rxjava2/api/0.1.0-dev16.txt
@@ -2,15 +2,15 @@
 package androidx.compose.runtime.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
-    method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
 
 }
diff --git a/ui/ui-rxjava2/api/current.txt b/ui/ui-rxjava2/api/current.txt
index 313daa8..3078c8b 100644
--- a/ui/ui-rxjava2/api/current.txt
+++ b/ui/ui-rxjava2/api/current.txt
@@ -2,15 +2,15 @@
 package androidx.compose.runtime.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
-    method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
 
 }
diff --git a/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev16.txt
index 313daa8..3078c8b 100644
--- a/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-rxjava2/api/public_plus_experimental_0.1.0-dev16.txt
@@ -2,15 +2,15 @@
 package androidx.compose.runtime.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
-    method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
 
 }
diff --git a/ui/ui-rxjava2/api/public_plus_experimental_current.txt b/ui/ui-rxjava2/api/public_plus_experimental_current.txt
index 313daa8..3078c8b 100644
--- a/ui/ui-rxjava2/api/public_plus_experimental_current.txt
+++ b/ui/ui-rxjava2/api/public_plus_experimental_current.txt
@@ -2,15 +2,15 @@
 package androidx.compose.runtime.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
-    method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
 
 }
diff --git a/ui/ui-rxjava2/api/restricted_0.1.0-dev16.txt b/ui/ui-rxjava2/api/restricted_0.1.0-dev16.txt
index 313daa8..3078c8b 100644
--- a/ui/ui-rxjava2/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-rxjava2/api/restricted_0.1.0-dev16.txt
@@ -2,15 +2,15 @@
 package androidx.compose.runtime.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
-    method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
 
 }
diff --git a/ui/ui-rxjava2/api/restricted_current.txt b/ui/ui-rxjava2/api/restricted_current.txt
index 313daa8..3078c8b 100644
--- a/ui/ui-rxjava2/api/restricted_current.txt
+++ b/ui/ui-rxjava2/api/restricted_current.txt
@@ -2,15 +2,15 @@
 package androidx.compose.runtime.rxjava2 {
 
   public final class RxJava2AdapterKt {
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Observable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Flowable<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Single<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
-    method @Deprecated @androidx.compose.Composable public static inline <T> androidx.compose.State<T> subscribeAsState(io.reactivex.Maybe<T>);
-    method @androidx.compose.Composable public static <R, T extends R> androidx.compose.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
-    method @androidx.compose.Composable public static androidx.compose.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Observable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Observable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Flowable<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Flowable<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Single<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Single<T>, R? initial);
+    method @Deprecated @androidx.compose.runtime.Composable public static inline <T> androidx.compose.runtime.State<T> subscribeAsState(io.reactivex.Maybe<T>);
+    method @androidx.compose.runtime.Composable public static <R, T extends R> androidx.compose.runtime.State<R> subscribeAsState(io.reactivex.Maybe<T>, R? initial);
+    method @androidx.compose.runtime.Composable public static androidx.compose.runtime.State<java.lang.Boolean> subscribeAsState(io.reactivex.Completable);
   }
 
 }
diff --git a/ui/ui-rxjava2/samples/src/main/java/androidx/compose/runtime/rxjava2/samples/Samples.kt b/ui/ui-rxjava2/samples/src/main/java/androidx/compose/runtime/rxjava2/samples/Samples.kt
index 777cd98..277271c 100644
--- a/ui/ui-rxjava2/samples/src/main/java/androidx/compose/runtime/rxjava2/samples/Samples.kt
+++ b/ui/ui-rxjava2/samples/src/main/java/androidx/compose/runtime/rxjava2/samples/Samples.kt
@@ -17,8 +17,8 @@
 package androidx.compose.runtime.rxjava2.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
 import androidx.compose.foundation.Text
 import androidx.compose.runtime.rxjava2.subscribeAsState
 import io.reactivex.Completable
diff --git a/ui/ui-rxjava2/src/androidTest/java/androidx/compose/runtime/rxjava2/RxJava2AdapterTest.kt b/ui/ui-rxjava2/src/androidTest/java/androidx/compose/runtime/rxjava2/RxJava2AdapterTest.kt
index dd6d7d8..a6fd577 100644
--- a/ui/ui-rxjava2/src/androidTest/java/androidx/compose/runtime/rxjava2/RxJava2AdapterTest.kt
+++ b/ui/ui-rxjava2/src/androidTest/java/androidx/compose/runtime/rxjava2/RxJava2AdapterTest.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.runtime.rxjava2
 
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.runOnIdle
diff --git a/ui/ui-rxjava2/src/main/java/androidx/compose/runtime/rxjava2/RxJava2Adapter.kt b/ui/ui-rxjava2/src/main/java/androidx/compose/runtime/rxjava2/RxJava2Adapter.kt
index 1288c69..d3a0be1 100644
--- a/ui/ui-rxjava2/src/main/java/androidx/compose/runtime/rxjava2/RxJava2Adapter.kt
+++ b/ui/ui-rxjava2/src/main/java/androidx/compose/runtime/rxjava2/RxJava2Adapter.kt
@@ -16,10 +16,10 @@
 
 package androidx.compose.runtime.rxjava2
 
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.onPreCommit
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.onPreCommit
+import androidx.compose.runtime.state
 import io.reactivex.Completable
 import io.reactivex.Flowable
 import io.reactivex.Maybe
diff --git a/ui/ui-saved-instance-state/api/0.1.0-dev16.txt b/ui/ui-saved-instance-state/api/0.1.0-dev16.txt
index a6775bf..860bfbc 100644
--- a/ui/ui-saved-instance-state/api/0.1.0-dev16.txt
+++ b/ui/ui-saved-instance-state/api/0.1.0-dev16.txt
@@ -10,11 +10,11 @@
   }
 
   public final class RememberSavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public final class SavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> androidx.compose.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public interface Saver<Original, Saveable> {
@@ -41,7 +41,7 @@
 
   public final class UiSavedStateRegistryKt {
     method public static androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry UiSavedStateRegistry(java.util.Map<java.lang.String,?>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
   }
 
 }
diff --git a/ui/ui-saved-instance-state/api/api_lint.ignore b/ui/ui-saved-instance-state/api/api_lint.ignore
index d064e69..aff9a81 100644
--- a/ui/ui-saved-instance-state/api/api_lint.ignore
+++ b/ui/ui-saved-instance-state/api/api_lint.ignore
@@ -1,5 +1,5 @@
 // Baseline format: 1.0
 ArrayReturn: androidx.compose.runtime.savedinstancestate.RememberSavedInstanceStateKt#rememberSavedInstanceState(Object[], androidx.compose.runtime.savedinstancestate.Saver<T,?>, String, kotlin.jvm.functions.Function0<? extends T>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
-ArrayReturn: androidx.compose.runtime.savedinstancestate.SavedInstanceStateKt#savedInstanceState(Object[], androidx.compose.runtime.savedinstancestate.Saver<T,?>, String, androidx.compose.SnapshotMutationPolicy<T>, kotlin.jvm.functions.Function0<? extends T>) parameter #0:
+ArrayReturn: androidx.compose.runtime.savedinstancestate.SavedInstanceStateKt#savedInstanceState(Object[], androidx.compose.runtime.savedinstancestate.Saver<T,?>, String, androidx.compose.runtime.SnapshotMutationPolicy<T>, kotlin.jvm.functions.Function0<? extends T>) parameter #0:
     Method parameter should be Collection<Object> (or subclass) instead of raw array; was `java.lang.Object[]`
diff --git a/ui/ui-saved-instance-state/api/current.txt b/ui/ui-saved-instance-state/api/current.txt
index a6775bf..860bfbc 100644
--- a/ui/ui-saved-instance-state/api/current.txt
+++ b/ui/ui-saved-instance-state/api/current.txt
@@ -10,11 +10,11 @@
   }
 
   public final class RememberSavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public final class SavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> androidx.compose.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public interface Saver<Original, Saveable> {
@@ -41,7 +41,7 @@
 
   public final class UiSavedStateRegistryKt {
     method public static androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry UiSavedStateRegistry(java.util.Map<java.lang.String,?>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
   }
 
 }
diff --git a/ui/ui-saved-instance-state/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-saved-instance-state/api/public_plus_experimental_0.1.0-dev16.txt
index a6775bf..860bfbc 100644
--- a/ui/ui-saved-instance-state/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-saved-instance-state/api/public_plus_experimental_0.1.0-dev16.txt
@@ -10,11 +10,11 @@
   }
 
   public final class RememberSavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public final class SavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> androidx.compose.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public interface Saver<Original, Saveable> {
@@ -41,7 +41,7 @@
 
   public final class UiSavedStateRegistryKt {
     method public static androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry UiSavedStateRegistry(java.util.Map<java.lang.String,?>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
   }
 
 }
diff --git a/ui/ui-saved-instance-state/api/public_plus_experimental_current.txt b/ui/ui-saved-instance-state/api/public_plus_experimental_current.txt
index a6775bf..860bfbc 100644
--- a/ui/ui-saved-instance-state/api/public_plus_experimental_current.txt
+++ b/ui/ui-saved-instance-state/api/public_plus_experimental_current.txt
@@ -10,11 +10,11 @@
   }
 
   public final class RememberSavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public final class SavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> androidx.compose.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public interface Saver<Original, Saveable> {
@@ -41,7 +41,7 @@
 
   public final class UiSavedStateRegistryKt {
     method public static androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry UiSavedStateRegistry(java.util.Map<java.lang.String,?>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
   }
 
 }
diff --git a/ui/ui-saved-instance-state/api/restricted_0.1.0-dev16.txt b/ui/ui-saved-instance-state/api/restricted_0.1.0-dev16.txt
index a6775bf..860bfbc 100644
--- a/ui/ui-saved-instance-state/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-saved-instance-state/api/restricted_0.1.0-dev16.txt
@@ -10,11 +10,11 @@
   }
 
   public final class RememberSavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public final class SavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> androidx.compose.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public interface Saver<Original, Saveable> {
@@ -41,7 +41,7 @@
 
   public final class UiSavedStateRegistryKt {
     method public static androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry UiSavedStateRegistry(java.util.Map<java.lang.String,?>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
   }
 
 }
diff --git a/ui/ui-saved-instance-state/api/restricted_current.txt b/ui/ui-saved-instance-state/api/restricted_current.txt
index a6775bf..860bfbc 100644
--- a/ui/ui-saved-instance-state/api/restricted_current.txt
+++ b/ui/ui-saved-instance-state/api/restricted_current.txt
@@ -10,11 +10,11 @@
   }
 
   public final class RememberSavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> T rememberSavedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public final class SavedInstanceStateKt {
-    method @androidx.compose.Composable public static <T> androidx.compose.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
+    method @androidx.compose.runtime.Composable public static <T> androidx.compose.runtime.MutableState<T> savedInstanceState(Object![]? inputs, androidx.compose.runtime.savedinstancestate.Saver<T,?> saver = autoSaver(), String? key = null, androidx.compose.runtime.SnapshotMutationPolicy<T> policy = referentialEqualityPolicy(), kotlin.jvm.functions.Function0<? extends T> init);
   }
 
   public interface Saver<Original, Saveable> {
@@ -41,7 +41,7 @@
 
   public final class UiSavedStateRegistryKt {
     method public static androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry UiSavedStateRegistry(java.util.Map<java.lang.String,?>? restoredValues, kotlin.jvm.functions.Function1<java.lang.Object,java.lang.Boolean> canBeSaved);
-    method public static androidx.compose.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
+    method public static androidx.compose.runtime.ProvidableAmbient<androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry> getUiSavedStateRegistryAmbient();
   }
 
 }
diff --git a/ui/ui-saved-instance-state/samples/src/main/java/androidx/compose/runtime/savedinstancestate/samples/Samples.kt b/ui/ui-saved-instance-state/samples/src/main/java/androidx/compose/runtime/savedinstancestate/samples/Samples.kt
index f93f4a6..3894bef 100644
--- a/ui/ui-saved-instance-state/samples/src/main/java/androidx/compose/runtime/savedinstancestate/samples/Samples.kt
+++ b/ui/ui-saved-instance-state/samples/src/main/java/androidx/compose/runtime/savedinstancestate/samples/Samples.kt
@@ -19,9 +19,9 @@
 package androidx.compose.runtime.savedinstancestate.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.listSaver
 import androidx.compose.runtime.savedinstancestate.mapSaver
diff --git a/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/ActivityRecreationTest.kt b/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/ActivityRecreationTest.kt
index 93b947b..296c7a6 100644
--- a/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/ActivityRecreationTest.kt
+++ b/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/ActivityRecreationTest.kt
@@ -21,8 +21,8 @@
 import android.widget.FrameLayout
 import android.widget.LinearLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Recomposer
-import androidx.compose.remember
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.remember
 import androidx.lifecycle.Lifecycle
 import androidx.test.core.app.ActivityScenario
 import androidx.test.filters.MediumTest
diff --git a/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceStateTest.kt b/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceStateTest.kt
index 482b682..77a8166 100644
--- a/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceStateTest.kt
+++ b/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceStateTest.kt
@@ -16,11 +16,11 @@
 
 package androidx.compose.runtime.savedinstancestate
 
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.filters.MediumTest
 import androidx.ui.test.StateRestorationTester
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceStateTest.kt b/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceStateTest.kt
index 0c576fe..5f033d7 100644
--- a/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceStateTest.kt
+++ b/ui/ui-saved-instance-state/src/androidAndroidTest/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceStateTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.runtime.savedinstancestate
 
-import androidx.compose.MutableState
+import androidx.compose.runtime.MutableState
 import androidx.test.filters.MediumTest
 import androidx.ui.test.StateRestorationTester
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceState.kt b/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceState.kt
index 7d78819..f0dae9b 100644
--- a/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceState.kt
+++ b/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/RememberSavedInstanceState.kt
@@ -16,12 +16,12 @@
 
 package androidx.compose.runtime.savedinstancestate
 
-import androidx.compose.Composable
-import androidx.compose.CompositionLifecycleObserver
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.MutableState
-import androidx.compose.currentComposer
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLifecycleObserver
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.remember
 
 /**
  * Remember the value produced by [init].
diff --git a/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceState.kt b/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceState.kt
index 2317477..a8c3d92 100644
--- a/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceState.kt
+++ b/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/SavedInstanceState.kt
@@ -16,12 +16,12 @@
 
 package androidx.compose.runtime.savedinstancestate
 
-import androidx.compose.Composable
-import androidx.compose.MutableState
-import androidx.compose.SnapshotMutationPolicy
-import androidx.compose.mutableStateOf
-import androidx.compose.referentialEqualityPolicy
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.SnapshotMutationPolicy
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.referentialEqualityPolicy
+import androidx.compose.runtime.state
 
 /**
  * Used to introduce a state value of type [T] into a composition.
diff --git a/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/UiSavedStateRegistry.kt b/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/UiSavedStateRegistry.kt
index c48ea61..dff81a3 100644
--- a/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/UiSavedStateRegistry.kt
+++ b/ui/ui-saved-instance-state/src/commonMain/kotlin/androidx/compose/runtime/savedinstancestate/UiSavedStateRegistry.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.runtime.savedinstancestate
 
-import androidx.compose.staticAmbientOf
+import androidx.compose.runtime.staticAmbientOf
 
 /**
  * Allows components to save and restore their state using the saved instance state mechanism.
diff --git a/ui/ui-saved-instance-state/src/test/java/androidx/compose/runtime/savedinstancestate/ListSaverTest.kt b/ui/ui-saved-instance-state/src/test/java/androidx/compose/runtime/savedinstancestate/ListSaverTest.kt
index 64baa1b..02e0285 100644
--- a/ui/ui-saved-instance-state/src/test/java/androidx/compose/runtime/savedinstancestate/ListSaverTest.kt
+++ b/ui/ui-saved-instance-state/src/test/java/androidx/compose/runtime/savedinstancestate/ListSaverTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.runtime.savedinstancestate
 
-import androidx.compose.mutableStateListOf
+import androidx.compose.runtime.mutableStateListOf
 import androidx.test.filters.SmallTest
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-test/api/0.1.0-dev16.txt b/ui/ui-test/api/0.1.0-dev16.txt
index 85bf33d..c36b0a4 100644
--- a/ui/ui-test/api/0.1.0-dev16.txt
+++ b/ui/ui-test/api/0.1.0-dev16.txt
@@ -127,7 +127,7 @@
   }
 
   public interface ComposeTestCase {
-    method @androidx.compose.Composable public void emitContent();
+    method @androidx.compose.runtime.Composable public void emitContent();
   }
 
   public interface ComposeTestCaseSetup {
diff --git a/ui/ui-test/api/current.txt b/ui/ui-test/api/current.txt
index 85bf33d..c36b0a4 100644
--- a/ui/ui-test/api/current.txt
+++ b/ui/ui-test/api/current.txt
@@ -127,7 +127,7 @@
   }
 
   public interface ComposeTestCase {
-    method @androidx.compose.Composable public void emitContent();
+    method @androidx.compose.runtime.Composable public void emitContent();
   }
 
   public interface ComposeTestCaseSetup {
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 85bf33d..c36b0a4 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
@@ -127,7 +127,7 @@
   }
 
   public interface ComposeTestCase {
-    method @androidx.compose.Composable public void emitContent();
+    method @androidx.compose.runtime.Composable public void emitContent();
   }
 
   public interface ComposeTestCaseSetup {
diff --git a/ui/ui-test/api/public_plus_experimental_current.txt b/ui/ui-test/api/public_plus_experimental_current.txt
index 85bf33d..c36b0a4 100644
--- a/ui/ui-test/api/public_plus_experimental_current.txt
+++ b/ui/ui-test/api/public_plus_experimental_current.txt
@@ -127,7 +127,7 @@
   }
 
   public interface ComposeTestCase {
-    method @androidx.compose.Composable public void emitContent();
+    method @androidx.compose.runtime.Composable public void emitContent();
   }
 
   public interface ComposeTestCaseSetup {
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 85bf33d..c36b0a4 100644
--- a/ui/ui-test/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-test/api/restricted_0.1.0-dev16.txt
@@ -127,7 +127,7 @@
   }
 
   public interface ComposeTestCase {
-    method @androidx.compose.Composable public void emitContent();
+    method @androidx.compose.runtime.Composable public void emitContent();
   }
 
   public interface ComposeTestCaseSetup {
diff --git a/ui/ui-test/api/restricted_current.txt b/ui/ui-test/api/restricted_current.txt
index 85bf33d..c36b0a4 100644
--- a/ui/ui-test/api/restricted_current.txt
+++ b/ui/ui-test/api/restricted_current.txt
@@ -127,7 +127,7 @@
   }
 
   public interface ComposeTestCase {
-    method @androidx.compose.Composable public void emitContent();
+    method @androidx.compose.runtime.Composable public void emitContent();
   }
 
   public interface ComposeTestCaseSetup {
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ActivityWithActionBar.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ActivityWithActionBar.kt
index a9585e3..6202532 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ActivityWithActionBar.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ActivityWithActionBar.kt
@@ -20,8 +20,8 @@
 import android.view.Gravity
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Recomposer
 import androidx.ui.core.setContent
 
 // The presence of an ActionBar follows from the theme set in AndroidManifest.xml
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/AndroidComposeTestCaseRunnerTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/AndroidComposeTestCaseRunnerTest.kt
index ae5536c..06eaf46 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/AndroidComposeTestCaseRunnerTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/AndroidComposeTestCaseRunnerTest.kt
@@ -16,10 +16,10 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
-import androidx.compose.onPreCommit
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onPreCommit
+import androidx.compose.runtime.state
 import androidx.test.filters.SmallTest
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertExistsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertExistsTest.kt
index 98c2ba6..6fe3989 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertExistsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertExistsTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
index 6ccecc1..d739176 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/AssertsTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
 import androidx.compose.foundation.selection.ToggleableState
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
index e813186..76fde6a 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/CallSemanticsActionTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt
index 6846e37c..30f0aec 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ComposeIdlingResourceTest.kt
@@ -23,9 +23,9 @@
 import androidx.compose.animation.core.snap
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.State
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.State
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.espresso.Espresso.onIdle
 import androidx.test.filters.LargeTest
 import androidx.compose.animation.transition
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
index e2c6b6c..97b2a63 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/ErrorMessagesTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
index 5512ea9..ccedfe9 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindAllTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.layout.Column
 import androidx.compose.material.Checkbox
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
index 2b07a5b..b39c199 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FindersTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
index e793cc1..2e696c9 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/FirstDrawTest.kt
@@ -19,7 +19,7 @@
 import android.view.ViewGroup
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Recomposer
 import androidx.test.espresso.Espresso.onIdle
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
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 5488cbd..ed88484 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
@@ -20,11 +20,11 @@
 import android.view.ViewGroup
 import android.widget.FrameLayout
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.Recomposer
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.setValue
 import androidx.test.espresso.Espresso.onView
 import androidx.test.espresso.ViewInteraction
 import androidx.test.espresso.assertion.ViewAssertions.matches
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
index c485862..4a43dee 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
@@ -20,9 +20,9 @@
 import android.widget.LinearLayout
 import android.widget.TextView
 import androidx.activity.ComponentActivity
-import androidx.compose.MutableState
-import androidx.compose.Recomposer
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.MutableState
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.espresso.Espresso
 import androidx.test.espresso.assertion.ViewAssertions.matches
 import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
index b4ab4a5..fd6fa65 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/PrintToStringTest.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
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 19a57a3..d28aea1b 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.semantics.semantics
 import androidx.ui.core.testTag
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
index dffa7ae..f289cb7 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TestAnimationClockTest.kt
@@ -21,13 +21,13 @@
 import androidx.compose.animation.core.snap
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
-import androidx.compose.Composable
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.State
-import androidx.compose.currentComposer
-import androidx.compose.mutableStateOf
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.State
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.test.espresso.Espresso.onIdle
 import androidx.test.filters.MediumTest
 import androidx.compose.animation.transition
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
index cc93855..bcee0c8 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TextActionsTest.kt
@@ -16,8 +16,8 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt
index daaa8da..20a21cb 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/TimeOutTest.kt
@@ -17,9 +17,9 @@
 package androidx.ui.test
 
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.mutableStateOf
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.state
 import androidx.test.espresso.AppNotIdleException
 import androidx.test.espresso.IdlingPolicies
 import androidx.test.espresso.IdlingPolicy
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/WaitingForOnCommitCallbackTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/WaitingForOnCommitCallbackTest.kt
index 85e87ae..e10e0cc 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/WaitingForOnCommitCallbackTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/WaitingForOnCommitCallbackTest.kt
@@ -16,10 +16,10 @@
 
 package androidx.ui.test
 
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onCommit
-import androidx.compose.setValue
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.setValue
 import androidx.test.filters.FlakyTest
 import androidx.test.filters.MediumTest
 import com.google.common.truth.Truth.assertThat
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt
index af00c5e..368df6f 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/gesturescope/SendClickTest.kt
@@ -17,7 +17,7 @@
 package androidx.ui.test.gesturescope
 
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.ext.junit.rules.ActivityScenarioRule
 import androidx.test.filters.MediumTest
 import androidx.ui.core.changedToUp
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 53712a7..297637a 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
@@ -16,7 +16,7 @@
 
 package androidx.ui.test.gesturescope
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.test.filters.MediumTest
 import androidx.ui.core.Alignment
 import androidx.ui.core.Modifier
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/BoundaryNodes.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/BoundaryNodes.kt
index 0227aad..3331730 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/BoundaryNodes.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/BoundaryNodes.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test.util
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/ClickableTestBox.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/ClickableTestBox.kt
index 9c64b1c..197c66e 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/util/ClickableTestBox.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/util/ClickableTestBox.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test.util
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.Modifier
 import androidx.ui.core.testTag
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestCase.kt b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestCase.kt
index a3a8807..54d3618 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestCase.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/ComposeTestCase.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 /**
  * To be implemented to provide a test case that is then executed by [ComposeTestRule] or can be
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 4779f3d..4d607ab 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
@@ -18,7 +18,7 @@
 
 import android.util.DisplayMetrics
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.test.android.createAndroidComposeRule
 import androidx.compose.ui.unit.Density
 import org.junit.rules.TestRule
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/StateRestorationTester.kt b/ui/ui-test/src/main/java/androidx/ui/test/StateRestorationTester.kt
index 08ea6a1..6fcbab8 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/StateRestorationTester.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/StateRestorationTester.kt
@@ -16,12 +16,12 @@
 
 package androidx.ui.test
 
-import androidx.compose.Composable
-import androidx.compose.Providers
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.remember
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
 import androidx.compose.runtime.savedinstancestate.UiSavedStateRegistry
 import androidx.compose.runtime.savedinstancestate.UiSavedStateRegistryAmbient
 import androidx.compose.runtime.savedinstancestate.rememberSavedInstanceState
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestCaseRunner.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestCaseRunner.kt
index 7e5dcde..f218043 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestCaseRunner.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/AndroidComposeTestCaseRunner.kt
@@ -29,11 +29,11 @@
 import android.view.ViewGroup
 import android.widget.ImageView
 import androidx.activity.ComponentActivity
-import androidx.compose.Composition
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
 import androidx.compose.runtime.dispatch.MonotonicFrameClock
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.ui.core.AndroidOwner
 import androidx.ui.core.setContent
 import androidx.ui.test.ComposeBenchmarkScope
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 8a5f5b7..fab248a 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
@@ -20,8 +20,8 @@
 import android.util.SparseArray
 import android.view.ViewGroup
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.Recomposer
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Recomposer
 import androidx.test.ext.junit.rules.ActivityScenarioRule
 import androidx.compose.animation.transitionsEnabled
 import androidx.ui.core.setContent
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt
index ab3de0f..65431be 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/ComposeIdlingResource.kt
@@ -18,9 +18,9 @@
 
 import android.os.Handler
 import android.os.Looper
-import androidx.compose.ExperimentalComposeApi
-import androidx.compose.Recomposer
-import androidx.compose.snapshots.Snapshot
+import androidx.compose.runtime.ExperimentalComposeApi
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.snapshots.Snapshot
 import androidx.test.espresso.IdlingRegistry
 import androidx.test.espresso.IdlingResource
 import androidx.ui.test.TestAnimationClock
diff --git a/ui/ui-test/src/main/java/androidx/ui/test/android/SynchronizedTreeCollector.kt b/ui/ui-test/src/main/java/androidx/ui/test/android/SynchronizedTreeCollector.kt
index b0083bc..4dd33b8 100644
--- a/ui/ui-test/src/main/java/androidx/ui/test/android/SynchronizedTreeCollector.kt
+++ b/ui/ui-test/src/main/java/androidx/ui/test/android/SynchronizedTreeCollector.kt
@@ -17,7 +17,7 @@
 package androidx.ui.test.android
 
 import android.view.Choreographer
-import androidx.compose.onCommit
+import androidx.compose.runtime.onCommit
 import androidx.test.espresso.AppNotIdleException
 import androidx.test.espresso.Espresso
 import androidx.test.espresso.IdlingRegistry
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 05e1811..1eae8c4 100644
--- a/ui/ui-text-core/api/0.1.0-dev16.txt
+++ b/ui/ui-text-core/api/0.1.0-dev16.txt
@@ -1,18 +1,18 @@
 // Signature format: 3.0
 package androidx.compose.ui.text {
 
-  @androidx.compose.Immutable public final class AnnotatedString {
+  @androidx.compose.runtime.Immutable public final class AnnotatedString {
     ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
@@ -36,14 +36,14 @@
     property public final int length;
   }
 
-  @androidx.compose.Immutable public static final class AnnotatedString.Range<T> {
+  @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
     ctor public AnnotatedString.Range(T! item, int start, int end, String tag);
     ctor public AnnotatedString.Range(T! item, int start, int end);
     method public T! component1();
     method public int component2();
     method public int component3();
     method public String component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -198,29 +198,29 @@
     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);
   }
 
-  @androidx.compose.Immutable public final class ParagraphStyle {
+  @androidx.compose.runtime.Immutable public final class ParagraphStyle {
     method public androidx.compose.ui.text.style.TextAlign? component1();
     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-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 @androidx.compose.runtime.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();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Placeholder {
+  @androidx.compose.runtime.Immutable public final class Placeholder {
     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-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.runtime.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();
@@ -245,7 +245,7 @@
     method public void showSoftwareKeyboard();
   }
 
-  @androidx.compose.Immutable public final class SpanStyle {
+  @androidx.compose.runtime.Immutable public final class SpanStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -275,8 +275,8 @@
     method public androidx.compose.ui.graphics.Shadow? getShadow();
     method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
@@ -365,13 +365,13 @@
     field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
-  @androidx.compose.Immutable public final class TextRange {
+  @androidx.compose.runtime.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
     method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -398,7 +398,7 @@
     method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
-  @androidx.compose.Immutable public final class TextStyle {
+  @androidx.compose.runtime.Immutable public final class TextStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -436,14 +436,14 @@
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
     field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
@@ -469,7 +469,7 @@
   public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
-  @androidx.compose.Immutable public interface Font {
+  @androidx.compose.runtime.Immutable public interface Font {
     method public androidx.compose.ui.text.font.FontStyle getStyle();
     method public androidx.compose.ui.text.font.FontWeight getWeight();
     property public abstract androidx.compose.ui.text.font.FontStyle style;
@@ -480,7 +480,7 @@
     method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
-  @androidx.compose.Immutable public abstract sealed class FontFamily {
+  @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
     field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
@@ -499,22 +499,22 @@
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
     method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+  @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
     ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public java.util.List<androidx.compose.ui.text.font.Font> component1();
     method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public androidx.compose.ui.text.font.Font get(int index);
     method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
@@ -543,11 +543,11 @@
     enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+  @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
     method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
     field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
@@ -595,7 +595,7 @@
     method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+  @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
@@ -673,13 +673,13 @@
     field public static final int NOWHERE = -1; // 0xffffffff
   }
 
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+  @Deprecated @androidx.compose.runtime.Immutable public final class EditorValue {
     ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor @Deprecated public EditorValue();
     method @Deprecated public String component1();
     method @Deprecated public androidx.compose.ui.text.TextRange component2();
     method @Deprecated public androidx.compose.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
     method @Deprecated public String getSelectedText();
     method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
@@ -794,13 +794,13 @@
     method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
   }
 
-  @androidx.compose.Immutable public final class TextFieldValue {
+  @androidx.compose.runtime.Immutable public final class TextFieldValue {
     ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor public TextFieldValue();
     method public String component1();
     method public androidx.compose.ui.text.TextRange component2();
     method public androidx.compose.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method public androidx.compose.ui.text.TextRange? getComposition();
     method public androidx.compose.ui.text.TextRange getSelection();
     method public String getText();
@@ -844,7 +844,7 @@
     method public androidx.compose.ui.text.AnnotatedString getTransformedText();
   }
 
-  @androidx.compose.Immutable public interface VisualTransformation {
+  @androidx.compose.runtime.Immutable public interface VisualTransformation {
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
   }
@@ -861,7 +861,7 @@
   public final class AndroidPlatformLocaleKt {
   }
 
-  @androidx.compose.Immutable public final class Locale {
+  @androidx.compose.runtime.Immutable public final class Locale {
     ctor public Locale(String languageTag);
     method public String getLanguage();
     method public String getRegion();
@@ -878,14 +878,14 @@
     property public final androidx.compose.ui.text.intl.Locale current;
   }
 
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+  @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
     ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     ctor public LocaleList(String languageTags);
     ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
     method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     method public operator androidx.compose.ui.text.intl.Locale get(int i);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
     method public int getSize();
@@ -947,14 +947,14 @@
 
 package androidx.compose.ui.text.style {
 
-  @androidx.compose.Immutable public final inline class BaselineShift {
+  @androidx.compose.runtime.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
     method public static float constructor-impl(float multiplier);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getMultiplier();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(float p);
     field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
@@ -968,7 +968,7 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
@@ -989,10 +989,10 @@
     enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
-  @androidx.compose.Immutable public final class TextDecoration {
+  @androidx.compose.runtime.Immutable public final class TextDecoration {
     method public int component1();
     method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
     method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
     field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
@@ -1018,12 +1018,12 @@
     enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final class TextGeometricTransform {
+  @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
     ctor public TextGeometricTransform(float scaleX, float skewX);
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
     method public float getScaleX();
     method public float getSkewX();
     field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
@@ -1036,10 +1036,10 @@
     method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class TextIndent {
+  @androidx.compose.runtime.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-8E83U4Q(long firstLine, long restLine);
+    method @androidx.compose.runtime.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 05e1811..1eae8c4 100644
--- a/ui/ui-text-core/api/current.txt
+++ b/ui/ui-text-core/api/current.txt
@@ -1,18 +1,18 @@
 // Signature format: 3.0
 package androidx.compose.ui.text {
 
-  @androidx.compose.Immutable public final class AnnotatedString {
+  @androidx.compose.runtime.Immutable public final class AnnotatedString {
     ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
@@ -36,14 +36,14 @@
     property public final int length;
   }
 
-  @androidx.compose.Immutable public static final class AnnotatedString.Range<T> {
+  @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
     ctor public AnnotatedString.Range(T! item, int start, int end, String tag);
     ctor public AnnotatedString.Range(T! item, int start, int end);
     method public T! component1();
     method public int component2();
     method public int component3();
     method public String component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -198,29 +198,29 @@
     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);
   }
 
-  @androidx.compose.Immutable public final class ParagraphStyle {
+  @androidx.compose.runtime.Immutable public final class ParagraphStyle {
     method public androidx.compose.ui.text.style.TextAlign? component1();
     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-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 @androidx.compose.runtime.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();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Placeholder {
+  @androidx.compose.runtime.Immutable public final class Placeholder {
     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-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.runtime.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();
@@ -245,7 +245,7 @@
     method public void showSoftwareKeyboard();
   }
 
-  @androidx.compose.Immutable public final class SpanStyle {
+  @androidx.compose.runtime.Immutable public final class SpanStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -275,8 +275,8 @@
     method public androidx.compose.ui.graphics.Shadow? getShadow();
     method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
@@ -365,13 +365,13 @@
     field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
-  @androidx.compose.Immutable public final class TextRange {
+  @androidx.compose.runtime.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
     method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -398,7 +398,7 @@
     method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
-  @androidx.compose.Immutable public final class TextStyle {
+  @androidx.compose.runtime.Immutable public final class TextStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -436,14 +436,14 @@
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
     field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
@@ -469,7 +469,7 @@
   public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
-  @androidx.compose.Immutable public interface Font {
+  @androidx.compose.runtime.Immutable public interface Font {
     method public androidx.compose.ui.text.font.FontStyle getStyle();
     method public androidx.compose.ui.text.font.FontWeight getWeight();
     property public abstract androidx.compose.ui.text.font.FontStyle style;
@@ -480,7 +480,7 @@
     method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
-  @androidx.compose.Immutable public abstract sealed class FontFamily {
+  @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
     field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
@@ -499,22 +499,22 @@
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
     method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+  @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
     ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public java.util.List<androidx.compose.ui.text.font.Font> component1();
     method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public androidx.compose.ui.text.font.Font get(int index);
     method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
@@ -543,11 +543,11 @@
     enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+  @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
     method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
     field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
@@ -595,7 +595,7 @@
     method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+  @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
@@ -673,13 +673,13 @@
     field public static final int NOWHERE = -1; // 0xffffffff
   }
 
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+  @Deprecated @androidx.compose.runtime.Immutable public final class EditorValue {
     ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor @Deprecated public EditorValue();
     method @Deprecated public String component1();
     method @Deprecated public androidx.compose.ui.text.TextRange component2();
     method @Deprecated public androidx.compose.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
     method @Deprecated public String getSelectedText();
     method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
@@ -794,13 +794,13 @@
     method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
   }
 
-  @androidx.compose.Immutable public final class TextFieldValue {
+  @androidx.compose.runtime.Immutable public final class TextFieldValue {
     ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor public TextFieldValue();
     method public String component1();
     method public androidx.compose.ui.text.TextRange component2();
     method public androidx.compose.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method public androidx.compose.ui.text.TextRange? getComposition();
     method public androidx.compose.ui.text.TextRange getSelection();
     method public String getText();
@@ -844,7 +844,7 @@
     method public androidx.compose.ui.text.AnnotatedString getTransformedText();
   }
 
-  @androidx.compose.Immutable public interface VisualTransformation {
+  @androidx.compose.runtime.Immutable public interface VisualTransformation {
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
   }
@@ -861,7 +861,7 @@
   public final class AndroidPlatformLocaleKt {
   }
 
-  @androidx.compose.Immutable public final class Locale {
+  @androidx.compose.runtime.Immutable public final class Locale {
     ctor public Locale(String languageTag);
     method public String getLanguage();
     method public String getRegion();
@@ -878,14 +878,14 @@
     property public final androidx.compose.ui.text.intl.Locale current;
   }
 
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+  @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
     ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     ctor public LocaleList(String languageTags);
     ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
     method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     method public operator androidx.compose.ui.text.intl.Locale get(int i);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
     method public int getSize();
@@ -947,14 +947,14 @@
 
 package androidx.compose.ui.text.style {
 
-  @androidx.compose.Immutable public final inline class BaselineShift {
+  @androidx.compose.runtime.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
     method public static float constructor-impl(float multiplier);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getMultiplier();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(float p);
     field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
@@ -968,7 +968,7 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
@@ -989,10 +989,10 @@
     enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
-  @androidx.compose.Immutable public final class TextDecoration {
+  @androidx.compose.runtime.Immutable public final class TextDecoration {
     method public int component1();
     method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
     method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
     field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
@@ -1018,12 +1018,12 @@
     enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final class TextGeometricTransform {
+  @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
     ctor public TextGeometricTransform(float scaleX, float skewX);
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
     method public float getScaleX();
     method public float getSkewX();
     field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
@@ -1036,10 +1036,10 @@
     method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class TextIndent {
+  @androidx.compose.runtime.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-8E83U4Q(long firstLine, long restLine);
+    method @androidx.compose.runtime.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 05e1811..1eae8c4 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
@@ -1,18 +1,18 @@
 // Signature format: 3.0
 package androidx.compose.ui.text {
 
-  @androidx.compose.Immutable public final class AnnotatedString {
+  @androidx.compose.runtime.Immutable public final class AnnotatedString {
     ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
@@ -36,14 +36,14 @@
     property public final int length;
   }
 
-  @androidx.compose.Immutable public static final class AnnotatedString.Range<T> {
+  @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
     ctor public AnnotatedString.Range(T! item, int start, int end, String tag);
     ctor public AnnotatedString.Range(T! item, int start, int end);
     method public T! component1();
     method public int component2();
     method public int component3();
     method public String component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -198,29 +198,29 @@
     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);
   }
 
-  @androidx.compose.Immutable public final class ParagraphStyle {
+  @androidx.compose.runtime.Immutable public final class ParagraphStyle {
     method public androidx.compose.ui.text.style.TextAlign? component1();
     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-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 @androidx.compose.runtime.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();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Placeholder {
+  @androidx.compose.runtime.Immutable public final class Placeholder {
     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-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.runtime.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();
@@ -245,7 +245,7 @@
     method public void showSoftwareKeyboard();
   }
 
-  @androidx.compose.Immutable public final class SpanStyle {
+  @androidx.compose.runtime.Immutable public final class SpanStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -275,8 +275,8 @@
     method public androidx.compose.ui.graphics.Shadow? getShadow();
     method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
@@ -365,13 +365,13 @@
     field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
-  @androidx.compose.Immutable public final class TextRange {
+  @androidx.compose.runtime.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
     method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -398,7 +398,7 @@
     method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
-  @androidx.compose.Immutable public final class TextStyle {
+  @androidx.compose.runtime.Immutable public final class TextStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -436,14 +436,14 @@
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
     field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
@@ -469,7 +469,7 @@
   public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
-  @androidx.compose.Immutable public interface Font {
+  @androidx.compose.runtime.Immutable public interface Font {
     method public androidx.compose.ui.text.font.FontStyle getStyle();
     method public androidx.compose.ui.text.font.FontWeight getWeight();
     property public abstract androidx.compose.ui.text.font.FontStyle style;
@@ -480,7 +480,7 @@
     method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
-  @androidx.compose.Immutable public abstract sealed class FontFamily {
+  @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
     field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
@@ -499,22 +499,22 @@
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
     method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+  @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
     ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public java.util.List<androidx.compose.ui.text.font.Font> component1();
     method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public androidx.compose.ui.text.font.Font get(int index);
     method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
@@ -543,11 +543,11 @@
     enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+  @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
     method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
     field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
@@ -595,7 +595,7 @@
     method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+  @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
@@ -673,13 +673,13 @@
     field public static final int NOWHERE = -1; // 0xffffffff
   }
 
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+  @Deprecated @androidx.compose.runtime.Immutable public final class EditorValue {
     ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor @Deprecated public EditorValue();
     method @Deprecated public String component1();
     method @Deprecated public androidx.compose.ui.text.TextRange component2();
     method @Deprecated public androidx.compose.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
     method @Deprecated public String getSelectedText();
     method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
@@ -794,13 +794,13 @@
     method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
   }
 
-  @androidx.compose.Immutable public final class TextFieldValue {
+  @androidx.compose.runtime.Immutable public final class TextFieldValue {
     ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor public TextFieldValue();
     method public String component1();
     method public androidx.compose.ui.text.TextRange component2();
     method public androidx.compose.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method public androidx.compose.ui.text.TextRange? getComposition();
     method public androidx.compose.ui.text.TextRange getSelection();
     method public String getText();
@@ -844,7 +844,7 @@
     method public androidx.compose.ui.text.AnnotatedString getTransformedText();
   }
 
-  @androidx.compose.Immutable public interface VisualTransformation {
+  @androidx.compose.runtime.Immutable public interface VisualTransformation {
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
   }
@@ -861,7 +861,7 @@
   public final class AndroidPlatformLocaleKt {
   }
 
-  @androidx.compose.Immutable public final class Locale {
+  @androidx.compose.runtime.Immutable public final class Locale {
     ctor public Locale(String languageTag);
     method public String getLanguage();
     method public String getRegion();
@@ -878,14 +878,14 @@
     property public final androidx.compose.ui.text.intl.Locale current;
   }
 
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+  @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
     ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     ctor public LocaleList(String languageTags);
     ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
     method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     method public operator androidx.compose.ui.text.intl.Locale get(int i);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
     method public int getSize();
@@ -947,14 +947,14 @@
 
 package androidx.compose.ui.text.style {
 
-  @androidx.compose.Immutable public final inline class BaselineShift {
+  @androidx.compose.runtime.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
     method public static float constructor-impl(float multiplier);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getMultiplier();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(float p);
     field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
@@ -968,7 +968,7 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
@@ -989,10 +989,10 @@
     enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
-  @androidx.compose.Immutable public final class TextDecoration {
+  @androidx.compose.runtime.Immutable public final class TextDecoration {
     method public int component1();
     method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
     method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
     field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
@@ -1018,12 +1018,12 @@
     enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final class TextGeometricTransform {
+  @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
     ctor public TextGeometricTransform(float scaleX, float skewX);
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
     method public float getScaleX();
     method public float getSkewX();
     field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
@@ -1036,10 +1036,10 @@
     method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class TextIndent {
+  @androidx.compose.runtime.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-8E83U4Q(long firstLine, long restLine);
+    method @androidx.compose.runtime.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 05e1811..1eae8c4 100644
--- a/ui/ui-text-core/api/public_plus_experimental_current.txt
+++ b/ui/ui-text-core/api/public_plus_experimental_current.txt
@@ -1,18 +1,18 @@
 // Signature format: 3.0
 package androidx.compose.ui.text {
 
-  @androidx.compose.Immutable public final class AnnotatedString {
+  @androidx.compose.runtime.Immutable public final class AnnotatedString {
     ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
@@ -36,14 +36,14 @@
     property public final int length;
   }
 
-  @androidx.compose.Immutable public static final class AnnotatedString.Range<T> {
+  @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
     ctor public AnnotatedString.Range(T! item, int start, int end, String tag);
     ctor public AnnotatedString.Range(T! item, int start, int end);
     method public T! component1();
     method public int component2();
     method public int component3();
     method public String component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -198,29 +198,29 @@
     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);
   }
 
-  @androidx.compose.Immutable public final class ParagraphStyle {
+  @androidx.compose.runtime.Immutable public final class ParagraphStyle {
     method public androidx.compose.ui.text.style.TextAlign? component1();
     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-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 @androidx.compose.runtime.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();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Placeholder {
+  @androidx.compose.runtime.Immutable public final class Placeholder {
     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-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.runtime.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();
@@ -245,7 +245,7 @@
     method public void showSoftwareKeyboard();
   }
 
-  @androidx.compose.Immutable public final class SpanStyle {
+  @androidx.compose.runtime.Immutable public final class SpanStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -275,8 +275,8 @@
     method public androidx.compose.ui.graphics.Shadow? getShadow();
     method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
@@ -365,13 +365,13 @@
     field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
-  @androidx.compose.Immutable public final class TextRange {
+  @androidx.compose.runtime.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
     method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -398,7 +398,7 @@
     method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
-  @androidx.compose.Immutable public final class TextStyle {
+  @androidx.compose.runtime.Immutable public final class TextStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -436,14 +436,14 @@
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
     field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
@@ -469,7 +469,7 @@
   public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
-  @androidx.compose.Immutable public interface Font {
+  @androidx.compose.runtime.Immutable public interface Font {
     method public androidx.compose.ui.text.font.FontStyle getStyle();
     method public androidx.compose.ui.text.font.FontWeight getWeight();
     property public abstract androidx.compose.ui.text.font.FontStyle style;
@@ -480,7 +480,7 @@
     method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
-  @androidx.compose.Immutable public abstract sealed class FontFamily {
+  @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
     field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
@@ -499,22 +499,22 @@
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
     method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+  @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
     ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public java.util.List<androidx.compose.ui.text.font.Font> component1();
     method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public androidx.compose.ui.text.font.Font get(int index);
     method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
@@ -543,11 +543,11 @@
     enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+  @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
     method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
     field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
@@ -595,7 +595,7 @@
     method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+  @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
@@ -673,13 +673,13 @@
     field public static final int NOWHERE = -1; // 0xffffffff
   }
 
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+  @Deprecated @androidx.compose.runtime.Immutable public final class EditorValue {
     ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor @Deprecated public EditorValue();
     method @Deprecated public String component1();
     method @Deprecated public androidx.compose.ui.text.TextRange component2();
     method @Deprecated public androidx.compose.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
     method @Deprecated public String getSelectedText();
     method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
@@ -794,13 +794,13 @@
     method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
   }
 
-  @androidx.compose.Immutable public final class TextFieldValue {
+  @androidx.compose.runtime.Immutable public final class TextFieldValue {
     ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor public TextFieldValue();
     method public String component1();
     method public androidx.compose.ui.text.TextRange component2();
     method public androidx.compose.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method public androidx.compose.ui.text.TextRange? getComposition();
     method public androidx.compose.ui.text.TextRange getSelection();
     method public String getText();
@@ -844,7 +844,7 @@
     method public androidx.compose.ui.text.AnnotatedString getTransformedText();
   }
 
-  @androidx.compose.Immutable public interface VisualTransformation {
+  @androidx.compose.runtime.Immutable public interface VisualTransformation {
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
   }
@@ -861,7 +861,7 @@
   public final class AndroidPlatformLocaleKt {
   }
 
-  @androidx.compose.Immutable public final class Locale {
+  @androidx.compose.runtime.Immutable public final class Locale {
     ctor public Locale(String languageTag);
     method public String getLanguage();
     method public String getRegion();
@@ -878,14 +878,14 @@
     property public final androidx.compose.ui.text.intl.Locale current;
   }
 
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+  @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
     ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     ctor public LocaleList(String languageTags);
     ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
     method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     method public operator androidx.compose.ui.text.intl.Locale get(int i);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
     method public int getSize();
@@ -947,14 +947,14 @@
 
 package androidx.compose.ui.text.style {
 
-  @androidx.compose.Immutable public final inline class BaselineShift {
+  @androidx.compose.runtime.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
     method public static float constructor-impl(float multiplier);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getMultiplier();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(float p);
     field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
@@ -968,7 +968,7 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
@@ -989,10 +989,10 @@
     enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
-  @androidx.compose.Immutable public final class TextDecoration {
+  @androidx.compose.runtime.Immutable public final class TextDecoration {
     method public int component1();
     method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
     method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
     field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
@@ -1018,12 +1018,12 @@
     enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final class TextGeometricTransform {
+  @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
     ctor public TextGeometricTransform(float scaleX, float skewX);
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
     method public float getScaleX();
     method public float getSkewX();
     field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
@@ -1036,10 +1036,10 @@
     method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class TextIndent {
+  @androidx.compose.runtime.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-8E83U4Q(long firstLine, long restLine);
+    method @androidx.compose.runtime.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 05e1811..1eae8c4 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
@@ -1,18 +1,18 @@
 // Signature format: 3.0
 package androidx.compose.ui.text {
 
-  @androidx.compose.Immutable public final class AnnotatedString {
+  @androidx.compose.runtime.Immutable public final class AnnotatedString {
     ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
@@ -36,14 +36,14 @@
     property public final int length;
   }
 
-  @androidx.compose.Immutable public static final class AnnotatedString.Range<T> {
+  @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
     ctor public AnnotatedString.Range(T! item, int start, int end, String tag);
     ctor public AnnotatedString.Range(T! item, int start, int end);
     method public T! component1();
     method public int component2();
     method public int component3();
     method public String component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -198,29 +198,29 @@
     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);
   }
 
-  @androidx.compose.Immutable public final class ParagraphStyle {
+  @androidx.compose.runtime.Immutable public final class ParagraphStyle {
     method public androidx.compose.ui.text.style.TextAlign? component1();
     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-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 @androidx.compose.runtime.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();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Placeholder {
+  @androidx.compose.runtime.Immutable public final class Placeholder {
     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-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.runtime.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();
@@ -245,7 +245,7 @@
     method public void showSoftwareKeyboard();
   }
 
-  @androidx.compose.Immutable public final class SpanStyle {
+  @androidx.compose.runtime.Immutable public final class SpanStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -275,8 +275,8 @@
     method public androidx.compose.ui.graphics.Shadow? getShadow();
     method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
@@ -365,13 +365,13 @@
     field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
-  @androidx.compose.Immutable public final class TextRange {
+  @androidx.compose.runtime.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
     method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -398,7 +398,7 @@
     method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
-  @androidx.compose.Immutable public final class TextStyle {
+  @androidx.compose.runtime.Immutable public final class TextStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -436,14 +436,14 @@
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
     field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
@@ -469,7 +469,7 @@
   public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
-  @androidx.compose.Immutable public interface Font {
+  @androidx.compose.runtime.Immutable public interface Font {
     method public androidx.compose.ui.text.font.FontStyle getStyle();
     method public androidx.compose.ui.text.font.FontWeight getWeight();
     property public abstract androidx.compose.ui.text.font.FontStyle style;
@@ -480,7 +480,7 @@
     method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
-  @androidx.compose.Immutable public abstract sealed class FontFamily {
+  @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
     field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
@@ -499,22 +499,22 @@
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
     method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+  @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
     ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public java.util.List<androidx.compose.ui.text.font.Font> component1();
     method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public androidx.compose.ui.text.font.Font get(int index);
     method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
@@ -543,11 +543,11 @@
     enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+  @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
     method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
     field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
@@ -595,7 +595,7 @@
     method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+  @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
@@ -673,13 +673,13 @@
     field public static final int NOWHERE = -1; // 0xffffffff
   }
 
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+  @Deprecated @androidx.compose.runtime.Immutable public final class EditorValue {
     ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor @Deprecated public EditorValue();
     method @Deprecated public String component1();
     method @Deprecated public androidx.compose.ui.text.TextRange component2();
     method @Deprecated public androidx.compose.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
     method @Deprecated public String getSelectedText();
     method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
@@ -794,13 +794,13 @@
     method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
   }
 
-  @androidx.compose.Immutable public final class TextFieldValue {
+  @androidx.compose.runtime.Immutable public final class TextFieldValue {
     ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor public TextFieldValue();
     method public String component1();
     method public androidx.compose.ui.text.TextRange component2();
     method public androidx.compose.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method public androidx.compose.ui.text.TextRange? getComposition();
     method public androidx.compose.ui.text.TextRange getSelection();
     method public String getText();
@@ -844,7 +844,7 @@
     method public androidx.compose.ui.text.AnnotatedString getTransformedText();
   }
 
-  @androidx.compose.Immutable public interface VisualTransformation {
+  @androidx.compose.runtime.Immutable public interface VisualTransformation {
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
   }
@@ -861,7 +861,7 @@
   public final class AndroidPlatformLocaleKt {
   }
 
-  @androidx.compose.Immutable public final class Locale {
+  @androidx.compose.runtime.Immutable public final class Locale {
     ctor public Locale(String languageTag);
     method public String getLanguage();
     method public String getRegion();
@@ -878,14 +878,14 @@
     property public final androidx.compose.ui.text.intl.Locale current;
   }
 
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+  @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
     ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     ctor public LocaleList(String languageTags);
     ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
     method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     method public operator androidx.compose.ui.text.intl.Locale get(int i);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
     method public int getSize();
@@ -947,14 +947,14 @@
 
 package androidx.compose.ui.text.style {
 
-  @androidx.compose.Immutable public final inline class BaselineShift {
+  @androidx.compose.runtime.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
     method public static float constructor-impl(float multiplier);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getMultiplier();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(float p);
     field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
@@ -968,7 +968,7 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
@@ -989,10 +989,10 @@
     enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
-  @androidx.compose.Immutable public final class TextDecoration {
+  @androidx.compose.runtime.Immutable public final class TextDecoration {
     method public int component1();
     method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
     method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
     field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
@@ -1018,12 +1018,12 @@
     enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final class TextGeometricTransform {
+  @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
     ctor public TextGeometricTransform(float scaleX, float skewX);
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
     method public float getScaleX();
     method public float getSkewX();
     field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
@@ -1036,10 +1036,10 @@
     method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class TextIndent {
+  @androidx.compose.runtime.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-8E83U4Q(long firstLine, long restLine);
+    method @androidx.compose.runtime.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 05e1811..1eae8c4 100644
--- a/ui/ui-text-core/api/restricted_current.txt
+++ b/ui/ui-text-core/api/restricted_current.txt
@@ -1,18 +1,18 @@
 // Signature format: 3.0
 package androidx.compose.ui.text {
 
-  @androidx.compose.Immutable public final class AnnotatedString {
+  @androidx.compose.runtime.Immutable public final class AnnotatedString {
     ctor public AnnotatedString(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles);
     method public String component1();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> component2();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString copy(String text, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> spanStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> paragraphStyles, java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> annotations);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.ParagraphStyle>> getParagraphStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<androidx.compose.ui.text.SpanStyle>> getSpanStyles();
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(String tag, int start, int end);
     method public java.util.List<androidx.compose.ui.text.AnnotatedString.Range<java.lang.String>> getStringAnnotations(int start, int end);
     method public String getText();
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.AnnotatedString plus(androidx.compose.ui.text.AnnotatedString other);
   }
 
   public static final class AnnotatedString.Builder {
@@ -36,14 +36,14 @@
     property public final int length;
   }
 
-  @androidx.compose.Immutable public static final class AnnotatedString.Range<T> {
+  @androidx.compose.runtime.Immutable public static final class AnnotatedString.Range<T> {
     ctor public AnnotatedString.Range(T! item, int start, int end, String tag);
     ctor public AnnotatedString.Range(T! item, int start, int end);
     method public T! component1();
     method public int component2();
     method public int component3();
     method public String component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.AnnotatedString.Range<T> copy(T! item, int start, int end, String tag);
     method public int getEnd();
     method public T! getItem();
     method public int getStart();
@@ -198,29 +198,29 @@
     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);
   }
 
-  @androidx.compose.Immutable public final class ParagraphStyle {
+  @androidx.compose.runtime.Immutable public final class ParagraphStyle {
     method public androidx.compose.ui.text.style.TextAlign? component1();
     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-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 @androidx.compose.runtime.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();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle merge(androidx.compose.ui.text.ParagraphStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.ParagraphStyle plus(androidx.compose.ui.text.ParagraphStyle other);
   }
 
   public final class ParagraphStyleKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.ParagraphStyle lerp(androidx.compose.ui.text.ParagraphStyle start, androidx.compose.ui.text.ParagraphStyle stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class Placeholder {
+  @androidx.compose.runtime.Immutable public final class Placeholder {
     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-KJSDsNM(long width, long height, androidx.compose.ui.text.PlaceholderVerticalAlign placeholderVerticalAlign);
+    method @androidx.compose.runtime.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();
@@ -245,7 +245,7 @@
     method public void showSoftwareKeyboard();
   }
 
-  @androidx.compose.Immutable public final class SpanStyle {
+  @androidx.compose.runtime.Immutable public final class SpanStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -275,8 +275,8 @@
     method public androidx.compose.ui.graphics.Shadow? getShadow();
     method public androidx.compose.ui.text.style.TextDecoration? getTextDecoration();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle merge(androidx.compose.ui.text.SpanStyle? other = null);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.SpanStyle plus(androidx.compose.ui.text.SpanStyle other);
   }
 
   public final class SpanStyleKt {
@@ -365,13 +365,13 @@
     field public static final androidx.compose.ui.text.TextPainter INSTANCE;
   }
 
-  @androidx.compose.Immutable public final class TextRange {
+  @androidx.compose.runtime.Immutable public final class TextRange {
     ctor public TextRange(@IntRange(from=null) int start, @IntRange(from=null) int end);
     method public int component1();
     method public int component2();
     method public operator boolean contains(androidx.compose.ui.text.TextRange other);
     method public operator boolean contains(int offset);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.TextRange copy(int start, int end);
     method public boolean getCollapsed();
     method public int getEnd();
     method public int getLength();
@@ -398,7 +398,7 @@
     method public static String substring(CharSequence, androidx.compose.ui.text.TextRange range);
   }
 
-  @androidx.compose.Immutable public final class TextStyle {
+  @androidx.compose.runtime.Immutable public final class TextStyle {
     method public long component1();
     method public androidx.compose.ui.text.style.TextGeometricTransform? component10();
     method public androidx.compose.ui.text.intl.LocaleList? component11();
@@ -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-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 @androidx.compose.runtime.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();
@@ -436,14 +436,14 @@
     method public androidx.compose.ui.text.style.TextDirection? getTextDirection();
     method public androidx.compose.ui.text.style.TextGeometricTransform? getTextGeometricTransform();
     method public androidx.compose.ui.text.style.TextIndent? getTextIndent();
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
-    method @androidx.compose.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
-    method @androidx.compose.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
-    method @androidx.compose.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.TextStyle? other = null);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.TextStyle merge(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.TextStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.ParagraphStyle other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.text.TextStyle plus(androidx.compose.ui.text.SpanStyle other);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.ParagraphStyle toParagraphStyle();
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.text.SpanStyle toSpanStyle();
     field public static final androidx.compose.ui.text.TextStyle.Companion Companion;
   }
 
@@ -469,7 +469,7 @@
   public abstract sealed class FileBasedFontFamily extends androidx.compose.ui.text.font.FontFamily {
   }
 
-  @androidx.compose.Immutable public interface Font {
+  @androidx.compose.runtime.Immutable public interface Font {
     method public androidx.compose.ui.text.font.FontStyle getStyle();
     method public androidx.compose.ui.text.font.FontWeight getWeight();
     property public abstract androidx.compose.ui.text.font.FontStyle style;
@@ -480,7 +480,7 @@
     method public Object load(androidx.compose.ui.text.font.Font font);
   }
 
-  @androidx.compose.Immutable public abstract sealed class FontFamily {
+  @androidx.compose.runtime.Immutable public abstract sealed class FontFamily {
     method public final boolean getCanLoadSynchronously();
     field public static final androidx.compose.ui.text.font.FontFamily.Companion Companion;
   }
@@ -499,22 +499,22 @@
   }
 
   public final class FontFamilyKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily fontFamily(androidx.compose.ui.text.font.Font... fonts);
     method public static androidx.compose.ui.text.font.LoadedFontFamily fontFamily(androidx.compose.ui.text.Typeface typeface);
   }
 
   public final class FontKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
-    method @androidx.compose.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.FontListFontFamily asFontFamily(androidx.compose.ui.text.font.Font);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.text.font.Font font(int resId, androidx.compose.ui.text.font.FontWeight weight = FontWeight.Normal, androidx.compose.ui.text.font.FontStyle style = androidx.compose.ui.text.font.FontStyle.Normal);
   }
 
-  @androidx.compose.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
+  @androidx.compose.runtime.Immutable public final class FontListFontFamily extends androidx.compose.ui.text.font.FileBasedFontFamily implements kotlin.jvm.internal.markers.KMappedMarker java.util.List<androidx.compose.ui.text.font.Font> {
     ctor public FontListFontFamily(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public java.util.List<androidx.compose.ui.text.font.Font> component1();
     method public boolean contains(androidx.compose.ui.text.font.Font element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontListFontFamily copy(java.util.List<? extends androidx.compose.ui.text.font.Font> fonts);
     method public androidx.compose.ui.text.font.Font get(int index);
     method public java.util.List<androidx.compose.ui.text.font.Font> getFonts();
     method public int getSize();
@@ -543,11 +543,11 @@
     enum_constant public static final androidx.compose.ui.text.font.FontSynthesis Weight;
   }
 
-  @androidx.compose.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
+  @androidx.compose.runtime.Immutable public final class FontWeight implements java.lang.Comparable<androidx.compose.ui.text.font.FontWeight> {
     ctor public FontWeight(int weight);
     method public int compareTo(androidx.compose.ui.text.font.FontWeight other);
     method public int component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.font.FontWeight copy(int weight);
     method public int getWeight();
     field public static final androidx.compose.ui.text.font.FontWeight.Companion Companion;
   }
@@ -595,7 +595,7 @@
     method public static androidx.compose.ui.text.font.FontWeight lerp(androidx.compose.ui.text.font.FontWeight start, androidx.compose.ui.text.font.FontWeight stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
+  @androidx.compose.runtime.Immutable public final class GenericFontFamily extends androidx.compose.ui.text.font.SystemFontFamily {
     method public String getName();
   }
 
@@ -673,13 +673,13 @@
     field public static final int NOWHERE = -1; // 0xffffffff
   }
 
-  @Deprecated @androidx.compose.Immutable public final class EditorValue {
+  @Deprecated @androidx.compose.runtime.Immutable public final class EditorValue {
     ctor @Deprecated public EditorValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor @Deprecated public EditorValue();
     method @Deprecated public String component1();
     method @Deprecated public androidx.compose.ui.text.TextRange component2();
     method @Deprecated public androidx.compose.ui.text.TextRange? component3();
-    method @Deprecated @androidx.compose.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @Deprecated @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.EditorValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method @Deprecated public androidx.compose.ui.text.TextRange? getComposition();
     method @Deprecated public String getSelectedText();
     method @Deprecated public androidx.compose.ui.text.TextRange getSelection();
@@ -794,13 +794,13 @@
     method public void process(androidx.compose.ui.text.input.EditingBuffer buffer);
   }
 
-  @androidx.compose.Immutable public final class TextFieldValue {
+  @androidx.compose.runtime.Immutable public final class TextFieldValue {
     ctor public TextFieldValue(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     ctor public TextFieldValue();
     method public String component1();
     method public androidx.compose.ui.text.TextRange component2();
     method public androidx.compose.ui.text.TextRange? component3();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.input.TextFieldValue copy(String text, androidx.compose.ui.text.TextRange selection, androidx.compose.ui.text.TextRange? composition);
     method public androidx.compose.ui.text.TextRange? getComposition();
     method public androidx.compose.ui.text.TextRange getSelection();
     method public String getText();
@@ -844,7 +844,7 @@
     method public androidx.compose.ui.text.AnnotatedString getTransformedText();
   }
 
-  @androidx.compose.Immutable public interface VisualTransformation {
+  @androidx.compose.runtime.Immutable public interface VisualTransformation {
     method public androidx.compose.ui.text.input.TransformedText filter(androidx.compose.ui.text.AnnotatedString text);
     field public static final androidx.compose.ui.text.input.VisualTransformation.Companion Companion;
   }
@@ -861,7 +861,7 @@
   public final class AndroidPlatformLocaleKt {
   }
 
-  @androidx.compose.Immutable public final class Locale {
+  @androidx.compose.runtime.Immutable public final class Locale {
     ctor public Locale(String languageTag);
     method public String getLanguage();
     method public String getRegion();
@@ -878,14 +878,14 @@
     property public final androidx.compose.ui.text.intl.Locale current;
   }
 
-  @androidx.compose.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
+  @androidx.compose.runtime.Immutable public final class LocaleList implements java.util.Collection<androidx.compose.ui.text.intl.Locale> kotlin.jvm.internal.markers.KMappedMarker {
     ctor public LocaleList(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     ctor public LocaleList(String languageTags);
     ctor public LocaleList(androidx.compose.ui.text.intl.Locale... locales);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> component1();
     method public operator boolean contains(androidx.compose.ui.text.intl.Locale element);
     method public boolean containsAll(java.util.Collection<?> elements);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.intl.LocaleList copy(java.util.List<androidx.compose.ui.text.intl.Locale> localeList);
     method public operator androidx.compose.ui.text.intl.Locale get(int i);
     method public java.util.List<androidx.compose.ui.text.intl.Locale> getLocaleList();
     method public int getSize();
@@ -947,14 +947,14 @@
 
 package androidx.compose.ui.text.style {
 
-  @androidx.compose.Immutable public final inline class BaselineShift {
+  @androidx.compose.runtime.Immutable public final inline class BaselineShift {
     ctor public BaselineShift();
     method public static float constructor-impl(float multiplier);
-    method @androidx.compose.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(float p, Object? p1);
     method public static boolean equals-impl0(float p1, float p2);
     method public float getMultiplier();
-    method @androidx.compose.Immutable public static inline int hashCode-impl(float p);
-    method @androidx.compose.Immutable public static inline String! toString-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Immutable public static inline String! toString-impl(float p);
     field public static final androidx.compose.ui.text.style.BaselineShift.Companion Companion;
   }
 
@@ -968,7 +968,7 @@
   }
 
   public final class BaselineShiftKt {
-    method @androidx.compose.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-ylBt8J4(float start, float stop, float fraction);
   }
 
   public enum ResolvedTextDirection {
@@ -989,10 +989,10 @@
     enum_constant public static final androidx.compose.ui.text.style.TextAlign Start;
   }
 
-  @androidx.compose.Immutable public final class TextDecoration {
+  @androidx.compose.runtime.Immutable public final class TextDecoration {
     method public int component1();
     method public operator boolean contains(androidx.compose.ui.text.style.TextDecoration other);
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextDecoration copy(int mask);
     method public int getMask();
     method public operator androidx.compose.ui.text.style.TextDecoration plus(androidx.compose.ui.text.style.TextDecoration decoration);
     field public static final androidx.compose.ui.text.style.TextDecoration.Companion Companion;
@@ -1018,12 +1018,12 @@
     enum_constant public static final androidx.compose.ui.text.style.TextDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final class TextGeometricTransform {
+  @androidx.compose.runtime.Immutable public final class TextGeometricTransform {
     ctor public TextGeometricTransform(float scaleX, float skewX);
     ctor public TextGeometricTransform();
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.text.style.TextGeometricTransform copy(float scaleX, float skewX);
     method public float getScaleX();
     method public float getSkewX();
     field public static final androidx.compose.ui.text.style.TextGeometricTransform.Companion Companion;
@@ -1036,10 +1036,10 @@
     method public static androidx.compose.ui.text.style.TextGeometricTransform lerp(androidx.compose.ui.text.style.TextGeometricTransform start, androidx.compose.ui.text.style.TextGeometricTransform stop, float fraction);
   }
 
-  @androidx.compose.Immutable public final class TextIndent {
+  @androidx.compose.runtime.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-8E83U4Q(long firstLine, long restLine);
+    method @androidx.compose.runtime.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/BaselineShiftSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/BaselineShiftSamples.kt
index a48ab71..dc0261d 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.annotatedString
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt
index 1a1344c..a64c025 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/FontFamilySamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.FontFamily
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 4ac3070..5128f0e 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.ParagraphStyle
 import androidx.compose.ui.text.TextStyle
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 728b40d..e0eb56c 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.SpanStyle
diff --git a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt
index b6c1da3..4415415 100644
--- a/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt
+++ b/ui/ui-text-core/samples/src/main/java/androidx/compose/ui/text/samples/TextDecorationSamples.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.style.TextDecoration
 
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 1f11713..ad9be3b 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
@@ -17,7 +17,7 @@
 package androidx.compose.ui.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.TextStyle
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 80ae7a8..cbc665f 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.ui.text.AnnotatedString.Builder
 import androidx.compose.ui.text.AnnotatedString.Range
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 e6fc119..fece9c2 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextDirection
 import androidx.compose.ui.text.style.TextIndent
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 3c725f3..f9c193d 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.unit.TextUnit
 
 /**
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 bfa98ca..085634b 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.text.intl.LocaleList
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
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 7ccbc02..65e2075 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,7 +16,7 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Stable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.unit.constrain
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
index 1c430f6..d8f4c44 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/TextRange.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.util.annotation.IntRange
 
 fun CharSequence.substring(range: TextRange): String = this.substring(range.min, range.max)
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 f57d333..3f232a2 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.Shadow
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt
index 151b6a1..e439202 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/Font.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.font
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 
 /**
  * The interface of the font resource.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt
index 1e6ca56..9e2d2ea 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontFamily.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.font
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.text.Typeface
 
 /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt
index 92eae83..e730342 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/font/FontWeight.kt
@@ -15,8 +15,8 @@
  */
 package androidx.compose.ui.text.font
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 
 /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
index 68611b4..50a1cc8 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/TextFieldValue.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.input
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.listSaver
 import androidx.compose.ui.text.TextRange
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt
index 830a58c..eb938f4 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/input/VisualTransformation.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.input
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.text.AnnotatedString
 
 /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt
index aa304dd..f9ab3f5 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/Locale.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text.intl
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.TextStyle
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt
index 2d163a9..b88088264 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/intl/LocaleList.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.text.intl
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.TextStyle
 
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt
index b72b693..5d9c858 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/BaselineShift.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.style
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 
 /**
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt
index b0fb6b6..a02085c 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextDecoration.kt
@@ -15,8 +15,8 @@
  */
 package androidx.compose.ui.text.style
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 
 /**
  * Defines a horizontal line to be drawn on the text.
diff --git a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt
index ef8407e..ce44c94 100644
--- a/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt
+++ b/ui/ui-text-core/src/commonMain/kotlin/androidx/compose/ui/text/style/TextGeometricTransform.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.style
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 
 /**
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 5a819df9..fbcbfd1 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.text.style
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.TextUnit
 import androidx.compose.ui.unit.sp
 import androidx.compose.ui.text.lerpTextUnitInheritable
diff --git a/ui/ui-text/api/0.1.0-dev16.txt b/ui/ui-text/api/0.1.0-dev16.txt
index 6dba6c5..5d66dd4 100644
--- a/ui/ui-text/api/0.1.0-dev16.txt
+++ b/ui/ui-text/api/0.1.0-dev16.txt
@@ -2,21 +2,21 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.runtime.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
-  @androidx.compose.Immutable public final class InlineTextContent {
+  @androidx.compose.runtime.Immutable public final class InlineTextContent {
     ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
     method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
diff --git a/ui/ui-text/api/current.txt b/ui/ui-text/api/current.txt
index 6dba6c5..5d66dd4 100644
--- a/ui/ui-text/api/current.txt
+++ b/ui/ui-text/api/current.txt
@@ -2,21 +2,21 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.runtime.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
-  @androidx.compose.Immutable public final class InlineTextContent {
+  @androidx.compose.runtime.Immutable public final class InlineTextContent {
     ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
     method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
diff --git a/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt
index 6dba6c5..5d66dd4 100644
--- a/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-text/api/public_plus_experimental_0.1.0-dev16.txt
@@ -2,21 +2,21 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.runtime.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
-  @androidx.compose.Immutable public final class InlineTextContent {
+  @androidx.compose.runtime.Immutable public final class InlineTextContent {
     ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
     method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
diff --git a/ui/ui-text/api/public_plus_experimental_current.txt b/ui/ui-text/api/public_plus_experimental_current.txt
index 6dba6c5..5d66dd4 100644
--- a/ui/ui-text/api/public_plus_experimental_current.txt
+++ b/ui/ui-text/api/public_plus_experimental_current.txt
@@ -2,21 +2,21 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.runtime.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
-  @androidx.compose.Immutable public final class InlineTextContent {
+  @androidx.compose.runtime.Immutable public final class InlineTextContent {
     ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
     method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
diff --git a/ui/ui-text/api/restricted_0.1.0-dev16.txt b/ui/ui-text/api/restricted_0.1.0-dev16.txt
index 6dba6c5..5d66dd4 100644
--- a/ui/ui-text/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-text/api/restricted_0.1.0-dev16.txt
@@ -2,21 +2,21 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.runtime.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
-  @androidx.compose.Immutable public final class InlineTextContent {
+  @androidx.compose.runtime.Immutable public final class InlineTextContent {
     ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
     method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
diff --git a/ui/ui-text/api/restricted_current.txt b/ui/ui-text/api/restricted_current.txt
index 6dba6c5..5d66dd4 100644
--- a/ui/ui-text/api/restricted_current.txt
+++ b/ui/ui-text/api/restricted_current.txt
@@ -2,21 +2,21 @@
 package androidx.compose.foundation.text {
 
   public final class CoreTextFieldKt {
-    method @Deprecated @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
-    method @androidx.compose.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @Deprecated @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.EditorValue value, androidx.ui.core.Modifier modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.EditorValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChange = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
+    method @androidx.compose.runtime.Composable public static void CoreTextField(androidx.compose.ui.text.input.TextFieldValue value, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.TextFieldValue,kotlin.Unit> onValueChange, androidx.compose.ui.text.TextStyle textStyle = TextStyle.Default, androidx.compose.ui.text.input.KeyboardType keyboardType = KeyboardType.Text, androidx.compose.ui.text.input.ImeAction imeAction = ImeAction.Unspecified, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.input.ImeAction,kotlin.Unit> onImeActionPerformed = {}, kotlin.jvm.functions.Function1<? super java.lang.Boolean,kotlin.Unit> onFocusChanged = {}, androidx.compose.ui.text.input.VisualTransformation visualTransformation = VisualTransformation.None, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout = {}, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.SoftwareKeyboardController,kotlin.Unit> onTextInputStarted = {});
   }
 
   public final class CoreTextKt {
-    method @androidx.compose.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
+    method @androidx.compose.runtime.Composable public static void CoreText(androidx.compose.ui.text.AnnotatedString text, androidx.ui.core.Modifier modifier = Modifier, androidx.compose.ui.text.TextStyle style, boolean softWrap, androidx.compose.ui.text.style.TextOverflow overflow, int maxLines, java.util.Map<java.lang.String,androidx.compose.foundation.text.InlineTextContent> inlineContent, kotlin.jvm.functions.Function1<? super androidx.compose.ui.text.TextLayoutResult,kotlin.Unit> onTextLayout);
     method public static androidx.ui.core.HorizontalAlignmentLine getFirstBaseline();
     method public static androidx.ui.core.HorizontalAlignmentLine getLastBaseline();
   }
 
-  @androidx.compose.Immutable public final class InlineTextContent {
+  @androidx.compose.runtime.Immutable public final class InlineTextContent {
     ctor public InlineTextContent(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public androidx.compose.ui.text.Placeholder component1();
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> component2();
-    method @androidx.compose.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
+    method @androidx.compose.runtime.Immutable public androidx.compose.foundation.text.InlineTextContent copy(androidx.compose.ui.text.Placeholder placeholder, kotlin.jvm.functions.Function1<? super java.lang.String,kotlin.Unit> children);
     method public kotlin.jvm.functions.Function1<java.lang.String,kotlin.Unit> getChildren();
     method public androidx.compose.ui.text.Placeholder getPlaceholder();
   }
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt
index cd80fd3..6b1ad56 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeInputField.kt
@@ -16,13 +16,13 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.ScrollableColumn
-import androidx.compose.key
+import androidx.compose.runtime.key
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.compose.ui.text.input.ImeAction
 import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.text.input.TextFieldValue
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 ee01b61..2d9127d 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
@@ -16,12 +16,12 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.ui.core.focus.FocusModifier
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.text.input.ImeAction
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 b36a537..3b6da05 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.ScrollableColumn
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 cd087a0..d73183f 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
 import androidx.compose.ui.text.AnnotatedString
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 f928d82..69c8866 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt
index 701cac5..2595ae4 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/ComposeTextSelection.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.selection.Selection
 import androidx.ui.core.selection.SelectionContainer
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 a1db9d5..4643f81 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.ui.core.selection.Selection
 import androidx.ui.core.selection.SelectionContainer
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 a4fcc9e..c07a0f3 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
@@ -16,10 +16,10 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
 import androidx.compose.foundation.BaseTextField
-import androidx.compose.state
+import androidx.compose.runtime.state
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
 import androidx.ui.core.Modifier
diff --git a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt
index 654fe7b..e3e22d0 100644
--- a/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt
+++ b/ui/ui-text/integration-tests/ui-text-compose-demos/src/main/java/androidx/compose/foundation/text/demos/InteractiveText.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.compose.foundation.ClickableText
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.foundation.Text
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 fdc7f9a..5ccf185 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.BaseTextField
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.background
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 27d6378..cb8e6d9 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text.demos
 
-import androidx.compose.Composable
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.state
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.ScrollableColumn
 import androidx.compose.ui.text.input.TextFieldValue
diff --git a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt
index ccc5b2c..e83f243 100644
--- a/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt
+++ b/ui/ui-text/samples/src/main/java/androidx/compose/foundation/text/samples/CoreTextFieldSample.kt
@@ -17,9 +17,9 @@
 package androidx.compose.foundation.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.setValue
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.setValue
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.foundation.text.CoreTextField
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 d76189a..0d667cb 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
@@ -17,7 +17,7 @@
 package androidx.compose.foundation.text.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
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 93f091a..bc80c38 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
@@ -17,8 +17,8 @@
 package androidx.compose.foundation.text
 
 import androidx.activity.ComponentActivity
-import androidx.compose.Composable
-import androidx.compose.remember
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.test.filters.SmallTest
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.Layout
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 162e0d1..a31830c 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
@@ -20,8 +20,8 @@
 import android.view.View
 import android.view.ViewGroup
 import androidx.activity.ComponentActivity
-import androidx.compose.Providers
-import androidx.compose.mutableStateOf
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.mutableStateOf
 import androidx.test.filters.SdkSuppress
 import androidx.test.filters.SmallTest
 import androidx.ui.core.HapticFeedBackAmbient
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 6f412bd..f012c80 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
@@ -16,13 +16,13 @@
 @file:Suppress("DEPRECATION_ERROR")
 package androidx.compose.foundation.text
 
-import androidx.compose.Composable
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onCommit
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.structuralEqualityPolicy
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onCommit
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.structuralEqualityPolicy
 import androidx.compose.ui.unit.Constraints
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.FontLoaderAmbient
diff --git a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
index 5cd6c22..c0b4f19 100644
--- a/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
+++ b/ui/ui-text/src/commonMain/kotlin/androidx/compose/foundation/text/CoreTextField.kt
@@ -19,14 +19,14 @@
 
 package androidx.compose.foundation.text
 
-import androidx.compose.Composable
-import androidx.compose.emptyContent
-import androidx.compose.getValue
-import androidx.compose.mutableStateOf
-import androidx.compose.onDispose
-import androidx.compose.remember
-import androidx.compose.setValue
-import androidx.compose.state
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.emptyContent
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.onDispose
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.state
 import androidx.ui.core.ClipboardManagerAmbient
 import androidx.ui.core.DensityAmbient
 import androidx.ui.core.FontLoaderAmbient
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 85566d2..1c35e60 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
@@ -16,8 +16,8 @@
 
 package androidx.compose.foundation.text
 
-import androidx.compose.Composable
-import androidx.compose.Immutable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.Placeholder
 
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 3eb8b76b..20f34b0 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
@@ -16,7 +16,7 @@
 
 package androidx.compose.foundation.text.selection
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.clipboard.ClipboardManager
 import androidx.ui.core.gesture.DragObserver
diff --git a/ui/ui-tooling/api/0.1.0-dev16.txt b/ui/ui-tooling/api/0.1.0-dev16.txt
index 63d42d5..c99cdc2 100644
--- a/ui/ui-tooling/api/0.1.0-dev16.txt
+++ b/ui/ui-tooling/api/0.1.0-dev16.txt
@@ -19,7 +19,7 @@
   }
 
   public final class InspectableKt {
-    method @androidx.compose.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class JoinedKey {
@@ -54,7 +54,7 @@
   }
 
   public final class SlotTreeKt {
-    method public static androidx.ui.tooling.Group asTree(androidx.compose.SlotTable);
+    method public static androidx.ui.tooling.Group asTree(androidx.compose.runtime.SlotTable);
     method public static String? getPosition(androidx.ui.tooling.Group);
   }
 
diff --git a/ui/ui-tooling/api/current.txt b/ui/ui-tooling/api/current.txt
index 63d42d5..c99cdc2 100644
--- a/ui/ui-tooling/api/current.txt
+++ b/ui/ui-tooling/api/current.txt
@@ -19,7 +19,7 @@
   }
 
   public final class InspectableKt {
-    method @androidx.compose.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class JoinedKey {
@@ -54,7 +54,7 @@
   }
 
   public final class SlotTreeKt {
-    method public static androidx.ui.tooling.Group asTree(androidx.compose.SlotTable);
+    method public static androidx.ui.tooling.Group asTree(androidx.compose.runtime.SlotTable);
     method public static String? getPosition(androidx.ui.tooling.Group);
   }
 
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 63d42d5..c99cdc2 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
@@ -19,7 +19,7 @@
   }
 
   public final class InspectableKt {
-    method @androidx.compose.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class JoinedKey {
@@ -54,7 +54,7 @@
   }
 
   public final class SlotTreeKt {
-    method public static androidx.ui.tooling.Group asTree(androidx.compose.SlotTable);
+    method public static androidx.ui.tooling.Group asTree(androidx.compose.runtime.SlotTable);
     method public static String? getPosition(androidx.ui.tooling.Group);
   }
 
diff --git a/ui/ui-tooling/api/public_plus_experimental_current.txt b/ui/ui-tooling/api/public_plus_experimental_current.txt
index 63d42d5..c99cdc2 100644
--- a/ui/ui-tooling/api/public_plus_experimental_current.txt
+++ b/ui/ui-tooling/api/public_plus_experimental_current.txt
@@ -19,7 +19,7 @@
   }
 
   public final class InspectableKt {
-    method @androidx.compose.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class JoinedKey {
@@ -54,7 +54,7 @@
   }
 
   public final class SlotTreeKt {
-    method public static androidx.ui.tooling.Group asTree(androidx.compose.SlotTable);
+    method public static androidx.ui.tooling.Group asTree(androidx.compose.runtime.SlotTable);
     method public static String? getPosition(androidx.ui.tooling.Group);
   }
 
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 63d42d5..c99cdc2 100644
--- a/ui/ui-tooling/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-tooling/api/restricted_0.1.0-dev16.txt
@@ -19,7 +19,7 @@
   }
 
   public final class InspectableKt {
-    method @androidx.compose.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class JoinedKey {
@@ -54,7 +54,7 @@
   }
 
   public final class SlotTreeKt {
-    method public static androidx.ui.tooling.Group asTree(androidx.compose.SlotTable);
+    method public static androidx.ui.tooling.Group asTree(androidx.compose.runtime.SlotTable);
     method public static String? getPosition(androidx.ui.tooling.Group);
   }
 
diff --git a/ui/ui-tooling/api/restricted_current.txt b/ui/ui-tooling/api/restricted_current.txt
index 63d42d5..c99cdc2 100644
--- a/ui/ui-tooling/api/restricted_current.txt
+++ b/ui/ui-tooling/api/restricted_current.txt
@@ -19,7 +19,7 @@
   }
 
   public final class InspectableKt {
-    method @androidx.compose.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
+    method @androidx.compose.runtime.Composable public static void InInspectionModeOnly(kotlin.jvm.functions.Function0<kotlin.Unit> children);
   }
 
   public final class JoinedKey {
@@ -54,7 +54,7 @@
   }
 
   public final class SlotTreeKt {
-    method public static androidx.ui.tooling.Group asTree(androidx.compose.SlotTable);
+    method public static androidx.ui.tooling.Group asTree(androidx.compose.runtime.SlotTable);
     method public static String? getPosition(androidx.ui.tooling.Group);
   }
 
diff --git a/ui/ui-tooling/build.gradle b/ui/ui-tooling/build.gradle
index 0aa818c..604614b 100644
--- a/ui/ui-tooling/build.gradle
+++ b/ui/ui-tooling/build.gradle
@@ -67,6 +67,8 @@
 tasks.withType(KotlinCompile).configureEach {
     kotlinOptions {
         useIR = true
+        // TODO: b/160404330, 160233169
+        // move to androidx.compose.compiler.plugins once Studio support lands
         freeCompilerArgs += ["-P", "plugin:androidx.compose.plugins.kotlin:sourceInformation=true"]
     }
 }
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 d503014..f985973 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
@@ -16,12 +16,12 @@
 
 package androidx.ui.tooling
 
-import androidx.compose.InternalComposeApi
-import androidx.compose.getValue
-import androidx.compose.key
-import androidx.compose.mutableStateOf
-import androidx.compose.resetSourceInfo
-import androidx.compose.setValue
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.key
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.resetSourceInfo
+import androidx.compose.runtime.setValue
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.WithConstraints
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ComposeViewAdapterTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ComposeViewAdapterTest.kt
index 4dbb047..2beb617 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ComposeViewAdapterTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ComposeViewAdapterTest.kt
@@ -111,7 +111,7 @@
                     .sorted()
                     .toTypedArray())
             // Verify that all calls generate the correct offset information
-            assertArrayEquals(arrayOf(1213, 1250, 1271, 1399, 1447, 1469, 1486, 1509, 1526),
+            assertArrayEquals(arrayOf(1221, 1258, 1279, 1407, 1455, 1477, 1494, 1517, 1534),
                 viewInfos
                     .map { it.location?.offset ?: -1 }
                     .sorted()
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 bb047ad..1cd960e 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
@@ -16,8 +16,8 @@
 
 package androidx.ui.tooling
 
-import androidx.compose.Composable
-import androidx.compose.SlotTable
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.SlotTable
 import androidx.test.filters.SmallTest
 import androidx.ui.core.Modifier
 import androidx.ui.core.drawBehind
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/LineNumberPreview.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/LineNumberPreview.kt
index d9d073b..1d1c948 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/LineNumberPreview.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/LineNumberPreview.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.tooling
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/SimpleComposablePreview.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/SimpleComposablePreview.kt
index b687f88..700df27 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/SimpleComposablePreview.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/SimpleComposablePreview.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.tooling
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.lifecycle.Lifecycle
 import androidx.ui.core.LifecycleOwnerAmbient
 import androidx.compose.foundation.Text
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ToolingTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ToolingTest.kt
index e9ef5b1..9b2a97b 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ToolingTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/ToolingTest.kt
@@ -18,7 +18,7 @@
 
 import android.os.Handler
 import android.os.Looper
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.Modifier
 import androidx.ui.core.onPositioned
 import androidx.ui.core.setContent
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 5b2a61d..1892a0d 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
@@ -18,10 +18,10 @@
 
 import android.view.View
 import android.view.ViewGroup
-import androidx.compose.InternalComposeApi
+import androidx.compose.runtime.InternalComposeApi
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
-import androidx.compose.resetSourceInfo
+import androidx.compose.runtime.resetSourceInfo
 import androidx.test.filters.SmallTest
 import androidx.ui.core.OwnedLayer
 import androidx.compose.ui.graphics.Color
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/ParameterProviderComposable.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/ParameterProviderComposable.kt
index fd40ec6..569011d 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/ParameterProviderComposable.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/ParameterProviderComposable.kt
@@ -16,7 +16,7 @@
 
 package androidx.ui.tooling.preview
 
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
 import androidx.compose.material.Button
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/Inspectable.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/Inspectable.kt
index ffef7b5..fc8041d 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/Inspectable.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/Inspectable.kt
@@ -16,12 +16,12 @@
 
 package androidx.ui.tooling
 
-import androidx.compose.Composable
-import androidx.compose.InternalComposeApi
-import androidx.compose.Providers
-import androidx.compose.SlotTable
-import androidx.compose.currentComposer
-import androidx.compose.tooling.InspectionTables
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.tooling.InspectionTables
 import java.util.Collections
 import java.util.WeakHashMap
 
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 7e0306c..09a9fb0d 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
@@ -17,13 +17,13 @@
 @file:OptIn(InternalComposeApi::class)
 package androidx.ui.tooling
 
-import androidx.compose.InternalComposeApi
-import androidx.compose.SlotReader
-import androidx.compose.SlotTable
-import androidx.compose.isJoinedKey
-import androidx.compose.joinedKeyLeft
-import androidx.compose.joinedKeyRight
-import androidx.compose.keySourceInfoOf
+import androidx.compose.runtime.InternalComposeApi
+import androidx.compose.runtime.SlotReader
+import androidx.compose.runtime.SlotTable
+import androidx.compose.runtime.isJoinedKey
+import androidx.compose.runtime.joinedKeyLeft
+import androidx.compose.runtime.joinedKeyRight
+import androidx.compose.runtime.keySourceInfoOf
 import androidx.ui.core.ExperimentalLayoutNodeApi
 import androidx.ui.core.LayoutNode
 import androidx.ui.core.ModifierInfo
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 7ff681e..141c380 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
@@ -17,7 +17,7 @@
 package androidx.ui.tooling.inspector
 
 import android.view.View
-import androidx.compose.SlotTable
+import androidx.compose.runtime.SlotTable
 import androidx.ui.core.OwnedLayer
 import androidx.ui.tooling.Group
 import androidx.ui.tooling.ParameterInformation
@@ -30,7 +30,7 @@
 private val unwantedPackages = setOf(
     -1,
     packageNameHash("androidx.ui.core"),
-    packageNameHash("androidx.compose"),
+    packageNameHash("androidx.compose.runtime"),
     packageNameHash("androidx.ui.tooling"),
     packageNameHash("androidx.ui.core.selection"),
     packageNameHash("androidx.ui.semantics")
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 15075e1..6b4ebf4 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
@@ -24,12 +24,12 @@
 import android.util.Log
 import android.widget.FrameLayout
 import androidx.annotation.VisibleForTesting
-import androidx.compose.AtomicReference
-import androidx.compose.Composable
-import androidx.compose.Composition
-import androidx.compose.Providers
-import androidx.compose.Recomposer
-import androidx.compose.currentComposer
+import androidx.compose.runtime.AtomicReference
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Composition
+import androidx.compose.runtime.Providers
+import androidx.compose.runtime.Recomposer
+import androidx.compose.runtime.currentComposer
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.LifecycleRegistry
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/Preview.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/Preview.kt
index 744dbe5..daac164 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/Preview.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/Preview.kt
@@ -18,7 +18,7 @@
 
 import androidx.annotation.FloatRange
 import androidx.annotation.IntRange
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 
 /**
  * [Preview] can be applied to @[Composable] methods with no parameters to show them in the Android
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewActivity.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewActivity.kt
index 8aa5688f..aa43e89 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewActivity.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewActivity.kt
@@ -20,8 +20,8 @@
 import android.os.Bundle
 import android.util.Log
 import androidx.activity.ComponentActivity
-import androidx.compose.currentComposer
-import androidx.compose.state
+import androidx.compose.runtime.currentComposer
+import androidx.compose.runtime.state
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Text
 import androidx.compose.material.ExtendedFloatingActionButton
diff --git a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewUtils.kt b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewUtils.kt
index eef976e..794ad4a 100644
--- a/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewUtils.kt
+++ b/ui/ui-tooling/src/main/java/androidx/ui/tooling/preview/PreviewUtils.kt
@@ -17,7 +17,7 @@
 package androidx.ui.tooling.preview
 
 import android.util.Log
-import androidx.compose.Composer
+import androidx.compose.runtime.Composer
 import java.lang.reflect.Method
 import java.lang.reflect.Modifier
 import kotlin.math.ceil
diff --git a/ui/ui-unit/api/0.1.0-dev16.txt b/ui/ui-unit/api/0.1.0-dev16.txt
index 9d3db16..81755a7 100644
--- a/ui/ui-unit/api/0.1.0-dev16.txt
+++ b/ui/ui-unit/api/0.1.0-dev16.txt
@@ -5,22 +5,22 @@
     method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
   }
 
-  @androidx.compose.Immutable public final class Bounds {
+  @androidx.compose.runtime.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 @androidx.compose.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Constraints {
     ctor public Constraints(internal 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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -38,67 +38,67 @@
   }
 
   public static final class Constraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.runtime.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.runtime.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
-  @androidx.compose.Immutable public interface Density {
+  @androidx.compose.runtime.Immutable public interface Density {
     method public float getDensity();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toDp(int);
+    method @androidx.compose.runtime.Stable public default float toDp(float);
+    method @androidx.compose.runtime.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public default long toSp(int);
+    method @androidx.compose.runtime.Stable public default long toSp(float);
+    method @androidx.compose.runtime.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.compose.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.runtime.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.compose.ui.unit.Dp> {
+  @androidx.compose.runtime.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-0680j_4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.runtime.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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
-    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
+    method @androidx.compose.runtime.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
@@ -111,100 +111,100 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
+  @androidx.compose.runtime.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-MZZJ3Fw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
+  @androidx.compose.runtime.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-NdYQkfI(float p);
-    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    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 @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     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);
+    method @androidx.compose.runtime.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
+  @androidx.compose.runtime.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-_kMlNio(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-_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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
+  @androidx.compose.runtime.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.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    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);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
     field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
@@ -248,13 +248,13 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  @androidx.compose.Immutable public final class IntBounds {
+  @androidx.compose.runtime.Immutable public final class IntBounds {
     ctor public IntBounds(int left, int top, int right, int bottom);
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.runtime.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();
@@ -262,24 +262,24 @@
   }
 
   public final class IntBoundsKt {
-    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 @androidx.compose.runtime.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.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
-  @androidx.compose.Immutable public final class IntOffset {
+  @androidx.compose.runtime.Immutable public final class IntOffset {
     ctor public IntOffset(internal long value);
-    method @androidx.compose.Stable public inline operator int component1();
-    method @androidx.compose.Stable public inline operator int component2();
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    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();
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset.Companion Companion;
@@ -291,23 +291,23 @@
   }
 
   public final class IntOffsetKt {
-    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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.runtime.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.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
-  @androidx.compose.Immutable public final class IntSize {
+  @androidx.compose.runtime.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.compose.ui.unit.IntSize div(int other);
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize times(int other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize.Companion Companion;
@@ -319,10 +319,10 @@
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
   }
 
   public enum LayoutDirection {
@@ -332,98 +332,98 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final inline class Position {
+  @androidx.compose.runtime.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
     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 @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
   }
 
-  @androidx.compose.Immutable public final class PxBounds {
+  @androidx.compose.runtime.Immutable public final class PxBounds {
     ctor public PxBounds(float left, float top, float right, float bottom);
     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.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.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.compose.ui.unit.PxCubed> {
+  @androidx.compose.runtime.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-830ceAw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
+  @androidx.compose.runtime.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-QHJUJtg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    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 @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
+  @androidx.compose.runtime.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-iBfx0ow(float p);
-    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class TextUnit {
+  @androidx.compose.runtime.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -431,12 +431,12 @@
     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 @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     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 @androidx.compose.runtime.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);
@@ -462,21 +462,21 @@
   }
 
   public final class TextUnitKt {
-    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 @androidx.compose.runtime.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.runtime.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.runtime.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
@@ -487,11 +487,11 @@
     enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
+  @androidx.compose.runtime.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     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);
@@ -508,10 +508,10 @@
     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 {
+  @androidx.compose.runtime.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.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.runtime.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.compose.ui.unit.Velocity unaryMinus();
     field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
diff --git a/ui/ui-unit/api/current.txt b/ui/ui-unit/api/current.txt
index 9d3db16..81755a7 100644
--- a/ui/ui-unit/api/current.txt
+++ b/ui/ui-unit/api/current.txt
@@ -5,22 +5,22 @@
     method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
   }
 
-  @androidx.compose.Immutable public final class Bounds {
+  @androidx.compose.runtime.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 @androidx.compose.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Constraints {
     ctor public Constraints(internal 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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -38,67 +38,67 @@
   }
 
   public static final class Constraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.runtime.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.runtime.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
-  @androidx.compose.Immutable public interface Density {
+  @androidx.compose.runtime.Immutable public interface Density {
     method public float getDensity();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toDp(int);
+    method @androidx.compose.runtime.Stable public default float toDp(float);
+    method @androidx.compose.runtime.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public default long toSp(int);
+    method @androidx.compose.runtime.Stable public default long toSp(float);
+    method @androidx.compose.runtime.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.compose.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.runtime.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.compose.ui.unit.Dp> {
+  @androidx.compose.runtime.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-0680j_4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.runtime.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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
-    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
+    method @androidx.compose.runtime.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
@@ -111,100 +111,100 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
+  @androidx.compose.runtime.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-MZZJ3Fw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
+  @androidx.compose.runtime.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-NdYQkfI(float p);
-    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    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 @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     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);
+    method @androidx.compose.runtime.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
+  @androidx.compose.runtime.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-_kMlNio(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-_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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
+  @androidx.compose.runtime.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.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    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);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
     field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
@@ -248,13 +248,13 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  @androidx.compose.Immutable public final class IntBounds {
+  @androidx.compose.runtime.Immutable public final class IntBounds {
     ctor public IntBounds(int left, int top, int right, int bottom);
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.runtime.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();
@@ -262,24 +262,24 @@
   }
 
   public final class IntBoundsKt {
-    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 @androidx.compose.runtime.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.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
-  @androidx.compose.Immutable public final class IntOffset {
+  @androidx.compose.runtime.Immutable public final class IntOffset {
     ctor public IntOffset(internal long value);
-    method @androidx.compose.Stable public inline operator int component1();
-    method @androidx.compose.Stable public inline operator int component2();
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    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();
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset.Companion Companion;
@@ -291,23 +291,23 @@
   }
 
   public final class IntOffsetKt {
-    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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.runtime.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.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
-  @androidx.compose.Immutable public final class IntSize {
+  @androidx.compose.runtime.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.compose.ui.unit.IntSize div(int other);
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize times(int other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize.Companion Companion;
@@ -319,10 +319,10 @@
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
   }
 
   public enum LayoutDirection {
@@ -332,98 +332,98 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final inline class Position {
+  @androidx.compose.runtime.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
     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 @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
   }
 
-  @androidx.compose.Immutable public final class PxBounds {
+  @androidx.compose.runtime.Immutable public final class PxBounds {
     ctor public PxBounds(float left, float top, float right, float bottom);
     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.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.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.compose.ui.unit.PxCubed> {
+  @androidx.compose.runtime.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-830ceAw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
+  @androidx.compose.runtime.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-QHJUJtg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    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 @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
+  @androidx.compose.runtime.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-iBfx0ow(float p);
-    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class TextUnit {
+  @androidx.compose.runtime.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -431,12 +431,12 @@
     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 @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     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 @androidx.compose.runtime.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);
@@ -462,21 +462,21 @@
   }
 
   public final class TextUnitKt {
-    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 @androidx.compose.runtime.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.runtime.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.runtime.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
@@ -487,11 +487,11 @@
     enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
+  @androidx.compose.runtime.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     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);
@@ -508,10 +508,10 @@
     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 {
+  @androidx.compose.runtime.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.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.runtime.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.compose.ui.unit.Velocity unaryMinus();
     field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
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 9d3db16..81755a7 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
@@ -5,22 +5,22 @@
     method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
   }
 
-  @androidx.compose.Immutable public final class Bounds {
+  @androidx.compose.runtime.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 @androidx.compose.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Constraints {
     ctor public Constraints(internal 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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -38,67 +38,67 @@
   }
 
   public static final class Constraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.runtime.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.runtime.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
-  @androidx.compose.Immutable public interface Density {
+  @androidx.compose.runtime.Immutable public interface Density {
     method public float getDensity();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toDp(int);
+    method @androidx.compose.runtime.Stable public default float toDp(float);
+    method @androidx.compose.runtime.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public default long toSp(int);
+    method @androidx.compose.runtime.Stable public default long toSp(float);
+    method @androidx.compose.runtime.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.compose.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.runtime.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.compose.ui.unit.Dp> {
+  @androidx.compose.runtime.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-0680j_4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.runtime.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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
-    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
+    method @androidx.compose.runtime.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
@@ -111,100 +111,100 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
+  @androidx.compose.runtime.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-MZZJ3Fw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
+  @androidx.compose.runtime.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-NdYQkfI(float p);
-    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    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 @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     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);
+    method @androidx.compose.runtime.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
+  @androidx.compose.runtime.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-_kMlNio(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-_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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
+  @androidx.compose.runtime.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.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    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);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
     field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
@@ -248,13 +248,13 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  @androidx.compose.Immutable public final class IntBounds {
+  @androidx.compose.runtime.Immutable public final class IntBounds {
     ctor public IntBounds(int left, int top, int right, int bottom);
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.runtime.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();
@@ -262,24 +262,24 @@
   }
 
   public final class IntBoundsKt {
-    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 @androidx.compose.runtime.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.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
-  @androidx.compose.Immutable public final class IntOffset {
+  @androidx.compose.runtime.Immutable public final class IntOffset {
     ctor public IntOffset(internal long value);
-    method @androidx.compose.Stable public inline operator int component1();
-    method @androidx.compose.Stable public inline operator int component2();
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    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();
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset.Companion Companion;
@@ -291,23 +291,23 @@
   }
 
   public final class IntOffsetKt {
-    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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.runtime.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.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
-  @androidx.compose.Immutable public final class IntSize {
+  @androidx.compose.runtime.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.compose.ui.unit.IntSize div(int other);
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize times(int other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize.Companion Companion;
@@ -319,10 +319,10 @@
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
   }
 
   public enum LayoutDirection {
@@ -332,98 +332,98 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final inline class Position {
+  @androidx.compose.runtime.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
     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 @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
   }
 
-  @androidx.compose.Immutable public final class PxBounds {
+  @androidx.compose.runtime.Immutable public final class PxBounds {
     ctor public PxBounds(float left, float top, float right, float bottom);
     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.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.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.compose.ui.unit.PxCubed> {
+  @androidx.compose.runtime.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-830ceAw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
+  @androidx.compose.runtime.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-QHJUJtg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    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 @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
+  @androidx.compose.runtime.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-iBfx0ow(float p);
-    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class TextUnit {
+  @androidx.compose.runtime.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -431,12 +431,12 @@
     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 @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     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 @androidx.compose.runtime.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);
@@ -462,21 +462,21 @@
   }
 
   public final class TextUnitKt {
-    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 @androidx.compose.runtime.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.runtime.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.runtime.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
@@ -487,11 +487,11 @@
     enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
+  @androidx.compose.runtime.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     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);
@@ -508,10 +508,10 @@
     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 {
+  @androidx.compose.runtime.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.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.runtime.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.compose.ui.unit.Velocity unaryMinus();
     field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
diff --git a/ui/ui-unit/api/public_plus_experimental_current.txt b/ui/ui-unit/api/public_plus_experimental_current.txt
index 9d3db16..81755a7 100644
--- a/ui/ui-unit/api/public_plus_experimental_current.txt
+++ b/ui/ui-unit/api/public_plus_experimental_current.txt
@@ -5,22 +5,22 @@
     method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
   }
 
-  @androidx.compose.Immutable public final class Bounds {
+  @androidx.compose.runtime.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 @androidx.compose.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Constraints {
     ctor public Constraints(internal 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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -38,67 +38,67 @@
   }
 
   public static final class Constraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.runtime.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.runtime.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
-  @androidx.compose.Immutable public interface Density {
+  @androidx.compose.runtime.Immutable public interface Density {
     method public float getDensity();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toDp(int);
+    method @androidx.compose.runtime.Stable public default float toDp(float);
+    method @androidx.compose.runtime.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public default long toSp(int);
+    method @androidx.compose.runtime.Stable public default long toSp(float);
+    method @androidx.compose.runtime.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.compose.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.runtime.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.compose.ui.unit.Dp> {
+  @androidx.compose.runtime.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-0680j_4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.runtime.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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
-    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
+    method @androidx.compose.runtime.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
@@ -111,100 +111,100 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
+  @androidx.compose.runtime.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-MZZJ3Fw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
+  @androidx.compose.runtime.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-NdYQkfI(float p);
-    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    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 @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     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);
+    method @androidx.compose.runtime.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
+  @androidx.compose.runtime.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-_kMlNio(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-_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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
+  @androidx.compose.runtime.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.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    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);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
     field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
@@ -248,13 +248,13 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  @androidx.compose.Immutable public final class IntBounds {
+  @androidx.compose.runtime.Immutable public final class IntBounds {
     ctor public IntBounds(int left, int top, int right, int bottom);
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.runtime.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();
@@ -262,24 +262,24 @@
   }
 
   public final class IntBoundsKt {
-    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 @androidx.compose.runtime.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.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
-  @androidx.compose.Immutable public final class IntOffset {
+  @androidx.compose.runtime.Immutable public final class IntOffset {
     ctor public IntOffset(internal long value);
-    method @androidx.compose.Stable public inline operator int component1();
-    method @androidx.compose.Stable public inline operator int component2();
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    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();
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset.Companion Companion;
@@ -291,23 +291,23 @@
   }
 
   public final class IntOffsetKt {
-    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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.runtime.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.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
-  @androidx.compose.Immutable public final class IntSize {
+  @androidx.compose.runtime.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.compose.ui.unit.IntSize div(int other);
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize times(int other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize.Companion Companion;
@@ -319,10 +319,10 @@
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
   }
 
   public enum LayoutDirection {
@@ -332,98 +332,98 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final inline class Position {
+  @androidx.compose.runtime.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
     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 @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
   }
 
-  @androidx.compose.Immutable public final class PxBounds {
+  @androidx.compose.runtime.Immutable public final class PxBounds {
     ctor public PxBounds(float left, float top, float right, float bottom);
     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.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.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.compose.ui.unit.PxCubed> {
+  @androidx.compose.runtime.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-830ceAw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
+  @androidx.compose.runtime.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-QHJUJtg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    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 @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
+  @androidx.compose.runtime.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-iBfx0ow(float p);
-    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class TextUnit {
+  @androidx.compose.runtime.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -431,12 +431,12 @@
     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 @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     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 @androidx.compose.runtime.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);
@@ -462,21 +462,21 @@
   }
 
   public final class TextUnitKt {
-    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 @androidx.compose.runtime.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.runtime.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.runtime.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline long min-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
@@ -487,11 +487,11 @@
     enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
+  @androidx.compose.runtime.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     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);
@@ -508,10 +508,10 @@
     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 {
+  @androidx.compose.runtime.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.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.runtime.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.compose.ui.unit.Velocity unaryMinus();
     field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
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 a073e93..3863594 100644
--- a/ui/ui-unit/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-unit/api/restricted_0.1.0-dev16.txt
@@ -5,22 +5,22 @@
     method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
   }
 
-  @androidx.compose.Immutable public final class Bounds {
+  @androidx.compose.runtime.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 @androidx.compose.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Constraints {
     ctor public Constraints(internal 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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -38,67 +38,67 @@
   }
 
   public static final class Constraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.runtime.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.runtime.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
-  @androidx.compose.Immutable public interface Density {
+  @androidx.compose.runtime.Immutable public interface Density {
     method public float getDensity();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toDp(int);
+    method @androidx.compose.runtime.Stable public default float toDp(float);
+    method @androidx.compose.runtime.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public default long toSp(int);
+    method @androidx.compose.runtime.Stable public default long toSp(float);
+    method @androidx.compose.runtime.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.compose.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.runtime.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.compose.ui.unit.Dp> {
+  @androidx.compose.runtime.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-0680j_4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.runtime.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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
-    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
+    method @androidx.compose.runtime.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
@@ -111,100 +111,100 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
+  @androidx.compose.runtime.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-MZZJ3Fw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
+  @androidx.compose.runtime.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-NdYQkfI(float p);
-    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    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 @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     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);
+    method @androidx.compose.runtime.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
+  @androidx.compose.runtime.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-_kMlNio(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-_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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
+  @androidx.compose.runtime.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.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    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);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
     field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
@@ -248,13 +248,13 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  @androidx.compose.Immutable public final class IntBounds {
+  @androidx.compose.runtime.Immutable public final class IntBounds {
     ctor public IntBounds(int left, int top, int right, int bottom);
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.runtime.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();
@@ -262,24 +262,24 @@
   }
 
   public final class IntBoundsKt {
-    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 @androidx.compose.runtime.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.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
-  @androidx.compose.Immutable public final class IntOffset {
+  @androidx.compose.runtime.Immutable public final class IntOffset {
     ctor public IntOffset(internal long value);
-    method @androidx.compose.Stable public inline operator int component1();
-    method @androidx.compose.Stable public inline operator int component2();
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    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();
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset.Companion Companion;
@@ -291,23 +291,23 @@
   }
 
   public final class IntOffsetKt {
-    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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.runtime.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.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
-  @androidx.compose.Immutable public final class IntSize {
+  @androidx.compose.runtime.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.compose.ui.unit.IntSize div(int other);
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize times(int other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize.Companion Companion;
@@ -319,10 +319,10 @@
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
   }
 
   public enum LayoutDirection {
@@ -332,98 +332,98 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final inline class Position {
+  @androidx.compose.runtime.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
     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 @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
   }
 
-  @androidx.compose.Immutable public final class PxBounds {
+  @androidx.compose.runtime.Immutable public final class PxBounds {
     ctor public PxBounds(float left, float top, float right, float bottom);
     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.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.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.compose.ui.unit.PxCubed> {
+  @androidx.compose.runtime.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-830ceAw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
+  @androidx.compose.runtime.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-QHJUJtg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    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 @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
+  @androidx.compose.runtime.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-iBfx0ow(float p);
-    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class TextUnit {
+  @androidx.compose.runtime.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -431,12 +431,12 @@
     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 @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     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 @androidx.compose.runtime.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);
@@ -465,22 +465,22 @@
     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 @androidx.compose.runtime.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.runtime.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.runtime.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-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.runtime.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.runtime.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
@@ -491,11 +491,11 @@
     enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
+  @androidx.compose.runtime.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     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);
@@ -512,10 +512,10 @@
     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 {
+  @androidx.compose.runtime.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.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.runtime.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.compose.ui.unit.Velocity unaryMinus();
     field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
diff --git a/ui/ui-unit/api/restricted_current.txt b/ui/ui-unit/api/restricted_current.txt
index a073e93..3863594 100644
--- a/ui/ui-unit/api/restricted_current.txt
+++ b/ui/ui-unit/api/restricted_current.txt
@@ -5,22 +5,22 @@
     method public static androidx.compose.ui.unit.Density Density(android.content.Context context);
   }
 
-  @androidx.compose.Immutable public final class Bounds {
+  @androidx.compose.runtime.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 @androidx.compose.runtime.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 {
+  @androidx.compose.runtime.Immutable public final class Constraints {
     ctor public Constraints(internal 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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Constraints copy(long value);
     method public boolean getHasBoundedHeight();
     method public boolean getHasBoundedWidth();
     method public int getMaxHeight();
@@ -38,67 +38,67 @@
   }
 
   public static final class Constraints.Companion {
-    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);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixed(int width, int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedHeight(int height);
+    method @androidx.compose.runtime.Stable public androidx.compose.ui.unit.Constraints fixedWidth(int width);
   }
 
   public final class ConstraintsKt {
-    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 @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints Constraints(int minWidth = 0, int maxWidth = 2147483647, int minHeight = 0, int maxHeight = 2147483647);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize constrain(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static int constrainHeight(androidx.compose.ui.unit.Constraints, int height);
+    method @androidx.compose.runtime.Stable public static int constrainWidth(androidx.compose.ui.unit.Constraints, int width);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.Constraints offset(androidx.compose.ui.unit.Constraints, int horizontal = 0, int vertical = 0);
+    method @androidx.compose.runtime.Stable public static boolean satisfiedBy(androidx.compose.ui.unit.Constraints, androidx.compose.ui.unit.IntSize size);
   }
 
-  @androidx.compose.Immutable public interface Density {
+  @androidx.compose.runtime.Immutable public interface Density {
     method public float getDensity();
     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--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-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toDp(int);
+    method @androidx.compose.runtime.Stable public default float toDp(float);
+    method @androidx.compose.runtime.Stable public default float toDp--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default int toIntPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default float toPx--R2X_6o(long);
+    method @androidx.compose.runtime.Stable public default float toPx-0680j_4(float);
+    method @androidx.compose.runtime.Stable public default androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.Bounds);
+    method @androidx.compose.runtime.Stable public default long toSp(int);
+    method @androidx.compose.runtime.Stable public default long toSp(float);
+    method @androidx.compose.runtime.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.compose.ui.unit.Density Density(float density, float fontScale = 1f);
+    method @androidx.compose.runtime.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.compose.ui.unit.Dp> {
+  @androidx.compose.runtime.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-0680j_4(float p);
-    method @androidx.compose.Stable public static operator int compareTo-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-0680j_4(float p);
+    method @androidx.compose.runtime.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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, int other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
-    method @androidx.compose.Stable public static inline operator float unaryMinus-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, int other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
+    method @androidx.compose.runtime.Stable public static inline operator float unaryMinus-impl(float $this);
     field public static final androidx.compose.ui.unit.Dp.Companion Companion;
   }
 
@@ -111,100 +111,100 @@
     property public final float Unspecified;
   }
 
-  @androidx.compose.Immutable public final inline class DpCubed implements java.lang.Comparable<androidx.compose.ui.unit.DpCubed> {
+  @androidx.compose.runtime.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-MZZJ3Fw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-MZZJ3Fw(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-MZZJ3Fw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class DpInverse implements java.lang.Comparable<androidx.compose.ui.unit.DpInverse> {
+  @androidx.compose.runtime.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-NdYQkfI(float p);
-    method @androidx.compose.Stable public static operator int compareTo-NdYQkfI(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-NdYQkfI(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-NdYQkfI(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class DpKt {
-    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 @androidx.compose.runtime.Stable public static inline long Position-ioHfwGI(float x, float y);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtLeast-ioHfwGI(float, float minimumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceAtMost-ioHfwGI(float, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline float coerceIn-qYQSm_w(float, float minimumValue, float maximumValue);
+    method @androidx.compose.runtime.Stable public static inline operator float div-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-NnR5yEA(float, float other);
+    method @androidx.compose.runtime.Stable public static float getDistance-IsWn59c(long);
     method public static inline float getDp(int);
     method public static inline float getDp(double);
     method public static inline float getDp(float);
     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);
+    method @androidx.compose.runtime.Stable public static inline boolean isFinite-0680j_4(float);
+    method @androidx.compose.runtime.Stable public static long lerp-2vlZtig(long start, long stop, float fraction);
+    method @androidx.compose.runtime.Stable public static float lerp-7oHWEOI(float start, float stop, float fraction);
+    method @androidx.compose.runtime.Stable public static inline float max-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline float min-ioHfwGI(float a, float b);
+    method @androidx.compose.runtime.Stable public static inline operator float times-Cp9Wa6o(int, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NSq4UQk(double, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-NnR5yEA(float, float other);
   }
 
-  @androidx.compose.Immutable public final inline class DpSquared implements java.lang.Comparable<androidx.compose.ui.unit.DpSquared> {
+  @androidx.compose.runtime.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-_kMlNio(float p);
-    method @androidx.compose.Stable public static operator int compareTo-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-_kMlNio(float p);
+    method @androidx.compose.runtime.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-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.Immutable public static inline boolean equals-impl(float p, Object? p1);
+    method @androidx.compose.runtime.Stable public static inline operator float div-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-MZZJ3Fw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-_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 String toString-impl(float $this);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-_kMlNio(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-0680j_4(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final class Duration implements java.lang.Comparable<androidx.compose.ui.unit.Duration> {
+  @androidx.compose.runtime.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.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public int compareTo(androidx.compose.ui.unit.Duration other);
     method public long component1();
-    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 @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Duration copy(long nanoseconds);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(int quotient);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration div(double quotient);
     method public long getNanoseconds();
-    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);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration minus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration plus(androidx.compose.ui.unit.Duration other);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(int factor);
+    method @androidx.compose.runtime.Stable public operator androidx.compose.ui.unit.Duration times(double factor);
     field public static final androidx.compose.ui.unit.Duration.Companion Companion;
   }
 
@@ -248,13 +248,13 @@
     field public static final long SecondsPerMinute = 60L; // 0x3cL
   }
 
-  @androidx.compose.Immutable public final class IntBounds {
+  @androidx.compose.runtime.Immutable public final class IntBounds {
     ctor public IntBounds(int left, int top, int right, int bottom);
     method public int component1();
     method public int component2();
     method public int component3();
     method public int component4();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.IntBounds copy(int left, int top, int right, int bottom);
+    method @androidx.compose.runtime.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();
@@ -262,24 +262,24 @@
   }
 
   public final class IntBoundsKt {
-    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 @androidx.compose.runtime.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.runtime.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);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntBounds toBounds(androidx.compose.ui.unit.IntSize);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.IntBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.IntSize toSize(androidx.compose.ui.unit.IntBounds);
   }
 
-  @androidx.compose.Immutable public final class IntOffset {
+  @androidx.compose.runtime.Immutable public final class IntOffset {
     ctor public IntOffset(internal long value);
-    method @androidx.compose.Stable public inline operator int component1();
-    method @androidx.compose.Stable public inline operator int component2();
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
     method public int getX();
     method public int getY();
-    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();
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset minus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.Stable public inline operator androidx.compose.ui.unit.IntOffset plus(androidx.compose.ui.unit.IntOffset other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntOffset.Companion Companion;
@@ -291,23 +291,23 @@
   }
 
   public final class IntOffsetKt {
-    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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset IntOffset(int x, int y);
+    method @androidx.compose.runtime.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.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset minus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.geometry.Offset, androidx.compose.ui.unit.IntOffset offset);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.geometry.Offset plus(androidx.compose.ui.unit.IntOffset, androidx.compose.ui.geometry.Offset offset);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset toOffset(androidx.compose.ui.unit.IntOffset);
   }
 
-  @androidx.compose.Immutable public final class IntSize {
+  @androidx.compose.runtime.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.compose.ui.unit.IntSize div(int other);
+    method @androidx.compose.runtime.Stable public inline operator int component1();
+    method @androidx.compose.runtime.Stable public inline operator int component2();
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize times(int other);
+    method @androidx.compose.runtime.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.compose.ui.unit.IntSize.Companion Companion;
@@ -319,10 +319,10 @@
   }
 
   public final class IntSizeKt {
-    method @androidx.compose.Stable public static androidx.compose.ui.unit.IntSize IntSize(int width, int height);
+    method @androidx.compose.runtime.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);
+    method @androidx.compose.runtime.Stable public static operator androidx.compose.ui.unit.IntSize times(int, androidx.compose.ui.unit.IntSize size);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.IntSize);
   }
 
   public enum LayoutDirection {
@@ -332,98 +332,98 @@
     enum_constant public static final androidx.compose.ui.unit.LayoutDirection Rtl;
   }
 
-  @androidx.compose.Immutable public final inline class Position {
+  @androidx.compose.runtime.Immutable public final inline class Position {
     ctor public Position();
     method public static long constructor-impl(internal long packedValue);
     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 @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public static float getX-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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(long p);
+    method @androidx.compose.runtime.Stable public static inline operator long minus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long plus-IsWn59c(long $this, long other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(long $this);
   }
 
-  @androidx.compose.Immutable public final class PxBounds {
+  @androidx.compose.runtime.Immutable public final class PxBounds {
     ctor public PxBounds(float left, float top, float right, float bottom);
     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.PxBounds copy(float left, float top, float right, float bottom);
+    method @androidx.compose.runtime.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.compose.ui.unit.PxCubed> {
+  @androidx.compose.runtime.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-830ceAw(float p);
-    method @androidx.compose.Stable public static operator int compareTo-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-830ceAw(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-830ceAw(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class PxInverse implements java.lang.Comparable<androidx.compose.ui.unit.PxInverse> {
+  @androidx.compose.runtime.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-QHJUJtg(float p);
-    method @androidx.compose.Stable public static operator int compareTo-QHJUJtg(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-QHJUJtg(float p);
+    method @androidx.compose.runtime.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 @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-QHJUJtg(float $this, float dimension);
+    method @androidx.compose.runtime.Stable public static inline operator float times-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
   public final class PxKt {
-    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 @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.PxBounds PxBounds-MrV732k(androidx.compose.ui.geometry.Offset topLeft, long size);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.geometry.Offset center(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Offset center-uvyYCjk(long);
     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);
+    method @androidx.compose.runtime.Stable public static inline androidx.compose.ui.unit.IntOffset round(androidx.compose.ui.geometry.Offset);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.unit.PxBounds toBounds-uvyYCjk(long);
+    method @androidx.compose.runtime.Stable public static androidx.compose.ui.geometry.Rect toRect(androidx.compose.ui.unit.PxBounds);
+    method @androidx.compose.runtime.Stable public static long toSize(androidx.compose.ui.unit.PxBounds);
   }
 
-  @androidx.compose.Immutable public final inline class PxSquared implements java.lang.Comparable<androidx.compose.ui.unit.PxSquared> {
+  @androidx.compose.runtime.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-iBfx0ow(float p);
-    method @androidx.compose.Stable public static operator int compareTo-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public operator int compareTo-iBfx0ow(float p);
+    method @androidx.compose.runtime.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-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 @androidx.compose.runtime.Stable public static inline operator float div-830ceAw(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float div-impl(float $this, float other);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Immutable public static inline int hashCode-impl(float p);
+    method @androidx.compose.runtime.Stable public static inline operator float minus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float plus-iBfx0ow(float $this, float other);
+    method @androidx.compose.runtime.Stable public static inline operator float times-impl(float $this, float other);
+    method @androidx.compose.runtime.Stable public static String toString-impl(float $this);
   }
 
-  @androidx.compose.Immutable public final inline class TextUnit {
+  @androidx.compose.runtime.Immutable public final inline class TextUnit {
     ctor public TextUnit();
     method public static inline operator int compareTo--R2X_6o(long $this, long other);
     method public static long constructor-impl(long packedValue);
@@ -431,12 +431,12 @@
     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 @androidx.compose.Immutable public static inline boolean equals-impl(long p, Object? p1);
+    method @androidx.compose.runtime.Immutable public static inline boolean equals-impl(long p, Object? p1);
     method public static boolean equals-impl0(long p1, long p2);
     method public long getPackedValue();
     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 @androidx.compose.runtime.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);
@@ -465,22 +465,22 @@
     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 @androidx.compose.runtime.Stable public static inline long coerceAtLeast-8E83U4Q(long, long minimumValue);
+    method @androidx.compose.runtime.Stable public static inline long coerceAtMost-8E83U4Q(long, long maximumValue);
+    method @androidx.compose.runtime.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-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.runtime.Stable public static long lerp-KeuwX78(long a, long b, float t);
+    method @androidx.compose.runtime.Stable public static inline long max-8E83U4Q(long a, long b);
+    method @androidx.compose.runtime.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-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);
+    method @androidx.compose.runtime.Stable public static inline operator long times-0PRCd3Q(double, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-Ew26DjI(float, long other);
+    method @androidx.compose.runtime.Stable public static inline operator long times-VJWtCv4(int, long other);
   }
 
   public enum TextUnitType {
@@ -491,11 +491,11 @@
     enum_constant public static final androidx.compose.ui.unit.TextUnitType Sp;
   }
 
-  @androidx.compose.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
+  @androidx.compose.runtime.Immutable public final class Uptime implements java.lang.Comparable<androidx.compose.ui.unit.Uptime> {
     ctor public Uptime(long nanoseconds);
     method public int compareTo(androidx.compose.ui.unit.Uptime other);
     method public long component1();
-    method @androidx.compose.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
+    method @androidx.compose.runtime.Immutable public androidx.compose.ui.unit.Uptime copy(long nanoseconds);
     method public long getNanoseconds();
     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);
@@ -512,10 +512,10 @@
     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 {
+  @androidx.compose.runtime.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.compose.ui.unit.Velocity copy(androidx.compose.ui.geometry.Offset pixelsPerSecond);
+    method @androidx.compose.runtime.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.compose.ui.unit.Velocity unaryMinus();
     field public static final androidx.compose.ui.unit.Velocity.Companion Companion;
diff --git a/ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt b/ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt
index 03d0ba1..d125a4e 100644
--- a/ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt
+++ b/ui/ui-unit/samples/src/main/java/androidx/compose/ui/unit/samples/DensitySample.kt
@@ -17,7 +17,7 @@
 package androidx.compose.ui.unit.samples
 
 import androidx.annotation.Sampled
-import androidx.compose.Composable
+import androidx.compose.runtime.Composable
 import androidx.ui.core.DensityAmbient
 import androidx.compose.ui.unit.dp
 
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt
index a0d214a..ae16988 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Constraints.kt
@@ -17,8 +17,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 
 /**
  * Immutable constraints used for measuring child Layouts or [LayoutModifier]s. A parent layout
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
index 1514d2a..5f11ec4 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Density.kt
@@ -16,8 +16,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Rect
 import kotlin.math.roundToInt
 
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
index c5dd377..77fae99 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Dp.kt
@@ -17,8 +17,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.unit.Dp.Companion.Hairline
 import androidx.compose.ui.util.lerp
 import androidx.compose.ui.util.packFloats
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt
index e911c55..305adf9 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Duration.kt
@@ -19,8 +19,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 
 /*
  * The following unit conversion factors are required to be public due to their use
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt
index a239ec95..e1562e7 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntBounds.kt
@@ -18,8 +18,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Rect
 
 /**
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt
index f8f15a5..9e3c1d9 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntOffset.kt
@@ -18,8 +18,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.util.lerp
 import androidx.compose.ui.util.packInts
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
index a79468b..845d4ed 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/IntSize.kt
@@ -18,8 +18,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.util.packInts
 import androidx.compose.ui.util.unpackInt1
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt
index 3bf9bd9..6689aac 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Px.kt
@@ -17,8 +17,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.geometry.Offset
 import androidx.compose.ui.geometry.Rect
 import androidx.compose.ui.geometry.Size
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt
index d83291b..714baf7 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/TextUnit.kt
@@ -17,8 +17,8 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
-import androidx.compose.Stable
+import androidx.compose.runtime.Immutable
+import androidx.compose.runtime.Stable
 import androidx.compose.ui.util.lerp
 
 /**
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt
index 0f2a4a3..5c91c67 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Uptime.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 
 /**
  * A single point in time with a time base of the system's uptime [nanoseconds]. Compare to
diff --git a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt
index d48f5eed..b4d46a8 100644
--- a/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt
+++ b/ui/ui-unit/src/commonMain/kotlin/androidx/compose/ui/unit/Velocity.kt
@@ -16,7 +16,7 @@
 
 package androidx.compose.ui.unit
 
-import androidx.compose.Immutable
+import androidx.compose.runtime.Immutable
 import androidx.compose.ui.geometry.Offset
 
 /** A velocity in two dimensions. */
