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/HotReloadIntegrationTests.kt
index 3423914..495d201 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/HotReloadIntegrationTests.kt
@@ -24,8 +24,8 @@
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.DrawerState
-import androidx.ui.material.ModalDrawerLayout
+import androidx.compose.material.DrawerState
+import androidx.compose.material.ModalDrawerLayout
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
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/samples/EffectSamples.kt
index 0e3ae2f..05a28b0 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/EffectSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/EffectSamples.kt
@@ -27,7 +27,7 @@
 import androidx.compose.stateFor
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Row
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 
 @Suppress("unused")
 @Sampled
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/samples/ModelSamples.kt
index 4d46770..4100bc6 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/ModelSamples.kt
@@ -25,7 +25,7 @@
 import androidx.compose.setValue
 import androidx.compose.state
 import androidx.compose.ui.text.input.TextFieldValue
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 
 @Composable
 @OptIn(ExperimentalFoundationApi::class)
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/samples/MutableStateListSamples.kt
index 01bf602..7454c34 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateListSamples.kt
@@ -28,7 +28,7 @@
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 
 @Composable
 @OptIn(ExperimentalFoundationApi::class)
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/samples/MutableStateMapSample.kt
index 8d3b211..4095e61 100644
--- a/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
+++ b/compose/compose-runtime/samples/src/main/java/androidx/compose/samples/MutableStateMapSample.kt
@@ -28,7 +28,7 @@
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 
 @Composable
 @OptIn(ExperimentalFoundationApi::class)
diff --git a/ui/README.md b/ui/README.md
index 72534f4..2ce10b7e 100644
--- a/ui/README.md
+++ b/ui/README.md
@@ -3,7 +3,7 @@
 Jetpack Compose is a suite of libraries within the AndroidX ecosystem. For more information, see our [project page](https://developer.android.com/jetpackcompose)
 
 ## Syntax
-Jetpack Compose uses composable functions instead of XML layouts to define UI components. You can see this in action in the demos, like `androidx.ui.material.demos.ButtonDemo.kt`. More information can be found in the [compiler README](https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/compose/README.md).
+Jetpack Compose uses composable functions instead of XML layouts to define UI components. You can see this in action in the demos, like `androidx.compose.material.demos.ButtonDemo.kt`. More information can be found in the [compiler README](https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/compose/README.md).
 
 You may notice some parts of the codebase use an XML-like syntax. This was an exploration done early on in the project, and we have since decided to move away from it. Usages of this syntax will eventually be converted to use the standard kotlin DSL instead.
 
diff --git a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/ColorPaletteBenchmark.kt b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/ColorPaletteBenchmark.kt
index 815783f..e8feb10 100644
--- a/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/ColorPaletteBenchmark.kt
+++ b/ui/integration-tests/benchmark/src/androidTest/java/androidx/ui/benchmark/test/ColorPaletteBenchmark.kt
@@ -19,7 +19,7 @@
 import androidx.test.filters.LargeTest
 import androidx.ui.benchmark.ComposeBenchmarkRule
 import androidx.ui.benchmark.toggleStateBenchmarkRecompose
-import androidx.ui.material.ColorPalette
+import androidx.compose.material.ColorPalette
 import androidx.ui.integration.test.material.ImmutableColorPaletteTestCase
 import androidx.ui.integration.test.material.ObservableColorPaletteTestCase
 import org.junit.Rule
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 0eade8a..eb5cb39b 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
@@ -36,8 +36,8 @@
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.RadioButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.RadioButton
 import androidx.ui.test.ComposeTestCase
 import org.junit.Rule
 import org.junit.Test
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 6b47a42..0e5fcfc 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
@@ -40,10 +40,10 @@
 import androidx.ui.demos.common.DemoCategory
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.toArgb
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.darkColorPalette
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.darkColorPalette
+import androidx.compose.material.lightColorPalette
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.listSaver
 import androidx.compose.runtime.savedinstancestate.rememberSavedInstanceState
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 0b95a19..3ae763c 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
@@ -38,17 +38,17 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.IconButton
-import androidx.ui.material.ListItem
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Scaffold
-import androidx.ui.material.Surface
-import androidx.ui.material.TopAppBar
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.ArrowBack
-import androidx.ui.material.icons.filled.ArrowForward
-import androidx.ui.material.icons.filled.Search
-import androidx.ui.material.icons.filled.Settings
+import androidx.compose.material.IconButton
+import androidx.compose.material.ListItem
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Scaffold
+import androidx.compose.material.Surface
+import androidx.compose.material.TopAppBar
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+import androidx.compose.material.icons.filled.ArrowForward
+import androidx.compose.material.icons.filled.Search
+import androidx.compose.material.icons.filled.Settings
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.ui.unit.dp
 
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 d0c3658..03cf62e1 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
@@ -23,9 +23,9 @@
 import androidx.compose.mutableStateOf
 import androidx.compose.setValue
 import androidx.compose.foundation.isSystemInDarkTheme
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.darkColorPalette
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.darkColorPalette
+import androidx.compose.material.lightColorPalette
 
 /**
  * Wrapper class that contains a light and dark [ColorPalette], to allow saving and
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 7c23e27..69ad005 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
@@ -33,12 +33,12 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.IconButton
-import androidx.ui.material.ListItem
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.TopAppBar
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Close
+import androidx.compose.material.IconButton
+import androidx.compose.material.ListItem
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.TopAppBar
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Close
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.annotatedString
 import androidx.compose.ui.text.withStyle
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoSettingsActivity.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoSettingsActivity.kt
index a02a1e1..9fb2c96 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoSettingsActivity.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/DemoSettingsActivity.kt
@@ -28,9 +28,9 @@
 import androidx.preference.plusAssign
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.toArgb
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.darkColorPalette
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.darkColorPalette
+import androidx.compose.material.lightColorPalette
 import kotlin.reflect.full.memberProperties
 
 /**
diff --git a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/Demos.kt b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/Demos.kt
index edc0068..45211c3 100644
--- a/ui/integration-tests/demos/src/main/java/androidx/ui/demos/Demos.kt
+++ b/ui/integration-tests/demos/src/main/java/androidx/ui/demos/Demos.kt
@@ -22,8 +22,8 @@
 import androidx.ui.demos.common.DemoCategory
 import androidx.compose.foundation.demos.FoundationDemos
 import androidx.compose.foundation.layout.demos.LayoutDemos
-import androidx.ui.material.demos.MaterialDemos
-import androidx.ui.material.studies.MaterialStudies
+import androidx.compose.material.demos.MaterialDemos
+import androidx.compose.material.studies.MaterialStudies
 import androidx.compose.foundation.text.demos.TextDemos
 
 /**
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 9c3d551..fce413a 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
@@ -37,8 +37,8 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import androidx.ui.test.ComposeTestCase
 import kotlin.random.Random
 
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 0c7e173..43af41b 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
@@ -24,7 +24,7 @@
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.MaterialTheme
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.compose.foundation.layout.preferredSize
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 78054f0..bc336d6 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
@@ -25,8 +25,8 @@
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.compose.foundation.layout.preferredSize
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 d35ea81..c6700a8 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
@@ -21,8 +21,8 @@
 import androidx.compose.foundation.Text
 import androidx.ui.integration.test.ToggleableTestCase
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import androidx.ui.test.ComposeTestCase
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.unit.sp
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 a87f2f3..18c9d8a 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
@@ -26,9 +26,9 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.Checkbox
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.Checkbox
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import androidx.ui.test.ComposeTestCase
 
 /**
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 2bb1273..5ed6296 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
@@ -21,9 +21,9 @@
 import androidx.compose.MutableState
 import androidx.compose.state
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.lightColorPalette
 import androidx.ui.test.ComposeTestCase
 import androidx.ui.integration.test.ToggleableTestCase
 
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 d4e3c5d..ed9bea3 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
@@ -37,7 +37,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 import androidx.compose.ui.unit.dp
 import androidx.ui.viewinterop.AndroidView
 
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 e99966a..bd8f959 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
@@ -40,7 +40,7 @@
 import androidx.compose.animation.animateContentSize
 import androidx.ui.core.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 import androidx.compose.ui.unit.dp
 
 @Composable
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 eb94b1b..9eb29c4 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
@@ -26,7 +26,7 @@
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.runtime.livedata.observeAsState
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 import androidx.ui.viewmodel.viewModel
 
 @Composable
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 2c5c021..957a2d5 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
@@ -38,7 +38,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.MaterialTheme
 import androidx.compose.ui.unit.dp
 
 @Composable
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 9fffbdb..4c670a7 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
@@ -36,10 +36,10 @@
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.size
+import androidx.compose.material.Button
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.unit.dp
-import androidx.ui.material.Button
 import androidx.ui.viewinterop.AndroidView
 import androidx.ui.viewinterop.emitView
 
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 289ed5a..adac624 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
@@ -27,7 +27,7 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.Button
+import androidx.compose.material.Button
 import androidx.compose.ui.unit.dp
 
 @Sampled
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 510116c..6816060 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
@@ -33,13 +33,13 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.Button
-import androidx.ui.material.CircularProgressIndicator
-import androidx.ui.material.ExtendedFloatingActionButton
-import androidx.ui.material.FilledTextField
-import androidx.ui.material.Scaffold
-import androidx.ui.material.Slider
-import androidx.ui.material.TopAppBar
+import androidx.compose.material.Button
+import androidx.compose.material.CircularProgressIndicator
+import androidx.compose.material.ExtendedFloatingActionButton
+import androidx.compose.material.FilledTextField
+import androidx.compose.material.Scaffold
+import androidx.compose.material.Slider
+import androidx.compose.material.TopAppBar
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.unit.dp
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 6178ade..546d095 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
@@ -39,8 +39,8 @@
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
 import androidx.compose.foundation.layout.width
-import androidx.ui.material.Button
-import androidx.ui.material.Surface
+import androidx.compose.material.Button
+import androidx.compose.material.Surface
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.dp
diff --git a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
index 3f5eaed..460048c 100644
--- a/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
+++ b/ui/ui-desktop/src/jvmTest/kotlin/androidx/ui/desktop/ParagraphTest.kt
@@ -28,8 +28,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.Scaffold
-import androidx.ui.material.TopAppBar
+import androidx.compose.material.Scaffold
+import androidx.compose.material.TopAppBar
 import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.SpanStyle
 import androidx.compose.ui.text.font.fontFamily
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 bb82cbf..1799067 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
@@ -34,7 +34,7 @@
 /**
  * Configure component to be selectable, usually as a part of a mutually exclusive group, where
  * only one item can be selected at any point in time. A typical example of mutually exclusive set
- * is [androidx.ui.material.RadioGroup]
+ * is [androidx.compose.material.RadioGroup]
  *
  * If you want to make an item support on/off capabilities without being part of a set, consider
  * using [Modifier.toggleable]
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 cac740b..855f93b 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
@@ -74,7 +74,8 @@
             "androidx.ui.geometry" to "androidx.compose.ui.geometry",
             "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.util" to "androidx.compose.ui.util",
+            "androidx.ui.material" to "androidx.compose.material"
         )
 
         val ISSUE = Issue.create(
diff --git a/ui/ui-material/api/0.1.0-dev16.txt b/ui/ui-material/api/0.1.0-dev16.txt
index 6e406b2..ab2d0d7 100644
--- a/ui/ui-material/api/0.1.0-dev16.txt
+++ b/ui/ui-material/api/0.1.0-dev16.txt
@@ -1,34 +1,34 @@
 // Signature format: 3.0
-package androidx.ui.material {
+package androidx.compose.material {
 
   public enum AlertDialogButtonLayout {
-    method public static androidx.ui.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.AlertDialogButtonLayout[] values();
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+    method public static androidx.compose.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.AlertDialogButtonLayout[] values();
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout Stacked;
   }
 
   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.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.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> 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);
   }
 
   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.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
-    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    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);
   }
 
   public enum BottomDrawerState {
-    method public static androidx.ui.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.BottomDrawerState[] values();
-    enum_constant public static final androidx.ui.material.BottomDrawerState Closed;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Expanded;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Opened;
+    method public static androidx.compose.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.BottomDrawerState[] values();
+    enum_constant public static final androidx.compose.material.BottomDrawerState Closed;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Expanded;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Opened;
   }
 
   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.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.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));
   }
 
@@ -47,7 +47,7 @@
     property public final float DefaultMinWidth;
     property public final long defaultDisabledBackgroundColor;
     property public final long defaultDisabledContentColor;
-    field public static final androidx.ui.material.ButtonConstants INSTANCE;
+    field public static final androidx.compose.material.ButtonConstants INSTANCE;
   }
 
   public final class ButtonKt {
@@ -67,9 +67,9 @@
 
   public final class ColorKt {
     method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
-    method public static long contentColorFor-xCGpx3o(androidx.ui.material.ColorPalette, long color);
-    method public static androidx.ui.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.ui.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);
+    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);
   }
 
   public interface ColorPalette {
@@ -108,19 +108,19 @@
   public final class DrawerConstants {
     method public float getDefaultElevation();
     property public final float DefaultElevation;
-    field public static final androidx.ui.material.DrawerConstants INSTANCE;
+    field public static final androidx.compose.material.DrawerConstants INSTANCE;
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    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);
   }
 
   public enum DrawerState {
-    method public static androidx.ui.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.DrawerState[] values();
-    enum_constant public static final androidx.ui.material.DrawerState Closed;
-    enum_constant public static final androidx.ui.material.DrawerState Opened;
+    method public static androidx.compose.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.DrawerState[] values();
+    enum_constant public static final androidx.compose.material.DrawerState Closed;
+    enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
   @androidx.compose.Immutable public interface Emphasis {
@@ -128,17 +128,17 @@
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.ui.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.ui.material.EmphasisLevels> getEmphasisAmbient();
+    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();
   }
 
   public interface EmphasisLevels {
-    method public androidx.ui.material.Emphasis getDisabled();
-    method public androidx.ui.material.Emphasis getHigh();
-    method public androidx.ui.material.Emphasis getMedium();
-    property public abstract androidx.ui.material.Emphasis disabled;
-    property public abstract androidx.ui.material.Emphasis high;
-    property public abstract androidx.ui.material.Emphasis medium;
+    method public androidx.compose.material.Emphasis getDisabled();
+    method public androidx.compose.material.Emphasis getHigh();
+    method public androidx.compose.material.Emphasis getMedium();
+    property public abstract androidx.compose.material.Emphasis disabled;
+    property public abstract androidx.compose.material.Emphasis high;
+    property public abstract androidx.compose.material.Emphasis medium;
   }
 
   @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalMaterialApi {
@@ -160,17 +160,17 @@
   }
 
   public final class MaterialTheme {
-    method public androidx.ui.material.ColorPalette getColors();
-    method public androidx.ui.material.Shapes getShapes();
-    method public androidx.ui.material.Typography getTypography();
-    property public final androidx.ui.material.ColorPalette colors;
-    property public final androidx.ui.material.Shapes shapes;
-    property public final androidx.ui.material.Typography typography;
-    field public static final androidx.ui.material.MaterialTheme INSTANCE;
+    method public androidx.compose.material.ColorPalette getColors();
+    method public androidx.compose.material.Shapes getShapes();
+    method public androidx.compose.material.Typography getTypography();
+    property public final androidx.compose.material.ColorPalette colors;
+    property public final androidx.compose.material.Shapes shapes;
+    property public final androidx.compose.material.Typography typography;
+    field public static final androidx.compose.material.MaterialTheme INSTANCE;
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.ui.material.ColorPalette colors = MaterialTheme.colors, androidx.ui.material.Typography typography = MaterialTheme.typography, androidx.ui.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    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);
   }
 
   public final class MenuKt {
@@ -186,7 +186,7 @@
   public final class ProgressIndicatorConstants {
     method public float getDefaultStrokeWidth();
     property public final float DefaultStrokeWidth;
-    field public static final androidx.ui.material.ProgressIndicatorConstants INSTANCE;
+    field public static final androidx.compose.material.ProgressIndicatorConstants INSTANCE;
   }
 
   public final class ProgressIndicatorKt {
@@ -201,12 +201,12 @@
     method public long getDefaultUnselectedColor();
     property public final long defaultDisabledColor;
     property public final long defaultUnselectedColor;
-    field public static final androidx.ui.material.RadioButtonConstants INSTANCE;
+    field public static final androidx.compose.material.RadioButtonConstants INSTANCE;
   }
 
   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.ui.material.RadioGroupScope,kotlin.Unit> content);
+    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);
   }
 
@@ -216,34 +216,34 @@
   }
 
   public final class Scaffold {
-    field public static final androidx.ui.material.Scaffold INSTANCE;
+    field public static final androidx.compose.material.Scaffold INSTANCE;
   }
 
   public enum Scaffold.FabPosition {
-    method public static androidx.ui.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.Scaffold.FabPosition[] values();
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition Center;
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition End;
+    method public static androidx.compose.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.Scaffold.FabPosition[] values();
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition Center;
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition End;
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.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.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
+}), 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 {
-    ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
+    ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
-    method public androidx.ui.material.DrawerState getDrawerState();
+    method public androidx.compose.material.DrawerState getDrawerState();
     method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
     method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
-    method public void setDrawerState(androidx.ui.material.DrawerState p);
+    method public void setDrawerState(androidx.compose.material.DrawerState p);
     property public final androidx.compose.ui.geometry.Size? bottomBarSize;
-    property public final androidx.ui.material.DrawerState drawerState;
+    property public final androidx.compose.material.DrawerState drawerState;
     property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
     property public final androidx.compose.ui.geometry.Size? topBarSize;
@@ -255,7 +255,7 @@
     method public androidx.compose.foundation.shape.CornerBasedShape component1();
     method public androidx.compose.foundation.shape.CornerBasedShape component2();
     method public androidx.compose.foundation.shape.CornerBasedShape component3();
-    method public androidx.ui.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
     method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
@@ -270,12 +270,12 @@
 
   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 public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
+    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 public static long getPrimarySurface(androidx.ui.material.ColorPalette);
+    method public static long getPrimarySurface(androidx.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
@@ -285,21 +285,21 @@
   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.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    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, { 
     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.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
-    field public static final androidx.ui.material.TabRow INSTANCE;
+    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);
+    field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.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();
@@ -309,7 +309,7 @@
   public final class TextButtonConstants {
     method public androidx.compose.foundation.layout.InnerPadding getDefaultInnerPadding();
     property public final androidx.compose.foundation.layout.InnerPadding DefaultInnerPadding;
-    field public static final androidx.ui.material.TextButtonConstants INSTANCE;
+    field public static final androidx.compose.material.TextButtonConstants INSTANCE;
   }
 
   public final class TextFieldImplKt {
@@ -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.ui.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.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();
@@ -358,14 +358,14 @@
 
 }
 
-package androidx.ui.material.internal {
+package androidx.compose.material.internal {
 
   public final class StateDraggableKt {
   }
 
 }
 
-package androidx.ui.material.ripple {
+package androidx.compose.material.ripple {
 
   public final class RippleAnimationKt {
   }
@@ -375,20 +375,20 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    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);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
     method public float opacityForInteraction(androidx.compose.foundation.Interaction interaction);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleTheme {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
     method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.ui.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
diff --git a/ui/ui-material/api/current.txt b/ui/ui-material/api/current.txt
index 6e406b2..ab2d0d7 100644
--- a/ui/ui-material/api/current.txt
+++ b/ui/ui-material/api/current.txt
@@ -1,34 +1,34 @@
 // Signature format: 3.0
-package androidx.ui.material {
+package androidx.compose.material {
 
   public enum AlertDialogButtonLayout {
-    method public static androidx.ui.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.AlertDialogButtonLayout[] values();
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+    method public static androidx.compose.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.AlertDialogButtonLayout[] values();
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout Stacked;
   }
 
   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.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.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> 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);
   }
 
   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.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
-    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    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);
   }
 
   public enum BottomDrawerState {
-    method public static androidx.ui.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.BottomDrawerState[] values();
-    enum_constant public static final androidx.ui.material.BottomDrawerState Closed;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Expanded;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Opened;
+    method public static androidx.compose.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.BottomDrawerState[] values();
+    enum_constant public static final androidx.compose.material.BottomDrawerState Closed;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Expanded;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Opened;
   }
 
   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.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.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));
   }
 
@@ -47,7 +47,7 @@
     property public final float DefaultMinWidth;
     property public final long defaultDisabledBackgroundColor;
     property public final long defaultDisabledContentColor;
-    field public static final androidx.ui.material.ButtonConstants INSTANCE;
+    field public static final androidx.compose.material.ButtonConstants INSTANCE;
   }
 
   public final class ButtonKt {
@@ -67,9 +67,9 @@
 
   public final class ColorKt {
     method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
-    method public static long contentColorFor-xCGpx3o(androidx.ui.material.ColorPalette, long color);
-    method public static androidx.ui.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.ui.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);
+    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);
   }
 
   public interface ColorPalette {
@@ -108,19 +108,19 @@
   public final class DrawerConstants {
     method public float getDefaultElevation();
     property public final float DefaultElevation;
-    field public static final androidx.ui.material.DrawerConstants INSTANCE;
+    field public static final androidx.compose.material.DrawerConstants INSTANCE;
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    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);
   }
 
   public enum DrawerState {
-    method public static androidx.ui.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.DrawerState[] values();
-    enum_constant public static final androidx.ui.material.DrawerState Closed;
-    enum_constant public static final androidx.ui.material.DrawerState Opened;
+    method public static androidx.compose.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.DrawerState[] values();
+    enum_constant public static final androidx.compose.material.DrawerState Closed;
+    enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
   @androidx.compose.Immutable public interface Emphasis {
@@ -128,17 +128,17 @@
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.ui.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.ui.material.EmphasisLevels> getEmphasisAmbient();
+    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();
   }
 
   public interface EmphasisLevels {
-    method public androidx.ui.material.Emphasis getDisabled();
-    method public androidx.ui.material.Emphasis getHigh();
-    method public androidx.ui.material.Emphasis getMedium();
-    property public abstract androidx.ui.material.Emphasis disabled;
-    property public abstract androidx.ui.material.Emphasis high;
-    property public abstract androidx.ui.material.Emphasis medium;
+    method public androidx.compose.material.Emphasis getDisabled();
+    method public androidx.compose.material.Emphasis getHigh();
+    method public androidx.compose.material.Emphasis getMedium();
+    property public abstract androidx.compose.material.Emphasis disabled;
+    property public abstract androidx.compose.material.Emphasis high;
+    property public abstract androidx.compose.material.Emphasis medium;
   }
 
   @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalMaterialApi {
@@ -160,17 +160,17 @@
   }
 
   public final class MaterialTheme {
-    method public androidx.ui.material.ColorPalette getColors();
-    method public androidx.ui.material.Shapes getShapes();
-    method public androidx.ui.material.Typography getTypography();
-    property public final androidx.ui.material.ColorPalette colors;
-    property public final androidx.ui.material.Shapes shapes;
-    property public final androidx.ui.material.Typography typography;
-    field public static final androidx.ui.material.MaterialTheme INSTANCE;
+    method public androidx.compose.material.ColorPalette getColors();
+    method public androidx.compose.material.Shapes getShapes();
+    method public androidx.compose.material.Typography getTypography();
+    property public final androidx.compose.material.ColorPalette colors;
+    property public final androidx.compose.material.Shapes shapes;
+    property public final androidx.compose.material.Typography typography;
+    field public static final androidx.compose.material.MaterialTheme INSTANCE;
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.ui.material.ColorPalette colors = MaterialTheme.colors, androidx.ui.material.Typography typography = MaterialTheme.typography, androidx.ui.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    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);
   }
 
   public final class MenuKt {
@@ -186,7 +186,7 @@
   public final class ProgressIndicatorConstants {
     method public float getDefaultStrokeWidth();
     property public final float DefaultStrokeWidth;
-    field public static final androidx.ui.material.ProgressIndicatorConstants INSTANCE;
+    field public static final androidx.compose.material.ProgressIndicatorConstants INSTANCE;
   }
 
   public final class ProgressIndicatorKt {
@@ -201,12 +201,12 @@
     method public long getDefaultUnselectedColor();
     property public final long defaultDisabledColor;
     property public final long defaultUnselectedColor;
-    field public static final androidx.ui.material.RadioButtonConstants INSTANCE;
+    field public static final androidx.compose.material.RadioButtonConstants INSTANCE;
   }
 
   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.ui.material.RadioGroupScope,kotlin.Unit> content);
+    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);
   }
 
@@ -216,34 +216,34 @@
   }
 
   public final class Scaffold {
-    field public static final androidx.ui.material.Scaffold INSTANCE;
+    field public static final androidx.compose.material.Scaffold INSTANCE;
   }
 
   public enum Scaffold.FabPosition {
-    method public static androidx.ui.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.Scaffold.FabPosition[] values();
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition Center;
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition End;
+    method public static androidx.compose.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.Scaffold.FabPosition[] values();
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition Center;
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition End;
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.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.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
+}), 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 {
-    ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
+    ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
-    method public androidx.ui.material.DrawerState getDrawerState();
+    method public androidx.compose.material.DrawerState getDrawerState();
     method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
     method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
-    method public void setDrawerState(androidx.ui.material.DrawerState p);
+    method public void setDrawerState(androidx.compose.material.DrawerState p);
     property public final androidx.compose.ui.geometry.Size? bottomBarSize;
-    property public final androidx.ui.material.DrawerState drawerState;
+    property public final androidx.compose.material.DrawerState drawerState;
     property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
     property public final androidx.compose.ui.geometry.Size? topBarSize;
@@ -255,7 +255,7 @@
     method public androidx.compose.foundation.shape.CornerBasedShape component1();
     method public androidx.compose.foundation.shape.CornerBasedShape component2();
     method public androidx.compose.foundation.shape.CornerBasedShape component3();
-    method public androidx.ui.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
     method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
@@ -270,12 +270,12 @@
 
   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 public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
+    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 public static long getPrimarySurface(androidx.ui.material.ColorPalette);
+    method public static long getPrimarySurface(androidx.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
@@ -285,21 +285,21 @@
   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.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    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, { 
     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.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
-    field public static final androidx.ui.material.TabRow INSTANCE;
+    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);
+    field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.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();
@@ -309,7 +309,7 @@
   public final class TextButtonConstants {
     method public androidx.compose.foundation.layout.InnerPadding getDefaultInnerPadding();
     property public final androidx.compose.foundation.layout.InnerPadding DefaultInnerPadding;
-    field public static final androidx.ui.material.TextButtonConstants INSTANCE;
+    field public static final androidx.compose.material.TextButtonConstants INSTANCE;
   }
 
   public final class TextFieldImplKt {
@@ -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.ui.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.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();
@@ -358,14 +358,14 @@
 
 }
 
-package androidx.ui.material.internal {
+package androidx.compose.material.internal {
 
   public final class StateDraggableKt {
   }
 
 }
 
-package androidx.ui.material.ripple {
+package androidx.compose.material.ripple {
 
   public final class RippleAnimationKt {
   }
@@ -375,20 +375,20 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    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);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
     method public float opacityForInteraction(androidx.compose.foundation.Interaction interaction);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleTheme {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
     method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.ui.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.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 6e406b2..ab2d0d7 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
@@ -1,34 +1,34 @@
 // Signature format: 3.0
-package androidx.ui.material {
+package androidx.compose.material {
 
   public enum AlertDialogButtonLayout {
-    method public static androidx.ui.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.AlertDialogButtonLayout[] values();
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+    method public static androidx.compose.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.AlertDialogButtonLayout[] values();
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout Stacked;
   }
 
   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.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.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> 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);
   }
 
   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.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
-    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    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);
   }
 
   public enum BottomDrawerState {
-    method public static androidx.ui.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.BottomDrawerState[] values();
-    enum_constant public static final androidx.ui.material.BottomDrawerState Closed;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Expanded;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Opened;
+    method public static androidx.compose.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.BottomDrawerState[] values();
+    enum_constant public static final androidx.compose.material.BottomDrawerState Closed;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Expanded;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Opened;
   }
 
   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.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.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));
   }
 
@@ -47,7 +47,7 @@
     property public final float DefaultMinWidth;
     property public final long defaultDisabledBackgroundColor;
     property public final long defaultDisabledContentColor;
-    field public static final androidx.ui.material.ButtonConstants INSTANCE;
+    field public static final androidx.compose.material.ButtonConstants INSTANCE;
   }
 
   public final class ButtonKt {
@@ -67,9 +67,9 @@
 
   public final class ColorKt {
     method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
-    method public static long contentColorFor-xCGpx3o(androidx.ui.material.ColorPalette, long color);
-    method public static androidx.ui.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.ui.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);
+    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);
   }
 
   public interface ColorPalette {
@@ -108,19 +108,19 @@
   public final class DrawerConstants {
     method public float getDefaultElevation();
     property public final float DefaultElevation;
-    field public static final androidx.ui.material.DrawerConstants INSTANCE;
+    field public static final androidx.compose.material.DrawerConstants INSTANCE;
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    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);
   }
 
   public enum DrawerState {
-    method public static androidx.ui.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.DrawerState[] values();
-    enum_constant public static final androidx.ui.material.DrawerState Closed;
-    enum_constant public static final androidx.ui.material.DrawerState Opened;
+    method public static androidx.compose.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.DrawerState[] values();
+    enum_constant public static final androidx.compose.material.DrawerState Closed;
+    enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
   @androidx.compose.Immutable public interface Emphasis {
@@ -128,17 +128,17 @@
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.ui.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.ui.material.EmphasisLevels> getEmphasisAmbient();
+    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();
   }
 
   public interface EmphasisLevels {
-    method public androidx.ui.material.Emphasis getDisabled();
-    method public androidx.ui.material.Emphasis getHigh();
-    method public androidx.ui.material.Emphasis getMedium();
-    property public abstract androidx.ui.material.Emphasis disabled;
-    property public abstract androidx.ui.material.Emphasis high;
-    property public abstract androidx.ui.material.Emphasis medium;
+    method public androidx.compose.material.Emphasis getDisabled();
+    method public androidx.compose.material.Emphasis getHigh();
+    method public androidx.compose.material.Emphasis getMedium();
+    property public abstract androidx.compose.material.Emphasis disabled;
+    property public abstract androidx.compose.material.Emphasis high;
+    property public abstract androidx.compose.material.Emphasis medium;
   }
 
   @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalMaterialApi {
@@ -160,17 +160,17 @@
   }
 
   public final class MaterialTheme {
-    method public androidx.ui.material.ColorPalette getColors();
-    method public androidx.ui.material.Shapes getShapes();
-    method public androidx.ui.material.Typography getTypography();
-    property public final androidx.ui.material.ColorPalette colors;
-    property public final androidx.ui.material.Shapes shapes;
-    property public final androidx.ui.material.Typography typography;
-    field public static final androidx.ui.material.MaterialTheme INSTANCE;
+    method public androidx.compose.material.ColorPalette getColors();
+    method public androidx.compose.material.Shapes getShapes();
+    method public androidx.compose.material.Typography getTypography();
+    property public final androidx.compose.material.ColorPalette colors;
+    property public final androidx.compose.material.Shapes shapes;
+    property public final androidx.compose.material.Typography typography;
+    field public static final androidx.compose.material.MaterialTheme INSTANCE;
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.ui.material.ColorPalette colors = MaterialTheme.colors, androidx.ui.material.Typography typography = MaterialTheme.typography, androidx.ui.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    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);
   }
 
   public final class MenuKt {
@@ -186,7 +186,7 @@
   public final class ProgressIndicatorConstants {
     method public float getDefaultStrokeWidth();
     property public final float DefaultStrokeWidth;
-    field public static final androidx.ui.material.ProgressIndicatorConstants INSTANCE;
+    field public static final androidx.compose.material.ProgressIndicatorConstants INSTANCE;
   }
 
   public final class ProgressIndicatorKt {
@@ -201,12 +201,12 @@
     method public long getDefaultUnselectedColor();
     property public final long defaultDisabledColor;
     property public final long defaultUnselectedColor;
-    field public static final androidx.ui.material.RadioButtonConstants INSTANCE;
+    field public static final androidx.compose.material.RadioButtonConstants INSTANCE;
   }
 
   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.ui.material.RadioGroupScope,kotlin.Unit> content);
+    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);
   }
 
@@ -216,34 +216,34 @@
   }
 
   public final class Scaffold {
-    field public static final androidx.ui.material.Scaffold INSTANCE;
+    field public static final androidx.compose.material.Scaffold INSTANCE;
   }
 
   public enum Scaffold.FabPosition {
-    method public static androidx.ui.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.Scaffold.FabPosition[] values();
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition Center;
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition End;
+    method public static androidx.compose.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.Scaffold.FabPosition[] values();
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition Center;
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition End;
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.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.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
+}), 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 {
-    ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
+    ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
-    method public androidx.ui.material.DrawerState getDrawerState();
+    method public androidx.compose.material.DrawerState getDrawerState();
     method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
     method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
-    method public void setDrawerState(androidx.ui.material.DrawerState p);
+    method public void setDrawerState(androidx.compose.material.DrawerState p);
     property public final androidx.compose.ui.geometry.Size? bottomBarSize;
-    property public final androidx.ui.material.DrawerState drawerState;
+    property public final androidx.compose.material.DrawerState drawerState;
     property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
     property public final androidx.compose.ui.geometry.Size? topBarSize;
@@ -255,7 +255,7 @@
     method public androidx.compose.foundation.shape.CornerBasedShape component1();
     method public androidx.compose.foundation.shape.CornerBasedShape component2();
     method public androidx.compose.foundation.shape.CornerBasedShape component3();
-    method public androidx.ui.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
     method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
@@ -270,12 +270,12 @@
 
   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 public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
+    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 public static long getPrimarySurface(androidx.ui.material.ColorPalette);
+    method public static long getPrimarySurface(androidx.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
@@ -285,21 +285,21 @@
   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.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    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, { 
     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.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
-    field public static final androidx.ui.material.TabRow INSTANCE;
+    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);
+    field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.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();
@@ -309,7 +309,7 @@
   public final class TextButtonConstants {
     method public androidx.compose.foundation.layout.InnerPadding getDefaultInnerPadding();
     property public final androidx.compose.foundation.layout.InnerPadding DefaultInnerPadding;
-    field public static final androidx.ui.material.TextButtonConstants INSTANCE;
+    field public static final androidx.compose.material.TextButtonConstants INSTANCE;
   }
 
   public final class TextFieldImplKt {
@@ -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.ui.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.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();
@@ -358,14 +358,14 @@
 
 }
 
-package androidx.ui.material.internal {
+package androidx.compose.material.internal {
 
   public final class StateDraggableKt {
   }
 
 }
 
-package androidx.ui.material.ripple {
+package androidx.compose.material.ripple {
 
   public final class RippleAnimationKt {
   }
@@ -375,20 +375,20 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    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);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
     method public float opacityForInteraction(androidx.compose.foundation.Interaction interaction);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleTheme {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
     method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.ui.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.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 6e406b2..ab2d0d7 100644
--- a/ui/ui-material/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/api/public_plus_experimental_current.txt
@@ -1,34 +1,34 @@
 // Signature format: 3.0
-package androidx.ui.material {
+package androidx.compose.material {
 
   public enum AlertDialogButtonLayout {
-    method public static androidx.ui.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.AlertDialogButtonLayout[] values();
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+    method public static androidx.compose.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.AlertDialogButtonLayout[] values();
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout Stacked;
   }
 
   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.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.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> 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);
   }
 
   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.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
-    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    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);
   }
 
   public enum BottomDrawerState {
-    method public static androidx.ui.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.BottomDrawerState[] values();
-    enum_constant public static final androidx.ui.material.BottomDrawerState Closed;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Expanded;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Opened;
+    method public static androidx.compose.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.BottomDrawerState[] values();
+    enum_constant public static final androidx.compose.material.BottomDrawerState Closed;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Expanded;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Opened;
   }
 
   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.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.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));
   }
 
@@ -47,7 +47,7 @@
     property public final float DefaultMinWidth;
     property public final long defaultDisabledBackgroundColor;
     property public final long defaultDisabledContentColor;
-    field public static final androidx.ui.material.ButtonConstants INSTANCE;
+    field public static final androidx.compose.material.ButtonConstants INSTANCE;
   }
 
   public final class ButtonKt {
@@ -67,9 +67,9 @@
 
   public final class ColorKt {
     method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
-    method public static long contentColorFor-xCGpx3o(androidx.ui.material.ColorPalette, long color);
-    method public static androidx.ui.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.ui.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);
+    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);
   }
 
   public interface ColorPalette {
@@ -108,19 +108,19 @@
   public final class DrawerConstants {
     method public float getDefaultElevation();
     property public final float DefaultElevation;
-    field public static final androidx.ui.material.DrawerConstants INSTANCE;
+    field public static final androidx.compose.material.DrawerConstants INSTANCE;
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    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);
   }
 
   public enum DrawerState {
-    method public static androidx.ui.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.DrawerState[] values();
-    enum_constant public static final androidx.ui.material.DrawerState Closed;
-    enum_constant public static final androidx.ui.material.DrawerState Opened;
+    method public static androidx.compose.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.DrawerState[] values();
+    enum_constant public static final androidx.compose.material.DrawerState Closed;
+    enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
   @androidx.compose.Immutable public interface Emphasis {
@@ -128,17 +128,17 @@
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.ui.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.ui.material.EmphasisLevels> getEmphasisAmbient();
+    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();
   }
 
   public interface EmphasisLevels {
-    method public androidx.ui.material.Emphasis getDisabled();
-    method public androidx.ui.material.Emphasis getHigh();
-    method public androidx.ui.material.Emphasis getMedium();
-    property public abstract androidx.ui.material.Emphasis disabled;
-    property public abstract androidx.ui.material.Emphasis high;
-    property public abstract androidx.ui.material.Emphasis medium;
+    method public androidx.compose.material.Emphasis getDisabled();
+    method public androidx.compose.material.Emphasis getHigh();
+    method public androidx.compose.material.Emphasis getMedium();
+    property public abstract androidx.compose.material.Emphasis disabled;
+    property public abstract androidx.compose.material.Emphasis high;
+    property public abstract androidx.compose.material.Emphasis medium;
   }
 
   @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalMaterialApi {
@@ -160,17 +160,17 @@
   }
 
   public final class MaterialTheme {
-    method public androidx.ui.material.ColorPalette getColors();
-    method public androidx.ui.material.Shapes getShapes();
-    method public androidx.ui.material.Typography getTypography();
-    property public final androidx.ui.material.ColorPalette colors;
-    property public final androidx.ui.material.Shapes shapes;
-    property public final androidx.ui.material.Typography typography;
-    field public static final androidx.ui.material.MaterialTheme INSTANCE;
+    method public androidx.compose.material.ColorPalette getColors();
+    method public androidx.compose.material.Shapes getShapes();
+    method public androidx.compose.material.Typography getTypography();
+    property public final androidx.compose.material.ColorPalette colors;
+    property public final androidx.compose.material.Shapes shapes;
+    property public final androidx.compose.material.Typography typography;
+    field public static final androidx.compose.material.MaterialTheme INSTANCE;
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.ui.material.ColorPalette colors = MaterialTheme.colors, androidx.ui.material.Typography typography = MaterialTheme.typography, androidx.ui.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    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);
   }
 
   public final class MenuKt {
@@ -186,7 +186,7 @@
   public final class ProgressIndicatorConstants {
     method public float getDefaultStrokeWidth();
     property public final float DefaultStrokeWidth;
-    field public static final androidx.ui.material.ProgressIndicatorConstants INSTANCE;
+    field public static final androidx.compose.material.ProgressIndicatorConstants INSTANCE;
   }
 
   public final class ProgressIndicatorKt {
@@ -201,12 +201,12 @@
     method public long getDefaultUnselectedColor();
     property public final long defaultDisabledColor;
     property public final long defaultUnselectedColor;
-    field public static final androidx.ui.material.RadioButtonConstants INSTANCE;
+    field public static final androidx.compose.material.RadioButtonConstants INSTANCE;
   }
 
   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.ui.material.RadioGroupScope,kotlin.Unit> content);
+    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);
   }
 
@@ -216,34 +216,34 @@
   }
 
   public final class Scaffold {
-    field public static final androidx.ui.material.Scaffold INSTANCE;
+    field public static final androidx.compose.material.Scaffold INSTANCE;
   }
 
   public enum Scaffold.FabPosition {
-    method public static androidx.ui.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.Scaffold.FabPosition[] values();
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition Center;
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition End;
+    method public static androidx.compose.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.Scaffold.FabPosition[] values();
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition Center;
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition End;
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.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.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
+}), 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 {
-    ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
+    ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
-    method public androidx.ui.material.DrawerState getDrawerState();
+    method public androidx.compose.material.DrawerState getDrawerState();
     method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
     method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
-    method public void setDrawerState(androidx.ui.material.DrawerState p);
+    method public void setDrawerState(androidx.compose.material.DrawerState p);
     property public final androidx.compose.ui.geometry.Size? bottomBarSize;
-    property public final androidx.ui.material.DrawerState drawerState;
+    property public final androidx.compose.material.DrawerState drawerState;
     property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
     property public final androidx.compose.ui.geometry.Size? topBarSize;
@@ -255,7 +255,7 @@
     method public androidx.compose.foundation.shape.CornerBasedShape component1();
     method public androidx.compose.foundation.shape.CornerBasedShape component2();
     method public androidx.compose.foundation.shape.CornerBasedShape component3();
-    method public androidx.ui.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
     method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
@@ -270,12 +270,12 @@
 
   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 public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
+    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 public static long getPrimarySurface(androidx.ui.material.ColorPalette);
+    method public static long getPrimarySurface(androidx.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
@@ -285,21 +285,21 @@
   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.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    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, { 
     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.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
-    field public static final androidx.ui.material.TabRow INSTANCE;
+    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);
+    field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.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();
@@ -309,7 +309,7 @@
   public final class TextButtonConstants {
     method public androidx.compose.foundation.layout.InnerPadding getDefaultInnerPadding();
     property public final androidx.compose.foundation.layout.InnerPadding DefaultInnerPadding;
-    field public static final androidx.ui.material.TextButtonConstants INSTANCE;
+    field public static final androidx.compose.material.TextButtonConstants INSTANCE;
   }
 
   public final class TextFieldImplKt {
@@ -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.ui.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.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();
@@ -358,14 +358,14 @@
 
 }
 
-package androidx.ui.material.internal {
+package androidx.compose.material.internal {
 
   public final class StateDraggableKt {
   }
 
 }
 
-package androidx.ui.material.ripple {
+package androidx.compose.material.ripple {
 
   public final class RippleAnimationKt {
   }
@@ -375,20 +375,20 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    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);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
     method public float opacityForInteraction(androidx.compose.foundation.Interaction interaction);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleTheme {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
     method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.ui.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.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 1fa1fe0..41365c0e 100644
--- a/ui/ui-material/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/api/restricted_0.1.0-dev16.txt
@@ -1,34 +1,34 @@
 // Signature format: 3.0
-package androidx.ui.material {
+package androidx.compose.material {
 
   public enum AlertDialogButtonLayout {
-    method public static androidx.ui.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.AlertDialogButtonLayout[] values();
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+    method public static androidx.compose.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.AlertDialogButtonLayout[] values();
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout Stacked;
   }
 
   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.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.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> 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);
   }
 
   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.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
-    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    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);
   }
 
   public enum BottomDrawerState {
-    method public static androidx.ui.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.BottomDrawerState[] values();
-    enum_constant public static final androidx.ui.material.BottomDrawerState Closed;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Expanded;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Opened;
+    method public static androidx.compose.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.BottomDrawerState[] values();
+    enum_constant public static final androidx.compose.material.BottomDrawerState Closed;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Expanded;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Opened;
   }
 
   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.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.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));
   }
 
@@ -47,7 +47,7 @@
     property public final float DefaultMinWidth;
     property public final long defaultDisabledBackgroundColor;
     property public final long defaultDisabledContentColor;
-    field public static final androidx.ui.material.ButtonConstants INSTANCE;
+    field public static final androidx.compose.material.ButtonConstants INSTANCE;
   }
 
   public final class ButtonKt {
@@ -68,9 +68,9 @@
 
   public final class ColorKt {
     method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
-    method public static long contentColorFor-xCGpx3o(androidx.ui.material.ColorPalette, long color);
-    method public static androidx.ui.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.ui.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);
+    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);
   }
 
   public interface ColorPalette {
@@ -109,19 +109,19 @@
   public final class DrawerConstants {
     method public float getDefaultElevation();
     property public final float DefaultElevation;
-    field public static final androidx.ui.material.DrawerConstants INSTANCE;
+    field public static final androidx.compose.material.DrawerConstants INSTANCE;
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    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);
   }
 
   public enum DrawerState {
-    method public static androidx.ui.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.DrawerState[] values();
-    enum_constant public static final androidx.ui.material.DrawerState Closed;
-    enum_constant public static final androidx.ui.material.DrawerState Opened;
+    method public static androidx.compose.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.DrawerState[] values();
+    enum_constant public static final androidx.compose.material.DrawerState Closed;
+    enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
   @androidx.compose.Immutable public interface Emphasis {
@@ -129,17 +129,17 @@
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.ui.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.ui.material.EmphasisLevels> getEmphasisAmbient();
+    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();
   }
 
   public interface EmphasisLevels {
-    method public androidx.ui.material.Emphasis getDisabled();
-    method public androidx.ui.material.Emphasis getHigh();
-    method public androidx.ui.material.Emphasis getMedium();
-    property public abstract androidx.ui.material.Emphasis disabled;
-    property public abstract androidx.ui.material.Emphasis high;
-    property public abstract androidx.ui.material.Emphasis medium;
+    method public androidx.compose.material.Emphasis getDisabled();
+    method public androidx.compose.material.Emphasis getHigh();
+    method public androidx.compose.material.Emphasis getMedium();
+    property public abstract androidx.compose.material.Emphasis disabled;
+    property public abstract androidx.compose.material.Emphasis high;
+    property public abstract androidx.compose.material.Emphasis medium;
   }
 
   @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalMaterialApi {
@@ -161,17 +161,17 @@
   }
 
   public final class MaterialTheme {
-    method public androidx.ui.material.ColorPalette getColors();
-    method public androidx.ui.material.Shapes getShapes();
-    method public androidx.ui.material.Typography getTypography();
-    property public final androidx.ui.material.ColorPalette colors;
-    property public final androidx.ui.material.Shapes shapes;
-    property public final androidx.ui.material.Typography typography;
-    field public static final androidx.ui.material.MaterialTheme INSTANCE;
+    method public androidx.compose.material.ColorPalette getColors();
+    method public androidx.compose.material.Shapes getShapes();
+    method public androidx.compose.material.Typography getTypography();
+    property public final androidx.compose.material.ColorPalette colors;
+    property public final androidx.compose.material.Shapes shapes;
+    property public final androidx.compose.material.Typography typography;
+    field public static final androidx.compose.material.MaterialTheme INSTANCE;
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.ui.material.ColorPalette colors = MaterialTheme.colors, androidx.ui.material.Typography typography = MaterialTheme.typography, androidx.ui.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    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);
   }
 
   public final class MenuKt {
@@ -187,7 +187,7 @@
   public final class ProgressIndicatorConstants {
     method public float getDefaultStrokeWidth();
     property public final float DefaultStrokeWidth;
-    field public static final androidx.ui.material.ProgressIndicatorConstants INSTANCE;
+    field public static final androidx.compose.material.ProgressIndicatorConstants INSTANCE;
   }
 
   public final class ProgressIndicatorKt {
@@ -202,12 +202,12 @@
     method public long getDefaultUnselectedColor();
     property public final long defaultDisabledColor;
     property public final long defaultUnselectedColor;
-    field public static final androidx.ui.material.RadioButtonConstants INSTANCE;
+    field public static final androidx.compose.material.RadioButtonConstants INSTANCE;
   }
 
   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.ui.material.RadioGroupScope,kotlin.Unit> content);
+    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);
   }
 
@@ -217,34 +217,34 @@
   }
 
   public final class Scaffold {
-    field public static final androidx.ui.material.Scaffold INSTANCE;
+    field public static final androidx.compose.material.Scaffold INSTANCE;
   }
 
   public enum Scaffold.FabPosition {
-    method public static androidx.ui.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.Scaffold.FabPosition[] values();
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition Center;
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition End;
+    method public static androidx.compose.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.Scaffold.FabPosition[] values();
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition Center;
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition End;
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.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.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
+}), 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 {
-    ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
+    ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
-    method public androidx.ui.material.DrawerState getDrawerState();
+    method public androidx.compose.material.DrawerState getDrawerState();
     method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
     method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
-    method public void setDrawerState(androidx.ui.material.DrawerState p);
+    method public void setDrawerState(androidx.compose.material.DrawerState p);
     property public final androidx.compose.ui.geometry.Size? bottomBarSize;
-    property public final androidx.ui.material.DrawerState drawerState;
+    property public final androidx.compose.material.DrawerState drawerState;
     property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
     property public final androidx.compose.ui.geometry.Size? topBarSize;
@@ -256,7 +256,7 @@
     method public androidx.compose.foundation.shape.CornerBasedShape component1();
     method public androidx.compose.foundation.shape.CornerBasedShape component2();
     method public androidx.compose.foundation.shape.CornerBasedShape component3();
-    method public androidx.ui.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
     method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
@@ -271,12 +271,12 @@
 
   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 public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
+    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 public static long getPrimarySurface(androidx.ui.material.ColorPalette);
+    method public static long getPrimarySurface(androidx.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
@@ -286,21 +286,21 @@
   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.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    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, { 
     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.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
-    field public static final androidx.ui.material.TabRow INSTANCE;
+    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);
+    field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.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();
@@ -310,7 +310,7 @@
   public final class TextButtonConstants {
     method public androidx.compose.foundation.layout.InnerPadding getDefaultInnerPadding();
     property public final androidx.compose.foundation.layout.InnerPadding DefaultInnerPadding;
-    field public static final androidx.ui.material.TextButtonConstants INSTANCE;
+    field public static final androidx.compose.material.TextButtonConstants INSTANCE;
   }
 
   public final class TextFieldImplKt {
@@ -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.ui.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.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();
@@ -359,14 +359,14 @@
 
 }
 
-package androidx.ui.material.internal {
+package androidx.compose.material.internal {
 
   public final class StateDraggableKt {
   }
 
 }
 
-package androidx.ui.material.ripple {
+package androidx.compose.material.ripple {
 
   public final class RippleAnimationKt {
   }
@@ -376,20 +376,20 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    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);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
     method public float opacityForInteraction(androidx.compose.foundation.Interaction interaction);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleTheme {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
     method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.ui.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.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 1fa1fe0..41365c0e 100644
--- a/ui/ui-material/api/restricted_current.txt
+++ b/ui/ui-material/api/restricted_current.txt
@@ -1,34 +1,34 @@
 // Signature format: 3.0
-package androidx.ui.material {
+package androidx.compose.material {
 
   public enum AlertDialogButtonLayout {
-    method public static androidx.ui.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.AlertDialogButtonLayout[] values();
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout SideBySide;
-    enum_constant public static final androidx.ui.material.AlertDialogButtonLayout Stacked;
+    method public static androidx.compose.material.AlertDialogButtonLayout valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.AlertDialogButtonLayout[] values();
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout SideBySide;
+    enum_constant public static final androidx.compose.material.AlertDialogButtonLayout Stacked;
   }
 
   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.ui.material.AlertDialogButtonLayout buttonLayout = androidx.ui.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> 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);
   }
 
   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.ui.material.AppBarKt.BottomAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
-    method @androidx.compose.Composable public static void TopAppBar-83eF1cI(kotlin.jvm.functions.Function0<kotlin.Unit> title, androidx.ui.core.Modifier modifier = Modifier, kotlin.jvm.functions.Function0<kotlin.Unit>? navigationIcon = null, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> actions = {}, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation);
-    method @androidx.compose.Composable public static void TopAppBar-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.ui.material.AppBarKt.TopAppBarElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    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);
   }
 
   public enum BottomDrawerState {
-    method public static androidx.ui.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.BottomDrawerState[] values();
-    enum_constant public static final androidx.ui.material.BottomDrawerState Closed;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Expanded;
-    enum_constant public static final androidx.ui.material.BottomDrawerState Opened;
+    method public static androidx.compose.material.BottomDrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.BottomDrawerState[] values();
+    enum_constant public static final androidx.compose.material.BottomDrawerState Closed;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Expanded;
+    enum_constant public static final androidx.compose.material.BottomDrawerState Opened;
   }
 
   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.ui.material.BottomNavigationKt.BottomNavigationElevation, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.RowScope,kotlin.Unit> content);
+    method @androidx.compose.Composable public static void BottomNavigation-ovOt_-0(androidx.ui.core.Modifier modifier = Modifier, long backgroundColor = MaterialTheme.colors.primarySurface, long contentColor = contentColorFor(backgroundColor), float elevation = androidx.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));
   }
 
@@ -47,7 +47,7 @@
     property public final float DefaultMinWidth;
     property public final long defaultDisabledBackgroundColor;
     property public final long defaultDisabledContentColor;
-    field public static final androidx.ui.material.ButtonConstants INSTANCE;
+    field public static final androidx.compose.material.ButtonConstants INSTANCE;
   }
 
   public final class ButtonKt {
@@ -68,9 +68,9 @@
 
   public final class ColorKt {
     method @androidx.compose.Composable public static long contentColorFor-8_81llA(long color);
-    method public static long contentColorFor-xCGpx3o(androidx.ui.material.ColorPalette, long color);
-    method public static androidx.ui.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.ui.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);
+    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);
   }
 
   public interface ColorPalette {
@@ -109,19 +109,19 @@
   public final class DrawerConstants {
     method public float getDefaultElevation();
     property public final float DefaultElevation;
-    field public static final androidx.ui.material.DrawerConstants INSTANCE;
+    field public static final androidx.compose.material.DrawerConstants INSTANCE;
   }
 
   public final class DrawerKt {
-    method @androidx.compose.Composable public static void BottomDrawerLayout-8gm9jes(androidx.ui.material.BottomDrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.BottomDrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
-    method @androidx.compose.Composable public static void ModalDrawerLayout-v_Pm_DY(androidx.ui.material.DrawerState drawerState, kotlin.jvm.functions.Function1<? super androidx.ui.material.DrawerState,kotlin.Unit> onStateChange, boolean gesturesEnabled = true, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, kotlin.jvm.functions.Function0<kotlin.Unit> drawerContent, kotlin.jvm.functions.Function0<kotlin.Unit> bodyContent);
+    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);
   }
 
   public enum DrawerState {
-    method public static androidx.ui.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.DrawerState[] values();
-    enum_constant public static final androidx.ui.material.DrawerState Closed;
-    enum_constant public static final androidx.ui.material.DrawerState Opened;
+    method public static androidx.compose.material.DrawerState valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.DrawerState[] values();
+    enum_constant public static final androidx.compose.material.DrawerState Closed;
+    enum_constant public static final androidx.compose.material.DrawerState Opened;
   }
 
   @androidx.compose.Immutable public interface Emphasis {
@@ -129,17 +129,17 @@
   }
 
   public final class EmphasisKt {
-    method @androidx.compose.Composable public static void ProvideEmphasis(androidx.ui.material.Emphasis emphasis, kotlin.jvm.functions.Function0<kotlin.Unit> content);
-    method public static androidx.compose.Ambient<androidx.ui.material.EmphasisLevels> getEmphasisAmbient();
+    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();
   }
 
   public interface EmphasisLevels {
-    method public androidx.ui.material.Emphasis getDisabled();
-    method public androidx.ui.material.Emphasis getHigh();
-    method public androidx.ui.material.Emphasis getMedium();
-    property public abstract androidx.ui.material.Emphasis disabled;
-    property public abstract androidx.ui.material.Emphasis high;
-    property public abstract androidx.ui.material.Emphasis medium;
+    method public androidx.compose.material.Emphasis getDisabled();
+    method public androidx.compose.material.Emphasis getHigh();
+    method public androidx.compose.material.Emphasis getMedium();
+    property public abstract androidx.compose.material.Emphasis disabled;
+    property public abstract androidx.compose.material.Emphasis high;
+    property public abstract androidx.compose.material.Emphasis medium;
   }
 
   @kotlin.RequiresOptIn(message="This material API is experimental and is likely to change or to be removed in" + " the future.") public @interface ExperimentalMaterialApi {
@@ -161,17 +161,17 @@
   }
 
   public final class MaterialTheme {
-    method public androidx.ui.material.ColorPalette getColors();
-    method public androidx.ui.material.Shapes getShapes();
-    method public androidx.ui.material.Typography getTypography();
-    property public final androidx.ui.material.ColorPalette colors;
-    property public final androidx.ui.material.Shapes shapes;
-    property public final androidx.ui.material.Typography typography;
-    field public static final androidx.ui.material.MaterialTheme INSTANCE;
+    method public androidx.compose.material.ColorPalette getColors();
+    method public androidx.compose.material.Shapes getShapes();
+    method public androidx.compose.material.Typography getTypography();
+    property public final androidx.compose.material.ColorPalette colors;
+    property public final androidx.compose.material.Shapes shapes;
+    property public final androidx.compose.material.Typography typography;
+    field public static final androidx.compose.material.MaterialTheme INSTANCE;
   }
 
   public final class MaterialThemeKt {
-    method @androidx.compose.Composable public static void MaterialTheme(androidx.ui.material.ColorPalette colors = MaterialTheme.colors, androidx.ui.material.Typography typography = MaterialTheme.typography, androidx.ui.material.Shapes shapes = MaterialTheme.shapes, kotlin.jvm.functions.Function0<kotlin.Unit> content);
+    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);
   }
 
   public final class MenuKt {
@@ -187,7 +187,7 @@
   public final class ProgressIndicatorConstants {
     method public float getDefaultStrokeWidth();
     property public final float DefaultStrokeWidth;
-    field public static final androidx.ui.material.ProgressIndicatorConstants INSTANCE;
+    field public static final androidx.compose.material.ProgressIndicatorConstants INSTANCE;
   }
 
   public final class ProgressIndicatorKt {
@@ -202,12 +202,12 @@
     method public long getDefaultUnselectedColor();
     property public final long defaultDisabledColor;
     property public final long defaultUnselectedColor;
-    field public static final androidx.ui.material.RadioButtonConstants INSTANCE;
+    field public static final androidx.compose.material.RadioButtonConstants INSTANCE;
   }
 
   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.ui.material.RadioGroupScope,kotlin.Unit> content);
+    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);
   }
 
@@ -217,34 +217,34 @@
   }
 
   public final class Scaffold {
-    field public static final androidx.ui.material.Scaffold INSTANCE;
+    field public static final androidx.compose.material.Scaffold INSTANCE;
   }
 
   public enum Scaffold.FabPosition {
-    method public static androidx.ui.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
-    method public static androidx.ui.material.Scaffold.FabPosition[] values();
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition Center;
-    enum_constant public static final androidx.ui.material.Scaffold.FabPosition End;
+    method public static androidx.compose.material.Scaffold.FabPosition valueOf(String name) throws java.lang.IllegalArgumentException;
+    method public static androidx.compose.material.Scaffold.FabPosition[] values();
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition Center;
+    enum_constant public static final androidx.compose.material.Scaffold.FabPosition End;
   }
 
   public final class ScaffoldKt {
-    method @androidx.compose.Composable public static void Scaffold-6C9rrM8(androidx.ui.material.ScaffoldState scaffoldState = remember({ 
+    method @androidx.compose.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.ui.material.Scaffold.FabPosition floatingActionButtonPosition = androidx.ui.material.Scaffold.FabPosition.End, boolean isFloatingActionButtonDocked = false, kotlin.jvm.functions.Function0<kotlin.Unit>? drawerContent = null, androidx.compose.ui.graphics.Shape drawerShape = large, float drawerElevation = DrawerConstants.DefaultElevation, long backgroundColor = MaterialTheme.colors.background, kotlin.jvm.functions.Function1<? super androidx.compose.foundation.layout.InnerPadding,kotlin.Unit> bodyContent);
+}), 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 {
-    ctor public ScaffoldState(androidx.ui.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
+    ctor public ScaffoldState(androidx.compose.material.DrawerState drawerState, boolean isDrawerGesturesEnabled);
     ctor public ScaffoldState();
     method public androidx.compose.ui.geometry.Size? getBottomBarSize();
-    method public androidx.ui.material.DrawerState getDrawerState();
+    method public androidx.compose.material.DrawerState getDrawerState();
     method public androidx.compose.ui.geometry.Size? getFloatingActionButtonSize();
     method public androidx.compose.ui.geometry.Size? getTopBarSize();
     method public boolean isDrawerGesturesEnabled();
     method public void setDrawerGesturesEnabled(boolean p);
-    method public void setDrawerState(androidx.ui.material.DrawerState p);
+    method public void setDrawerState(androidx.compose.material.DrawerState p);
     property public final androidx.compose.ui.geometry.Size? bottomBarSize;
-    property public final androidx.ui.material.DrawerState drawerState;
+    property public final androidx.compose.material.DrawerState drawerState;
     property public final androidx.compose.ui.geometry.Size? floatingActionButtonSize;
     property public final boolean isDrawerGesturesEnabled;
     property public final androidx.compose.ui.geometry.Size? topBarSize;
@@ -256,7 +256,7 @@
     method public androidx.compose.foundation.shape.CornerBasedShape component1();
     method public androidx.compose.foundation.shape.CornerBasedShape component2();
     method public androidx.compose.foundation.shape.CornerBasedShape component3();
-    method public androidx.ui.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
+    method public androidx.compose.material.Shapes copy(androidx.compose.foundation.shape.CornerBasedShape small, androidx.compose.foundation.shape.CornerBasedShape medium, androidx.compose.foundation.shape.CornerBasedShape large);
     method public androidx.compose.foundation.shape.CornerBasedShape getLarge();
     method public androidx.compose.foundation.shape.CornerBasedShape getMedium();
     method public androidx.compose.foundation.shape.CornerBasedShape getSmall();
@@ -271,12 +271,12 @@
 
   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 public static long snackbarPrimaryColorFor(androidx.ui.material.ColorPalette colors);
+    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 public static long getPrimarySurface(androidx.ui.material.ColorPalette);
+    method public static long getPrimarySurface(androidx.compose.material.ColorPalette);
   }
 
   public final class SwitchKt {
@@ -286,21 +286,21 @@
   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.ui.material.TabRow.TabPosition>,kotlin.Unit> indicatorContainer = { tabPositions -> TabRow.IndicatorContainer(tabPositions, selectedIndex, { 
+    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, { 
     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.ui.material.TabRow.TabPosition> tabPositions, int selectedIndex, kotlin.jvm.functions.Function0<kotlin.Unit> indicator);
-    field public static final androidx.ui.material.TabRow INSTANCE;
+    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);
+    field public static final androidx.compose.material.TabRow INSTANCE;
   }
 
   @androidx.compose.Immutable public static final class TabRow.TabPosition {
     method public float component1();
     method public float component2();
-    method @androidx.compose.Immutable public androidx.ui.material.TabRow.TabPosition copy-ioHfwGI(float left, float width);
+    method @androidx.compose.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();
@@ -310,7 +310,7 @@
   public final class TextButtonConstants {
     method public androidx.compose.foundation.layout.InnerPadding getDefaultInnerPadding();
     property public final androidx.compose.foundation.layout.InnerPadding DefaultInnerPadding;
-    field public static final androidx.ui.material.TextButtonConstants INSTANCE;
+    field public static final androidx.compose.material.TextButtonConstants INSTANCE;
   }
 
   public final class TextFieldImplKt {
@@ -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.ui.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.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();
@@ -359,14 +359,14 @@
 
 }
 
-package androidx.ui.material.internal {
+package androidx.compose.material.internal {
 
   public final class StateDraggableKt {
   }
 
 }
 
-package androidx.ui.material.ripple {
+package androidx.compose.material.ripple {
 
   public final class RippleAnimationKt {
   }
@@ -376,20 +376,20 @@
   }
 
   public final class RippleIndicationKt {
-    method @androidx.compose.Composable public static androidx.ui.material.ripple.RippleIndication RippleIndication-DudYJDg(boolean bounded = true, androidx.compose.ui.unit.Dp? radius = null, long color = Color.Unset);
+    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);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleOpacity {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleOpacity {
     method public float opacityForInteraction(androidx.compose.foundation.Interaction interaction);
   }
 
-  @androidx.ui.material.ExperimentalMaterialApi public interface RippleTheme {
+  @androidx.compose.material.ExperimentalMaterialApi public interface RippleTheme {
     method @androidx.compose.Composable public long defaultColor();
-    method @androidx.compose.Composable public androidx.ui.material.ripple.RippleOpacity rippleOpacity();
+    method @androidx.compose.Composable public androidx.compose.material.ripple.RippleOpacity rippleOpacity();
   }
 
   public final class RippleThemeKt {
-    method public static androidx.compose.ProvidableAmbient<androidx.ui.material.ripple.RippleTheme> getRippleThemeAmbient();
+    method public static androidx.compose.ProvidableAmbient<androidx.compose.material.ripple.RippleTheme> getRippleThemeAmbient();
   }
 
 }
diff --git a/ui/ui-material/icons/README.md b/ui/ui-material/icons/README.md
index 98205c1..262b1cb 100644
--- a/ui/ui-material/icons/README.md
+++ b/ui/ui-material/icons/README.md
@@ -13,7 +13,7 @@
 
 1. Icons are downloaded (manually) using the Google Fonts API, using the script in the `generator` module. This downloads vector drawables for every single Material icon to the `raw-icons` folder.
 2. During compilation of the core and extended modules, these icons are processed to remove theme attributes that we cannot generate code for, checked to ensure that all icons exist in all themes, and then an API tracking file similar to API files in other modules is generated. This API file tracks what icons we have processed / will generate code, and the build will fail at this point if there are differences between the checked in API file and the generated API file.
-3. Once these icons are processed, we then parse each file, create a Vector-like representation, and convert this to `VectorAssetBuilder` commands that during run time will create a matching source code representation of this XML file. We then write this generated Kotlin file to the output directory, where it will be compiled as part of the `core` / `extended` module's source code, as if it was manually written and checked in. Each XML file creates a corresponding Kotlin file, containing a `by lazy` property representing that icon. For more information on using the generated icons, see `androidx.ui.material.icons.Icons`.
+3. Once these icons are processed, we then parse each file, create a Vector-like representation, and convert this to `VectorAssetBuilder` commands that during run time will create a matching source code representation of this XML file. We then write this generated Kotlin file to the output directory, where it will be compiled as part of the `core` / `extended` module's source code, as if it was manually written and checked in. Each XML file creates a corresponding Kotlin file, containing a `by lazy` property representing that icon. For more information on using the generated icons, see `androidx.compose.material.icons.Icons`.
 
 ## Adding new icons
 To add new icons, simply use the icon downloading script at `generator/download_material_icons.py`, run any Gradle command that will trigger compilation of the icon modules (such as `./gradlew buildOnServer`), and follow the message in the build failure asking to confirm API changes by updating the API tracking file.
diff --git a/ui/ui-material/icons/core/api/0.1.0-dev16.txt b/ui/ui-material/icons/core/api/0.1.0-dev16.txt
index 664efa3..168ba79 100644
--- a/ui/ui-material/icons/core/api/0.1.0-dev16.txt
+++ b/ui/ui-material/icons/core/api/0.1.0-dev16.txt
@@ -1,30 +1,30 @@
 // Signature format: 3.0
-package androidx.ui.material.icons {
+package androidx.compose.material.icons {
 
   public final class Icons {
-    method public androidx.ui.material.icons.Icons.Filled getDefault();
-    property public final androidx.ui.material.icons.Icons.Filled Default;
-    field public static final androidx.ui.material.icons.Icons INSTANCE;
+    method public androidx.compose.material.icons.Icons.Filled getDefault();
+    property public final androidx.compose.material.icons.Icons.Filled Default;
+    field public static final androidx.compose.material.icons.Icons INSTANCE;
   }
 
   public static final class Icons.Filled {
-    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
   }
 
   public static final class Icons.Outlined {
-    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
   }
 
   public static final class Icons.Rounded {
-    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
   }
 
   public static final class Icons.Sharp {
-    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
   }
 
   public static final class Icons.TwoTone {
-    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
   }
 
   public final class IconsKt {
@@ -34,1002 +34,1002 @@
 
 }
 
-package androidx.ui.material.icons.filled {
+package androidx.compose.material.icons.filled {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Filled);
   }
 
 }
 
-package androidx.ui.material.icons.outlined {
+package androidx.compose.material.icons.outlined {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Outlined);
   }
 
 }
 
-package androidx.ui.material.icons.rounded {
+package androidx.compose.material.icons.rounded {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Rounded);
   }
 
 }
 
-package androidx.ui.material.icons.sharp {
+package androidx.compose.material.icons.sharp {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Sharp);
   }
 
 }
 
-package androidx.ui.material.icons.twotone {
+package androidx.compose.material.icons.twotone {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.TwoTone);
   }
 
 }
diff --git a/ui/ui-material/icons/core/api/current.txt b/ui/ui-material/icons/core/api/current.txt
index 664efa3..168ba79 100644
--- a/ui/ui-material/icons/core/api/current.txt
+++ b/ui/ui-material/icons/core/api/current.txt
@@ -1,30 +1,30 @@
 // Signature format: 3.0
-package androidx.ui.material.icons {
+package androidx.compose.material.icons {
 
   public final class Icons {
-    method public androidx.ui.material.icons.Icons.Filled getDefault();
-    property public final androidx.ui.material.icons.Icons.Filled Default;
-    field public static final androidx.ui.material.icons.Icons INSTANCE;
+    method public androidx.compose.material.icons.Icons.Filled getDefault();
+    property public final androidx.compose.material.icons.Icons.Filled Default;
+    field public static final androidx.compose.material.icons.Icons INSTANCE;
   }
 
   public static final class Icons.Filled {
-    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
   }
 
   public static final class Icons.Outlined {
-    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
   }
 
   public static final class Icons.Rounded {
-    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
   }
 
   public static final class Icons.Sharp {
-    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
   }
 
   public static final class Icons.TwoTone {
-    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
   }
 
   public final class IconsKt {
@@ -34,1002 +34,1002 @@
 
 }
 
-package androidx.ui.material.icons.filled {
+package androidx.compose.material.icons.filled {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Filled);
   }
 
 }
 
-package androidx.ui.material.icons.outlined {
+package androidx.compose.material.icons.outlined {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Outlined);
   }
 
 }
 
-package androidx.ui.material.icons.rounded {
+package androidx.compose.material.icons.rounded {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Rounded);
   }
 
 }
 
-package androidx.ui.material.icons.sharp {
+package androidx.compose.material.icons.sharp {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Sharp);
   }
 
 }
 
-package androidx.ui.material.icons.twotone {
+package androidx.compose.material.icons.twotone {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.TwoTone);
   }
 
 }
diff --git a/ui/ui-material/icons/core/api/public_plus_experimental_0.1.0-dev16.txt b/ui/ui-material/icons/core/api/public_plus_experimental_0.1.0-dev16.txt
index 664efa3..168ba79 100644
--- a/ui/ui-material/icons/core/api/public_plus_experimental_0.1.0-dev16.txt
+++ b/ui/ui-material/icons/core/api/public_plus_experimental_0.1.0-dev16.txt
@@ -1,30 +1,30 @@
 // Signature format: 3.0
-package androidx.ui.material.icons {
+package androidx.compose.material.icons {
 
   public final class Icons {
-    method public androidx.ui.material.icons.Icons.Filled getDefault();
-    property public final androidx.ui.material.icons.Icons.Filled Default;
-    field public static final androidx.ui.material.icons.Icons INSTANCE;
+    method public androidx.compose.material.icons.Icons.Filled getDefault();
+    property public final androidx.compose.material.icons.Icons.Filled Default;
+    field public static final androidx.compose.material.icons.Icons INSTANCE;
   }
 
   public static final class Icons.Filled {
-    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
   }
 
   public static final class Icons.Outlined {
-    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
   }
 
   public static final class Icons.Rounded {
-    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
   }
 
   public static final class Icons.Sharp {
-    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
   }
 
   public static final class Icons.TwoTone {
-    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
   }
 
   public final class IconsKt {
@@ -34,1002 +34,1002 @@
 
 }
 
-package androidx.ui.material.icons.filled {
+package androidx.compose.material.icons.filled {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Filled);
   }
 
 }
 
-package androidx.ui.material.icons.outlined {
+package androidx.compose.material.icons.outlined {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Outlined);
   }
 
 }
 
-package androidx.ui.material.icons.rounded {
+package androidx.compose.material.icons.rounded {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Rounded);
   }
 
 }
 
-package androidx.ui.material.icons.sharp {
+package androidx.compose.material.icons.sharp {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Sharp);
   }
 
 }
 
-package androidx.ui.material.icons.twotone {
+package androidx.compose.material.icons.twotone {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.TwoTone);
   }
 
 }
diff --git a/ui/ui-material/icons/core/api/public_plus_experimental_current.txt b/ui/ui-material/icons/core/api/public_plus_experimental_current.txt
index 664efa3..168ba79 100644
--- a/ui/ui-material/icons/core/api/public_plus_experimental_current.txt
+++ b/ui/ui-material/icons/core/api/public_plus_experimental_current.txt
@@ -1,30 +1,30 @@
 // Signature format: 3.0
-package androidx.ui.material.icons {
+package androidx.compose.material.icons {
 
   public final class Icons {
-    method public androidx.ui.material.icons.Icons.Filled getDefault();
-    property public final androidx.ui.material.icons.Icons.Filled Default;
-    field public static final androidx.ui.material.icons.Icons INSTANCE;
+    method public androidx.compose.material.icons.Icons.Filled getDefault();
+    property public final androidx.compose.material.icons.Icons.Filled Default;
+    field public static final androidx.compose.material.icons.Icons INSTANCE;
   }
 
   public static final class Icons.Filled {
-    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
   }
 
   public static final class Icons.Outlined {
-    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
   }
 
   public static final class Icons.Rounded {
-    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
   }
 
   public static final class Icons.Sharp {
-    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
   }
 
   public static final class Icons.TwoTone {
-    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
   }
 
   public final class IconsKt {
@@ -34,1002 +34,1002 @@
 
 }
 
-package androidx.ui.material.icons.filled {
+package androidx.compose.material.icons.filled {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Filled);
   }
 
 }
 
-package androidx.ui.material.icons.outlined {
+package androidx.compose.material.icons.outlined {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Outlined);
   }
 
 }
 
-package androidx.ui.material.icons.rounded {
+package androidx.compose.material.icons.rounded {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Rounded);
   }
 
 }
 
-package androidx.ui.material.icons.sharp {
+package androidx.compose.material.icons.sharp {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Sharp);
   }
 
 }
 
-package androidx.ui.material.icons.twotone {
+package androidx.compose.material.icons.twotone {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.TwoTone);
   }
 
 }
diff --git a/ui/ui-material/icons/core/api/restricted_0.1.0-dev16.txt b/ui/ui-material/icons/core/api/restricted_0.1.0-dev16.txt
index 664efa3..168ba79 100644
--- a/ui/ui-material/icons/core/api/restricted_0.1.0-dev16.txt
+++ b/ui/ui-material/icons/core/api/restricted_0.1.0-dev16.txt
@@ -1,30 +1,30 @@
 // Signature format: 3.0
-package androidx.ui.material.icons {
+package androidx.compose.material.icons {
 
   public final class Icons {
-    method public androidx.ui.material.icons.Icons.Filled getDefault();
-    property public final androidx.ui.material.icons.Icons.Filled Default;
-    field public static final androidx.ui.material.icons.Icons INSTANCE;
+    method public androidx.compose.material.icons.Icons.Filled getDefault();
+    property public final androidx.compose.material.icons.Icons.Filled Default;
+    field public static final androidx.compose.material.icons.Icons INSTANCE;
   }
 
   public static final class Icons.Filled {
-    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
   }
 
   public static final class Icons.Outlined {
-    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
   }
 
   public static final class Icons.Rounded {
-    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
   }
 
   public static final class Icons.Sharp {
-    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
   }
 
   public static final class Icons.TwoTone {
-    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
   }
 
   public final class IconsKt {
@@ -34,1002 +34,1002 @@
 
 }
 
-package androidx.ui.material.icons.filled {
+package androidx.compose.material.icons.filled {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Filled);
   }
 
 }
 
-package androidx.ui.material.icons.outlined {
+package androidx.compose.material.icons.outlined {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Outlined);
   }
 
 }
 
-package androidx.ui.material.icons.rounded {
+package androidx.compose.material.icons.rounded {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Rounded);
   }
 
 }
 
-package androidx.ui.material.icons.sharp {
+package androidx.compose.material.icons.sharp {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Sharp);
   }
 
 }
 
-package androidx.ui.material.icons.twotone {
+package androidx.compose.material.icons.twotone {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.TwoTone);
   }
 
 }
diff --git a/ui/ui-material/icons/core/api/restricted_current.txt b/ui/ui-material/icons/core/api/restricted_current.txt
index 664efa3..168ba79 100644
--- a/ui/ui-material/icons/core/api/restricted_current.txt
+++ b/ui/ui-material/icons/core/api/restricted_current.txt
@@ -1,30 +1,30 @@
 // Signature format: 3.0
-package androidx.ui.material.icons {
+package androidx.compose.material.icons {
 
   public final class Icons {
-    method public androidx.ui.material.icons.Icons.Filled getDefault();
-    property public final androidx.ui.material.icons.Icons.Filled Default;
-    field public static final androidx.ui.material.icons.Icons INSTANCE;
+    method public androidx.compose.material.icons.Icons.Filled getDefault();
+    property public final androidx.compose.material.icons.Icons.Filled Default;
+    field public static final androidx.compose.material.icons.Icons INSTANCE;
   }
 
   public static final class Icons.Filled {
-    field public static final androidx.ui.material.icons.Icons.Filled INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Filled INSTANCE;
   }
 
   public static final class Icons.Outlined {
-    field public static final androidx.ui.material.icons.Icons.Outlined INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Outlined INSTANCE;
   }
 
   public static final class Icons.Rounded {
-    field public static final androidx.ui.material.icons.Icons.Rounded INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Rounded INSTANCE;
   }
 
   public static final class Icons.Sharp {
-    field public static final androidx.ui.material.icons.Icons.Sharp INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.Sharp INSTANCE;
   }
 
   public static final class Icons.TwoTone {
-    field public static final androidx.ui.material.icons.Icons.TwoTone INSTANCE;
+    field public static final androidx.compose.material.icons.Icons.TwoTone INSTANCE;
   }
 
   public final class IconsKt {
@@ -34,1002 +34,1002 @@
 
 }
 
-package androidx.ui.material.icons.filled {
+package androidx.compose.material.icons.filled {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Filled);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Filled);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Filled);
   }
 
 }
 
-package androidx.ui.material.icons.outlined {
+package androidx.compose.material.icons.outlined {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Outlined);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Outlined);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Outlined);
   }
 
 }
 
-package androidx.ui.material.icons.rounded {
+package androidx.compose.material.icons.rounded {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Rounded);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Rounded);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Rounded);
   }
 
 }
 
-package androidx.ui.material.icons.sharp {
+package androidx.compose.material.icons.sharp {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.Sharp);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.Sharp);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.Sharp);
   }
 
 }
 
-package androidx.ui.material.icons.twotone {
+package androidx.compose.material.icons.twotone {
 
   public final class AccountBoxKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountBox(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AccountCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAccountCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAddCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class AddKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getAdd(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowBackKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowBack(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowDropDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowDropDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ArrowForwardKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getArrowForward(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class BuildKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getBuild(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CallKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCall(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckCircleKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheckCircle(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CheckKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCheck(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ClearKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClear(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CloseKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getClose(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class CreateKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getCreate(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DateRangeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDateRange(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DeleteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDelete(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class DoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getDone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EditKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEdit(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class EmailKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getEmail(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ExitToAppKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getExitToApp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteBorderKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavoriteBorder(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class FavoriteKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getFavorite(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class HomeKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getHome(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class InfoKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getInfo(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowDownKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowDown(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowLeftKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowLeft(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowRightKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowRight(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class KeyboardArrowUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getKeyboardArrowUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ListKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getList(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LocationOnKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLocationOn(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class LockKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getLock(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MailOutlineKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMailOutline(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MenuKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMenu(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class MoreVertKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getMoreVert(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class NotificationsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getNotifications(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PersonKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPerson(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PhoneKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPhone(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlaceKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlace(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class PlayArrowKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getPlayArrow(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class RefreshKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getRefresh(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SearchKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSearch(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SendKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSend(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class SettingsKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getSettings(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShareKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShare(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ShoppingCartKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getShoppingCart(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class StarKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getStar(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class ThumbUpKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getThumbUp(androidx.compose.material.icons.Icons.TwoTone);
   }
 
   public final class WarningKt {
-    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.ui.material.icons.Icons.TwoTone);
+    method public static androidx.compose.ui.graphics.vector.VectorAsset getWarning(androidx.compose.material.icons.Icons.TwoTone);
   }
 
 }
diff --git a/ui/ui-material/icons/core/build.gradle b/ui/ui-material/icons/core/build.gradle
index 740f4d5..c676348 100644
--- a/ui/ui-material/icons/core/build.gradle
+++ b/ui/ui-material/icons/core/build.gradle
@@ -17,7 +17,7 @@
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
 import androidx.build.Publish
-import androidx.ui.material.icons.generator.tasks.IconGenerationTask
+import androidx.compose.material.icons.generator.tasks.IconGenerationTask
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 import static androidx.build.dependencies.DependenciesKt.*
diff --git a/ui/ui-material/icons/core/samples/src/main/AndroidManifest.xml b/ui/ui-material/icons/core/samples/src/main/AndroidManifest.xml
index 1f7495d..0e5e3a1 100644
--- a/ui/ui-material/icons/core/samples/src/main/AndroidManifest.xml
+++ b/ui/ui-material/icons/core/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.ui.material.icons.samples" />
+<manifest package="androidx.compose.material.icons.samples" />
diff --git a/ui/ui-material/icons/core/samples/src/main/java/androidx/ui/material/icons/samples/IconSamples.kt b/ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt
similarity index 89%
rename from ui/ui-material/icons/core/samples/src/main/java/androidx/ui/material/icons/samples/IconSamples.kt
rename to ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt
index 4efa2ea..b94daa4 100644
--- a/ui/ui-material/icons/core/samples/src/main/java/androidx/ui/material/icons/samples/IconSamples.kt
+++ b/ui/ui-material/icons/core/samples/src/main/java/androidx/compose/material/icons/samples/IconSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.samples
+package androidx.compose.material.icons.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -24,8 +24,8 @@
 import androidx.compose.foundation.Icon
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.ui.graphics.vector.VectorPainter
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.rounded.Menu
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.rounded.Menu
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/icons/core/src/androidMain/AndroidManifest.xml b/ui/ui-material/icons/core/src/androidMain/AndroidManifest.xml
index 88c6032..e87376e 100644
--- a/ui/ui-material/icons/core/src/androidMain/AndroidManifest.xml
+++ b/ui/ui-material/icons/core/src/androidMain/AndroidManifest.xml
@@ -14,4 +14,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest package="androidx.ui.material.icons" />
+<manifest package="androidx.compose.material.icons" />
diff --git a/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt b/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt
similarity index 96%
rename from ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
rename to ui/ui-material/icons/core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt
index 926a8a4..6019d2e 100644
--- a/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/ui/material/icons/Icons.kt
+++ b/ui/ui-material/icons/core/src/commonMain/kotlin/androidx/compose/material/icons/Icons.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons
+package androidx.compose.material.icons
 
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.SolidColor
@@ -35,7 +35,7 @@
  * to use a property or a typealias to refer to a specific theme, so it can be accessed in a
  * semantically meaningful way from inside other composables.
  *
- * @sample androidx.ui.material.icons.samples.AppIcons
+ * @sample androidx.compose.material.icons.samples.AppIcons
  *
  * Icons maintain the same names defined by Material, but with their snake_case name converted to
  * PascalCase. For example: add_alarm becomes AddAlarm.
@@ -45,7 +45,7 @@
  * To draw an icon, you can use [androidx.compose.foundation.Icon]. This component applies tint and
  * provides layout size matching the icon.
  *
- * @sample androidx.ui.material.icons.samples.DrawIcon
+ * @sample androidx.compose.material.icons.samples.DrawIcon
  */
 object Icons {
     /**
diff --git a/ui/ui-material/icons/extended/build.gradle b/ui/ui-material/icons/extended/build.gradle
index 7efed7e..1ff4bb1 100644
--- a/ui/ui-material/icons/extended/build.gradle
+++ b/ui/ui-material/icons/extended/build.gradle
@@ -17,7 +17,7 @@
 import androidx.build.LibraryGroups
 import androidx.build.LibraryVersions
 import androidx.build.Publish
-import androidx.ui.material.icons.generator.tasks.IconGenerationTask
+import androidx.compose.material.icons.generator.tasks.IconGenerationTask
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 import static androidx.build.dependencies.DependenciesKt.*
diff --git a/ui/ui-material/icons/extended/src/androidAndroidTest/AndroidManifest.xml b/ui/ui-material/icons/extended/src/androidAndroidTest/AndroidManifest.xml
index 88c6032..e87376e 100644
--- a/ui/ui-material/icons/extended/src/androidAndroidTest/AndroidManifest.xml
+++ b/ui/ui-material/icons/extended/src/androidAndroidTest/AndroidManifest.xml
@@ -14,4 +14,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest package="androidx.ui.material.icons" />
+<manifest package="androidx.compose.material.icons" />
diff --git a/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/ui/material/icons/test/IconComparisonTest.kt b/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt
similarity index 98%
rename from ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/ui/material/icons/test/IconComparisonTest.kt
rename to ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt
index 0aa9927..62fa3df 100644
--- a/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/ui/material/icons/test/IconComparisonTest.kt
+++ b/ui/ui-material/icons/extended/src/androidAndroidTest/kotlin/androidx/compose/material/icons/IconComparisonTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.test
+package androidx.compose.material.icons
 
 import android.graphics.Bitmap
 import android.os.Build
@@ -58,7 +58,7 @@
 
 /**
  * Test to ensure equality (both structurally, and visually) between programmatically generated
- * Material [androidx.ui.material.icons.Icons] and their XML source.
+ * Material [androidx.compose.material.icons.Icons] and their XML source.
  */
 @Suppress("unused")
 @LargeTest
diff --git a/ui/ui-material/icons/extended/src/androidMain/AndroidManifest.xml b/ui/ui-material/icons/extended/src/androidMain/AndroidManifest.xml
index 88c6032..e87376e 100644
--- a/ui/ui-material/icons/extended/src/androidMain/AndroidManifest.xml
+++ b/ui/ui-material/icons/extended/src/androidMain/AndroidManifest.xml
@@ -14,4 +14,4 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<manifest package="androidx.ui.material.icons" />
+<manifest package="androidx.compose.material.icons" />
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/CoreIcons.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/CoreIcons.kt
similarity index 96%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/CoreIcons.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/CoreIcons.kt
index 3c15eb5..8a10e84 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/CoreIcons.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/CoreIcons.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 /**
  * List of 'core' icons that will be added to the 'core' icons module, and depended on by
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/Icon.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt
similarity index 96%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/Icon.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt
index 6e6c05b..e2ee213 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/Icon.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/Icon.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 /**
  * Represents a icon's Kotlin name, processed XML file name, theme, and XML file content.
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconParser.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt
similarity index 94%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconParser.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt
index 7b7acbd..5422275 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconParser.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconParser.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
-import androidx.ui.material.icons.generator.vector.PathParser
-import androidx.ui.material.icons.generator.vector.Vector
-import androidx.ui.material.icons.generator.vector.VectorNode
+import androidx.compose.material.icons.generator.vector.PathParser
+import androidx.compose.material.icons.generator.vector.Vector
+import androidx.compose.material.icons.generator.vector.VectorNode
 import org.xmlpull.v1.XmlPullParser
 import org.xmlpull.v1.XmlPullParser.END_DOCUMENT
 import org.xmlpull.v1.XmlPullParser.END_TAG
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconProcessor.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconProcessor.kt
similarity index 98%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconProcessor.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconProcessor.kt
index 9ae775b..c76da9e 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconProcessor.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconProcessor.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 import com.google.common.base.CaseFormat
 import java.io.File
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconTestingManifestGenerator.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconTestingManifestGenerator.kt
similarity index 89%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconTestingManifestGenerator.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconTestingManifestGenerator.kt
index 0b784c2..3576f33 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconTestingManifestGenerator.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconTestingManifestGenerator.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FileSpec
@@ -55,12 +55,14 @@
                 // KotlinPoet bans wildcard imports, and we run into class compilation errors
                 // (too large a file?) if we add all the imports individually, so let's just add
                 // the imports to each file manually.
-                val wildcardImport = "import androidx.ui.material.icons.${theme.themePackageName}.*"
+                val wildcardImport =
+                    "import androidx.compose.material.icons.${theme.themePackageName}.*"
 
                 fileSpec.writeToWithCopyright(outputSrcDirectory) { fileContent ->
                     fileContent.replace(
-                        "import androidx.ui.material.icons.Icons",
-                        "import androidx.ui.material.icons.Icons\n$wildcardImport"
+                        "import androidx.compose.ui.graphics.vector.VectorAsset",
+                        "$wildcardImport\n" +
+                                "import androidx.compose.ui.graphics.vector.VectorAsset"
                     )
                 }
             }
@@ -69,7 +71,7 @@
             .addStatement("return " + propertyNames.joinToString(" + "))
             .build()
 
-        FileSpec.builder("androidx.ui.material.icons.test", "AllIcons")
+        FileSpec.builder(PackageNames.MaterialIconsPackage.packageName, "AllIcons")
             .addProperty(
                 PropertySpec.builder("AllIcons", type = listOfIconsType)
                     .getter(mainGetter)
@@ -94,7 +96,7 @@
 
     val iconStatements = icons.toStatements()
 
-    return FileSpec.builder(PackageNames.MaterialIconsTestPackage.packageName, propertyName)
+    return FileSpec.builder(PackageNames.MaterialIconsPackage.packageName, propertyName)
         .addProperty(
             PropertySpec.builder(propertyName, type = listOfIconsType)
                 .initializer(buildCodeBlock {
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconTheme.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconTheme.kt
similarity index 96%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconTheme.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconTheme.kt
index 4cdb4c2b..6f46276 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconTheme.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconTheme.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 /**
  * Enum representing the different themes for Material icons.
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconWriter.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconWriter.kt
similarity index 96%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconWriter.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconWriter.kt
index fc2ac0c..53fa1c3 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/IconWriter.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/IconWriter.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 import java.io.File
 
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/KotlinPoetUtils.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/KotlinPoetUtils.kt
similarity index 98%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/KotlinPoetUtils.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/KotlinPoetUtils.kt
index c8f8b0f..f5bc8f0 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/KotlinPoetUtils.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/KotlinPoetUtils.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 import com.squareup.kotlinpoet.FileSpec
 import java.io.File
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/Names.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt
similarity index 90%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/Names.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt
index 7546d10..c2c6d41 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/Names.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/Names.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 import com.squareup.kotlinpoet.ClassName
 import com.squareup.kotlinpoet.MemberName
@@ -23,8 +23,7 @@
  * Package names used for icon generation.
  */
 enum class PackageNames(val packageName: String) {
-    MaterialIconsPackage("androidx.ui.material.icons"),
-    MaterialIconsTestPackage("androidx.ui.material.icons.test"),
+    MaterialIconsPackage("androidx.compose.material.icons"),
     VectorPackage("androidx.compose.ui.graphics.vector")
 }
 
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/VectorAssetGenerator.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/VectorAssetGenerator.kt
similarity index 96%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/VectorAssetGenerator.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/VectorAssetGenerator.kt
index 181f916..292f47b 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/VectorAssetGenerator.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/VectorAssetGenerator.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
-import androidx.ui.material.icons.generator.vector.Vector
-import androidx.ui.material.icons.generator.vector.VectorNode
+import androidx.compose.material.icons.generator.vector.Vector
+import androidx.compose.material.icons.generator.vector.VectorNode
 import com.squareup.kotlinpoet.CodeBlock
 import com.squareup.kotlinpoet.FileSpec
 import com.squareup.kotlinpoet.MemberName
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt
similarity index 92%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt
index d55750b..2f07104 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconGenerationTask.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconGenerationTask.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator.tasks
+package androidx.compose.material.icons.generator.tasks
 
-import androidx.ui.material.icons.generator.Icon
-import androidx.ui.material.icons.generator.IconProcessor
+import androidx.compose.material.icons.generator.Icon
+import androidx.compose.material.icons.generator.IconProcessor
 import com.android.build.gradle.LibraryExtension
 import com.android.build.gradle.api.BaseVariant
 import org.gradle.api.DefaultTask
@@ -91,7 +91,7 @@
     companion object {
         /**
          * Registers the core [project]. The core project contains only the icons defined in
-         * [androidx.ui.material.icons.generator.CoreIcons], and no tests.
+         * [androidx.compose.material.icons.generator.CoreIcons], and no tests.
          */
         @JvmStatic
         fun registerCoreIconProject(project: Project) {
@@ -100,7 +100,7 @@
 
         /**
          * Registers the extended [project]. The core project contains all icons except for the
-         * icons defined in [androidx.ui.material.icons.generator.CoreIcons], as well as a bitmap comparison
+         * icons defined in [androidx.compose.material.icons.generator.CoreIcons], as well as a bitmap comparison
          * test for every icon in both the core and extended project.
          */
         @JvmStatic
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt
similarity index 92%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt
index 439a7dc..5335f84 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconSourceTasks.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconSourceTasks.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator.tasks
+package androidx.compose.material.icons.generator.tasks
 
-import androidx.ui.material.icons.generator.CoreIcons
-import androidx.ui.material.icons.generator.IconWriter
+import androidx.compose.material.icons.generator.CoreIcons
+import androidx.compose.material.icons.generator.IconWriter
 import org.gradle.api.Project
 import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
 
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconTestingGenerationTask.kt
similarity index 94%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconTestingGenerationTask.kt
index 3227b371..74cc076 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/tasks/IconTestingGenerationTask.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/tasks/IconTestingGenerationTask.kt
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator.tasks
+package androidx.compose.material.icons.generator.tasks
 
-import androidx.ui.material.icons.generator.IconTestingManifestGenerator
+import androidx.compose.material.icons.generator.IconTestingManifestGenerator
 import com.android.build.gradle.api.BaseVariant
 import org.gradle.api.Project
 import org.gradle.api.tasks.OutputDirectory
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/PathNode.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt
similarity index 99%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/PathNode.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt
index 4c5a1f6..325a45e 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/PathNode.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathNode.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator.vector
+package androidx.compose.material.icons.generator.vector
 
 /**
  * Class representing a singular path command in a vector.
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/PathParser.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt
similarity index 98%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/PathParser.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt
index 5bcbc0f..e004a05 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/PathParser.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/PathParser.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator.vector
+package androidx.compose.material.icons.generator.vector
 
 import kotlin.math.min
 
diff --git a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/Vector.kt b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt
similarity index 95%
rename from ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/Vector.kt
rename to ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt
index a94083c..a77a5c9 100644
--- a/ui/ui-material/icons/generator/src/main/kotlin/androidx/ui/material/icons/generator/vector/Vector.kt
+++ b/ui/ui-material/icons/generator/src/main/kotlin/androidx/compose/material/icons/generator/vector/Vector.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator.vector
+package androidx.compose.material.icons.generator.vector
 
 /**
  * Simplified representation of a vector, with root [nodes].
diff --git a/ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/IconParserTest.kt b/ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconParserTest.kt
similarity index 93%
rename from ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/IconParserTest.kt
rename to ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconParserTest.kt
index 273a08b..a73feeb 100644
--- a/ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/IconParserTest.kt
+++ b/ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconParserTest.kt
@@ -14,10 +14,10 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
-import androidx.ui.material.icons.generator.vector.PathNode
-import androidx.ui.material.icons.generator.vector.VectorNode
+import androidx.compose.material.icons.generator.vector.PathNode
+import androidx.compose.material.icons.generator.vector.VectorNode
 import com.google.common.truth.Truth
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/IconProcessorTest.kt b/ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt
similarity index 99%
rename from ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/IconProcessorTest.kt
rename to ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt
index bd1ea5b..4ce4e2f 100644
--- a/ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/IconProcessorTest.kt
+++ b/ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/IconProcessorTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
 import com.google.common.truth.Truth
 import org.junit.Assert.fail
diff --git a/ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/VectorAssetGeneratorTest.kt b/ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/VectorAssetGeneratorTest.kt
similarity index 83%
rename from ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/VectorAssetGeneratorTest.kt
rename to ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/VectorAssetGeneratorTest.kt
index 62d399c..c7b079f 100644
--- a/ui/ui-material/icons/generator/src/test/kotlin/androidx/ui/material/icons/generator/VectorAssetGeneratorTest.kt
+++ b/ui/ui-material/icons/generator/src/test/kotlin/androidx/compose/material/icons/generator/VectorAssetGeneratorTest.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.icons.generator
+package androidx.compose.material.icons.generator
 
-import androidx.ui.material.icons.generator.PackageNames.MaterialIconsPackage
-import androidx.ui.material.icons.generator.vector.PathNode
-import androidx.ui.material.icons.generator.vector.Vector
-import androidx.ui.material.icons.generator.vector.VectorNode
+import androidx.compose.material.icons.generator.PackageNames.MaterialIconsPackage
+import androidx.compose.material.icons.generator.vector.PathNode
+import androidx.compose.material.icons.generator.vector.Vector
+import androidx.compose.material.icons.generator.vector.VectorNode
 import com.google.common.truth.Truth
 import org.intellij.lang.annotations.Language
 import org.junit.Test
@@ -62,13 +62,13 @@
 
 @Language("kotlin")
 private val ExpectedFile = """
-    package androidx.ui.material.icons.filled
+    package androidx.compose.material.icons.filled
 
+    import androidx.compose.material.icons.Icons
+    import androidx.compose.material.icons.lazyMaterialIcon
+    import androidx.compose.material.icons.materialPath
     import androidx.compose.ui.graphics.vector.VectorAsset
     import androidx.compose.ui.graphics.vector.group
-    import androidx.ui.material.icons.Icons
-    import androidx.ui.material.icons.lazyMaterialIcon
-    import androidx.ui.material.icons.materialPath
 
     val Icons.Filled.TestVector: VectorAsset by lazyMaterialIcon {
         materialPath(fillAlpha = 0.8f) {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/AndroidManifest.xml b/ui/ui-material/integration-tests/material-demos/src/main/AndroidManifest.xml
index 418463b..c841066 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/AndroidManifest.xml
+++ b/ui/ui-material/integration-tests/material-demos/src/main/AndroidManifest.xml
@@ -15,7 +15,7 @@
   -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="androidx.ui.material.demos">
+    package="androidx.compose.material.demos">
 
     <application>
         <activity
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt
similarity index 85%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt
index f497bb4..815f524 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/AppBarDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/AppBarDemo.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
-import androidx.ui.material.samples.SimpleBottomAppBar
-import androidx.ui.material.samples.SimpleTopAppBar
+import androidx.compose.material.samples.SimpleBottomAppBar
+import androidx.compose.material.samples.SimpleTopAppBar
 
 @Composable
 fun AppBarDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt
similarity index 92%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt
index 77d98ad..e478308 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/BottomNavigationDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/BottomNavigationDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.compose.getValue
@@ -32,9 +32,9 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.width
-import androidx.ui.material.RadioButton
-import androidx.ui.material.samples.BottomNavigationSample
-import androidx.ui.material.samples.BottomNavigationWithOnlySelectedLabelsSample
+import androidx.compose.material.RadioButton
+import androidx.compose.material.samples.BottomNavigationSample
+import androidx.compose.material.samples.BottomNavigationWithOnlySelectedLabelsSample
 import androidx.compose.ui.unit.dp
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt
similarity index 82%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt
index 1574dda..c303776 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ButtonDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ButtonDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -30,20 +30,20 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.Button
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.OutlinedButton
-import androidx.ui.material.TextButton
-import androidx.ui.material.samples.ButtonSample
-import androidx.ui.material.samples.ButtonWithIconSample
-import androidx.ui.material.samples.FluidExtendedFab
-import androidx.ui.material.samples.IconButtonSample
-import androidx.ui.material.samples.IconToggleButtonSample
-import androidx.ui.material.samples.OutlinedButtonSample
-import androidx.ui.material.samples.SimpleExtendedFabNoIcon
-import androidx.ui.material.samples.SimpleExtendedFabWithIcon
-import androidx.ui.material.samples.SimpleFab
-import androidx.ui.material.samples.TextButtonSample
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedButton
+import androidx.compose.material.TextButton
+import androidx.compose.material.samples.ButtonSample
+import androidx.compose.material.samples.ButtonWithIconSample
+import androidx.compose.material.samples.FluidExtendedFab
+import androidx.compose.material.samples.IconButtonSample
+import androidx.compose.material.samples.IconToggleButtonSample
+import androidx.compose.material.samples.OutlinedButtonSample
+import androidx.compose.material.samples.SimpleExtendedFabNoIcon
+import androidx.compose.material.samples.SimpleExtendedFabWithIcon
+import androidx.compose.material.samples.SimpleFab
+import androidx.compose.material.samples.TextButtonSample
 import androidx.compose.ui.unit.dp
 
 private val DefaultSpace = 20.dp
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
similarity index 98%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
index bf053a8..7f6c075 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ColorPickerDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ColorPickerDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import android.graphics.SweepGradient
 import androidx.compose.animation.core.FloatPropKey
@@ -65,8 +65,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.Surface
-import androidx.ui.material.TopAppBar
+import androidx.compose.material.Surface
+import androidx.compose.material.TopAppBar
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
similarity index 93%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
index 5e7c8e0..b7b4d53 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/DynamicThemeActivity.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/DynamicThemeActivity.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import android.os.Bundle
 import androidx.activity.ComponentActivity
@@ -39,13 +39,13 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.BottomAppBar
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.ExtendedFloatingActionButton
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Scaffold
-import androidx.ui.material.TopAppBar
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.BottomAppBar
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.ExtendedFloatingActionButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Scaffold
+import androidx.compose.material.TopAppBar
+import androidx.compose.material.lightColorPalette
 import androidx.compose.ui.unit.dp
 import kotlin.math.round
 
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt
similarity index 95%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt
index 63133387..8d6bbe4 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ElevationDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ElevationDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -32,8 +32,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.Card
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.Card
+import androidx.compose.material.MaterialTheme
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ListItemDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt
similarity index 74%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ListItemDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt
index 8d7ef1f..7f354f9 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ListItemDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ListItemDemo.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.compose.foundation.ScrollableColumn
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Call
-import androidx.ui.material.samples.OneLineListItems
-import androidx.ui.material.samples.OneLineRtlLtrListItems
-import androidx.ui.material.samples.ThreeLineListItems
-import androidx.ui.material.samples.ThreeLineRtlLtrListItems
-import androidx.ui.material.samples.TwoLineListItems
-import androidx.ui.material.samples.TwoLineRtlLtrListItems
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Call
+import androidx.compose.material.samples.OneLineListItems
+import androidx.compose.material.samples.OneLineRtlLtrListItems
+import androidx.compose.material.samples.ThreeLineListItems
+import androidx.compose.material.samples.ThreeLineRtlLtrListItems
+import androidx.compose.material.samples.TwoLineListItems
+import androidx.compose.material.samples.TwoLineRtlLtrListItems
 import androidx.ui.res.imageResource
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialDemos.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt
similarity index 83%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialDemos.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt
index 606cf88..c20c8cc 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialDemos.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialDemos.kt
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.ui.demos.common.ActivityDemo
 import androidx.ui.demos.common.ComposableDemo
 import androidx.ui.demos.common.DemoCategory
-import androidx.ui.material.samples.BottomDrawerSample
-import androidx.ui.material.samples.CustomAlertDialogSample
-import androidx.ui.material.samples.EmphasisSample
-import androidx.ui.material.samples.ModalDrawerSample
-import androidx.ui.material.samples.ScaffoldWithBottomBarAndCutout
-import androidx.ui.material.samples.SideBySideAlertDialogSample
-import androidx.ui.material.samples.StackedAlertDialogSample
+import androidx.compose.material.samples.BottomDrawerSample
+import androidx.compose.material.samples.CustomAlertDialogSample
+import androidx.compose.material.samples.EmphasisSample
+import androidx.compose.material.samples.ModalDrawerSample
+import androidx.compose.material.samples.ScaffoldWithBottomBarAndCutout
+import androidx.compose.material.samples.SideBySideAlertDialogSample
+import androidx.compose.material.samples.StackedAlertDialogSample
 
 val MaterialDemos = DemoCategory("Material", listOf(
     DemoCategory("AlertDialog", listOf(
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
similarity index 89%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
index 221cad8..8392de2 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialTextField.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialTextField.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.compose.getValue
@@ -37,23 +37,23 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.Checkbox
-import androidx.ui.material.EmphasisAmbient
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.OutlinedTextField
-import androidx.ui.material.RadioButton
-import androidx.ui.material.TextField
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
-import androidx.ui.material.icons.filled.Info
-import androidx.ui.material.samples.FilledTextFieldSample
-import androidx.ui.material.samples.FilledTextFieldWithErrorState
-import androidx.ui.material.samples.FilledTextFieldWithIcons
-import androidx.ui.material.samples.FilledTextFieldWithPlaceholder
-import androidx.ui.material.samples.PasswordFilledTextField
-import androidx.ui.material.samples.SimpleOutlinedTextFieldSample
-import androidx.ui.material.samples.TextFieldWithHelperMessage
-import androidx.ui.material.samples.TextFieldWithHideKeyboardOnImeAction
+import androidx.compose.material.Checkbox
+import androidx.compose.material.EmphasisAmbient
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.RadioButton
+import androidx.compose.material.TextField
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material.icons.filled.Info
+import androidx.compose.material.samples.FilledTextFieldSample
+import androidx.compose.material.samples.FilledTextFieldWithErrorState
+import androidx.compose.material.samples.FilledTextFieldWithIcons
+import androidx.compose.material.samples.FilledTextFieldWithPlaceholder
+import androidx.compose.material.samples.PasswordFilledTextField
+import androidx.compose.material.samples.SimpleOutlinedTextFieldSample
+import androidx.compose.material.samples.TextFieldWithHelperMessage
+import androidx.compose.material.samples.TextFieldWithHideKeyboardOnImeAction
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.ui.unit.dp
 
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialThemeDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt
similarity index 82%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialThemeDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt
index bf7972e..8d8fb43 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MaterialThemeDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MaterialThemeDemo.kt
@@ -14,16 +14,16 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxHeight
-import androidx.ui.material.samples.MaterialThemeSample
-import androidx.ui.material.samples.ThemeColorSample
-import androidx.ui.material.samples.ThemeTextStyleSample
+import androidx.compose.material.samples.MaterialThemeSample
+import androidx.compose.material.samples.ThemeColorSample
+import androidx.compose.material.samples.ThemeTextStyleSample
 
 @Composable
 fun MaterialThemeDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
similarity index 90%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
index 919a53b..1ca80eb 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/MenuDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/MenuDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.compose.getValue
@@ -29,11 +29,11 @@
 import androidx.compose.ui.unit.LayoutDirection
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.ltr
-import androidx.ui.material.DropdownMenu
-import androidx.ui.material.DropdownMenuItem
-import androidx.ui.material.IconButton
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.MoreVert
+import androidx.compose.material.DropdownMenu
+import androidx.compose.material.DropdownMenuItem
+import androidx.compose.material.IconButton
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.MoreVert
 import androidx.compose.ui.unit.IntOffset
 import androidx.compose.ui.unit.IntSize
 import androidx.compose.ui.unit.Position
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
similarity index 95%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
index 7bc6360..6348896 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/ProgressIndicatorDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/ProgressIndicatorDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import android.os.Handler
 import android.os.Looper
@@ -33,8 +33,8 @@
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.ui.material.CircularProgressIndicator
-import androidx.ui.material.LinearProgressIndicator
+import androidx.compose.material.CircularProgressIndicator
+import androidx.compose.material.LinearProgressIndicator
 
 @Composable
 fun ProgressIndicatorDemo() {
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt
similarity index 84%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt
index 24e0e56..f8f2f0c 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SelectionControlsDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SelectionControlsDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -24,11 +24,11 @@
 import androidx.compose.foundation.layout.InnerPadding
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.samples.RadioButtonSample
-import androidx.ui.material.samples.RadioGroupSample
-import androidx.ui.material.samples.SwitchSample
-import androidx.ui.material.samples.TriStateCheckboxSample
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.samples.RadioButtonSample
+import androidx.compose.material.samples.RadioGroupSample
+import androidx.compose.material.samples.SwitchSample
+import androidx.compose.material.samples.TriStateCheckboxSample
 import androidx.compose.ui.unit.dp
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt
similarity index 87%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt
index f25bd16..4ff89d9 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SliderDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SliderDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -23,9 +23,9 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.samples.SliderSample
-import androidx.ui.material.samples.StepsSliderSample
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.samples.SliderSample
+import androidx.compose.material.samples.StepsSliderSample
 import androidx.compose.ui.unit.dp
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt
similarity index 85%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt
index 7b22750..fdf2e1f 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/SnackbarDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/SnackbarDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -22,11 +22,11 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.InnerPadding
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Snackbar
-import androidx.ui.material.TextButton
-import androidx.ui.material.samples.SimpleSnackbar
-import androidx.ui.material.snackbarPrimaryColorFor
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Snackbar
+import androidx.compose.material.TextButton
+import androidx.compose.material.samples.SimpleSnackbar
+import androidx.compose.material.snackbarPrimaryColorFor
 import androidx.compose.ui.unit.dp
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
similarity index 80%
rename from ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt
rename to ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
index 618ea16..b68035e 100644
--- a/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/ui/material/demos/TabDemo.kt
+++ b/ui/ui-material/integration-tests/material-demos/src/main/java/androidx/compose/material/demos/TabDemo.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.demos
+package androidx.compose.material.demos
 
 import androidx.compose.Composable
 import androidx.compose.state
@@ -26,15 +26,15 @@
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.Button
-import androidx.ui.material.samples.FancyIndicatorContainerTabs
-import androidx.ui.material.samples.FancyIndicatorTabs
-import androidx.ui.material.samples.FancyTabs
-import androidx.ui.material.samples.IconTabs
-import androidx.ui.material.samples.ScrollingFancyIndicatorContainerTabs
-import androidx.ui.material.samples.ScrollingTextTabs
-import androidx.ui.material.samples.TextAndIconTabs
-import androidx.ui.material.samples.TextTabs
+import androidx.compose.material.Button
+import androidx.compose.material.samples.FancyIndicatorContainerTabs
+import androidx.compose.material.samples.FancyIndicatorTabs
+import androidx.compose.material.samples.FancyTabs
+import androidx.compose.material.samples.IconTabs
+import androidx.compose.material.samples.ScrollingFancyIndicatorContainerTabs
+import androidx.compose.material.samples.ScrollingTextTabs
+import androidx.compose.material.samples.TextAndIconTabs
+import androidx.compose.material.samples.TextTabs
 import androidx.compose.ui.unit.dp
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/AndroidManifest.xml b/ui/ui-material/integration-tests/material-studies/src/main/AndroidManifest.xml
index 5d4849f..cba5993 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/AndroidManifest.xml
+++ b/ui/ui-material/integration-tests/material-studies/src/main/AndroidManifest.xml
@@ -16,7 +16,7 @@
 
 <manifest
         xmlns:android="http://schemas.android.com/apk/res/android"
-        package="androidx.ui.material.studies">
+        package="androidx.compose.material.studies">
 
     <application>
         <activity android:name=".rally.RallyActivity"
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MaterialStudies.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/MaterialStudies.kt
similarity index 88%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MaterialStudies.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/MaterialStudies.kt
index 14207fc..4f90205 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/MaterialStudies.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/MaterialStudies.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies
+package androidx.compose.material.studies
 
 import androidx.ui.demos.common.ActivityDemo
 import androidx.ui.demos.common.DemoCategory
-import androidx.ui.material.studies.rally.RallyActivity
+import androidx.compose.material.studies.rally.RallyActivity
 
 val MaterialStudies = DemoCategory("Material Studies", listOf(
     ActivityDemo("Rally", RallyActivity::class)
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt
similarity index 94%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt
index ec30260..2e450cc 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/AccountsScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/AccountsScreen.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -28,8 +28,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.Card
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.Card
+import androidx.compose.material.MaterialTheme
 import androidx.compose.ui.unit.dp
 
 /**
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt
similarity index 94%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt
index 413affc..ae26080 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/BillsScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/BillsScreen.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -28,8 +28,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.Card
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.Card
+import androidx.compose.material.MaterialTheme
 import androidx.compose.ui.unit.dp
 
 /**
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt
similarity index 95%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt
index acb3d7a..345186e 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/CommonUi.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/CommonUi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -30,9 +30,9 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.Divider
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.icons.Icons
+import androidx.compose.material.Divider
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.icons.Icons
 import androidx.compose.ui.unit.dp
 import java.text.DecimalFormat
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt
similarity index 96%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt
index eaadd48..cad0db5 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/Icons.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/Icons.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -25,9 +25,9 @@
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.ui.graphics.vector.VectorPainter
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.lazyMaterialIcon
-import androidx.ui.material.icons.materialPath
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.lazyMaterialIcon
+import androidx.compose.material.icons.materialPath
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt
similarity index 94%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt
index 8c65ff4..07d3134 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/OverviewScreen.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/OverviewScreen.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import android.annotation.SuppressLint
 import androidx.compose.Composable
@@ -33,12 +33,12 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.Card
-import androidx.ui.material.Divider
-import androidx.ui.material.IconButton
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.TextButton
-import androidx.ui.material.icons.Icons
+import androidx.compose.material.Card
+import androidx.compose.material.Divider
+import androidx.compose.material.IconButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.TextButton
+import androidx.compose.material.icons.Icons
 import androidx.compose.ui.unit.dp
 import java.util.Locale
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt
similarity index 95%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt
index 9fdbd8f..07f8717 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyActivity.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyActivity.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import android.os.Bundle
 import androidx.activity.ComponentActivity
@@ -26,7 +26,7 @@
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.Scaffold
+import androidx.compose.material.Scaffold
 
 /**
  * This Activity recreates the Rally Material Study from
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt
similarity index 89%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt
index 317391e..bd6cb5a 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAlertDialog.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAlertDialog.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -24,10 +24,10 @@
 import androidx.compose.foundation.layout.InnerPadding
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.AlertDialog
-import androidx.ui.material.Divider
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.TextButton
+import androidx.compose.material.AlertDialog
+import androidx.compose.material.Divider
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.TextButton
 import androidx.compose.ui.unit.dp
 
 @Composable
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt
similarity index 98%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt
index f631ef1..d745ce4 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyAnimatedCircle.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyAnimatedCircle.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.animation.core.CubicBezierEasing
 import androidx.compose.animation.core.FloatPropKey
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyData.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyData.kt
similarity index 96%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyData.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyData.kt
index fc21ab6..2bb6319 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyData.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyData.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.ui.graphics.Color
 
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyScreenState.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt
similarity index 91%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyScreenState.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt
index 5ca00cf..32825f9 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyScreenState.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyScreenState.kt
@@ -14,11 +14,11 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.compose.ui.graphics.vector.VectorAsset
-import androidx.ui.material.icons.Icons
+import androidx.compose.material.icons.Icons
 
 enum class RallyScreenState(
     val icon: VectorAsset,
diff --git a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt
similarity index 94%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt
index 430ef03..3871bcb 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/RallyTheme.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/RallyTheme.kt
@@ -14,13 +14,13 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.Composable
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Typography
-import androidx.ui.material.darkColorPalette
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Typography
+import androidx.compose.material.darkColorPalette
 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/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt
similarity index 95%
rename from ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt
rename to ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt
index f8c4ea4..96f6eb3c 100644
--- a/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/ui/material/studies/rally/TopAppBar.kt
+++ b/ui/ui-material/integration-tests/material-studies/src/main/java/androidx/compose/material/studies/rally/TopAppBar.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.studies.rally
+package androidx.compose.material.studies.rally
 
 import androidx.compose.animation.core.LinearEasing
 import androidx.compose.animation.core.transitionDefinition
@@ -34,9 +34,9 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.ui.unit.dp
 import java.util.Locale
 
diff --git a/ui/ui-material/samples/src/main/AndroidManifest.xml b/ui/ui-material/samples/src/main/AndroidManifest.xml
index 8cb2086..63efeb9 100644
--- a/ui/ui-material/samples/src/main/AndroidManifest.xml
+++ b/ui/ui-material/samples/src/main/AndroidManifest.xml
@@ -14,4 +14,4 @@
   ~ limitations under the License
   -->
 
-<manifest package="androidx.ui.material.samples" />
+<manifest package="androidx.compose.material.samples" />
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt
similarity index 94%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt
index 1dc90c2..a2e655f 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AlertDialogSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AlertDialogSample.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -25,10 +25,10 @@
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.AlertDialog
-import androidx.ui.material.AlertDialogButtonLayout
-import androidx.ui.material.Button
-import androidx.ui.material.TextButton
+import androidx.compose.material.AlertDialog
+import androidx.compose.material.AlertDialogButtonLayout
+import androidx.compose.material.Button
+import androidx.compose.material.TextButton
 import androidx.compose.ui.unit.dp
 
 @Sampled
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt
similarity index 85%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt
index ad43c33..a78f589 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/AppBarSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/AppBarSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -22,12 +22,12 @@
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Spacer
-import androidx.ui.material.BottomAppBar
-import androidx.ui.material.IconButton
-import androidx.ui.material.TopAppBar
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
-import androidx.ui.material.icons.filled.Menu
+import androidx.compose.material.BottomAppBar
+import androidx.compose.material.IconButton
+import androidx.compose.material.TopAppBar
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material.icons.filled.Menu
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/BottomNavigationSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt
similarity index 88%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/BottomNavigationSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt
index b71db92..cd256874 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/BottomNavigationSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/BottomNavigationSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -23,10 +23,10 @@
 import androidx.compose.state
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
-import androidx.ui.material.BottomNavigation
-import androidx.ui.material.BottomNavigationItem
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.BottomNavigation
+import androidx.compose.material.BottomNavigationItem
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ButtonSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt
similarity index 82%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ButtonSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt
index 86cf493..119d1f6 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ButtonSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ButtonSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -23,12 +23,12 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.size
-import androidx.ui.material.Button
-import androidx.ui.material.ButtonConstants
-import androidx.ui.material.OutlinedButton
-import androidx.ui.material.TextButton
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonConstants
+import androidx.compose.material.OutlinedButton
+import androidx.compose.material.TextButton
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/CardSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt
similarity index 90%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/CardSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt
index 3a14752..089686d 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/CardSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/CardSamples.kt
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
-import androidx.ui.material.Card
+import androidx.compose.material.Card
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt
similarity index 91%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt
index a61cb5c..85b21ef 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/DrawerSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/DrawerSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -28,11 +28,11 @@
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.BottomDrawerLayout
-import androidx.ui.material.BottomDrawerState
-import androidx.ui.material.Button
-import androidx.ui.material.DrawerState
-import androidx.ui.material.ModalDrawerLayout
+import androidx.compose.material.BottomDrawerLayout
+import androidx.compose.material.BottomDrawerState
+import androidx.compose.material.Button
+import androidx.compose.material.DrawerState
+import androidx.compose.material.ModalDrawerLayout
 import androidx.compose.ui.unit.dp
 
 @Sampled
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/EmphasisSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt
similarity index 90%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/EmphasisSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt
index 9bf5512..c4a3bed 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/EmphasisSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/EmphasisSamples.kt
@@ -14,14 +14,14 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.EmphasisAmbient
-import androidx.ui.material.ProvideEmphasis
+import androidx.compose.material.EmphasisAmbient
+import androidx.compose.material.ProvideEmphasis
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/FloatingActionButtonSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt
similarity index 86%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/FloatingActionButtonSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt
index 33cbd6c..820e455 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/FloatingActionButtonSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/FloatingActionButtonSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -22,10 +22,10 @@
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.ui.material.ExtendedFloatingActionButton
-import androidx.ui.material.FloatingActionButton
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.ExtendedFloatingActionButton
+import androidx.compose.material.FloatingActionButton
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/IconButtonSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt
similarity index 85%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/IconButtonSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt
index d7f0de1..f8d05d0 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/IconButtonSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/IconButtonSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -24,10 +24,10 @@
 import androidx.compose.animation.animate
 import androidx.compose.foundation.Icon
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.IconButton
-import androidx.ui.material.IconToggleButton
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.IconButton
+import androidx.compose.material.IconToggleButton
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ListSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt
similarity index 98%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ListSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt
index 3a365e0..145a8cb 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ListSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ListSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -29,9 +29,9 @@
 import androidx.compose.ui.graphics.ImageAsset
 import androidx.compose.ui.graphics.vector.VectorAsset
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.Checkbox
-import androidx.ui.material.Divider
-import androidx.ui.material.ListItem
+import androidx.compose.material.Checkbox
+import androidx.compose.material.Divider
+import androidx.compose.material.ListItem
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/MenuSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt
similarity index 84%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/MenuSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt
index e46583c..2105e7f 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/MenuSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/MenuSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -27,12 +27,12 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.Divider
-import androidx.ui.material.DropdownMenu
-import androidx.ui.material.DropdownMenuItem
-import androidx.ui.material.IconButton
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.MoreVert
+import androidx.compose.material.Divider
+import androidx.compose.material.DropdownMenu
+import androidx.compose.material.DropdownMenuItem
+import androidx.compose.material.IconButton
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.MoreVert
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
similarity index 91%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
index 7e5ec99..3655d7c 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ScaffoldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ScaffoldSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.compose.animation.core.TweenSpec
 import androidx.annotation.Sampled
@@ -32,15 +32,15 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.BottomAppBar
-import androidx.ui.material.DrawerState
-import androidx.ui.material.ExtendedFloatingActionButton
-import androidx.ui.material.IconButton
-import androidx.ui.material.Scaffold
-import androidx.ui.material.ScaffoldState
-import androidx.ui.material.TopAppBar
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Menu
+import androidx.compose.material.BottomAppBar
+import androidx.compose.material.DrawerState
+import androidx.compose.material.ExtendedFloatingActionButton
+import androidx.compose.material.IconButton
+import androidx.compose.material.Scaffold
+import androidx.compose.material.ScaffoldState
+import androidx.compose.material.TopAppBar
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Menu
 import androidx.compose.ui.unit.dp
 import kotlin.math.abs
 import kotlin.math.roundToInt
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
similarity index 94%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
index d60d78b..dddeabd 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SelectionControlsSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SelectionControlsSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -33,11 +33,11 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.Checkbox
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.RadioButton
-import androidx.ui.material.Switch
-import androidx.ui.material.TriStateCheckbox
+import androidx.compose.material.Checkbox
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.RadioButton
+import androidx.compose.material.Switch
+import androidx.compose.material.TriStateCheckbox
 import androidx.compose.ui.unit.dp
 
 @Sampled
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SliderSample.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt
similarity index 91%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SliderSample.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt
index e914c71..b036d6d 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SliderSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SliderSample.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -22,8 +22,8 @@
 import androidx.compose.setValue
 import androidx.compose.state
 import androidx.compose.foundation.Text
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Slider
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Slider
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SnackbarSample.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt
similarity index 82%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SnackbarSample.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt
index 5d03645..c5e6c90 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/SnackbarSample.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/SnackbarSample.kt
@@ -14,15 +14,15 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Snackbar
-import androidx.ui.material.TextButton
-import androidx.ui.material.snackbarPrimaryColorFor
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Snackbar
+import androidx.compose.material.TextButton
+import androidx.compose.material.snackbarPrimaryColorFor
 
 @Sampled
 @Composable
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
similarity index 97%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
index a9c18a8..9661b2c 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TabSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TabSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.compose.animation.core.spring
 import androidx.compose.animation.core.transitionDefinition
@@ -49,11 +49,11 @@
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Tab
-import androidx.ui.material.TabRow
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Tab
+import androidx.compose.material.TabRow
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 import androidx.compose.ui.unit.dp
 
 @Sampled
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt
similarity index 92%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt
index 149e073..1ea64cd 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/TextFieldSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/TextFieldSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -29,13 +29,13 @@
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.EmphasisAmbient
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.OutlinedTextField
-import androidx.ui.material.TextField
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
-import androidx.ui.material.icons.filled.Info
+import androidx.compose.material.EmphasisAmbient
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.TextField
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material.icons.filled.Info
 import androidx.compose.runtime.savedinstancestate.savedInstanceState
 import androidx.compose.ui.text.TextRange
 import androidx.compose.ui.unit.dp
diff --git a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt
similarity index 88%
rename from ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
rename to ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt
index 7da7dc9..49467df 100644
--- a/ui/ui-material/samples/src/main/java/androidx/ui/material/samples/ThemeSamples.kt
+++ b/ui/ui-material/samples/src/main/java/androidx/compose/material/samples/ThemeSamples.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.samples
+package androidx.compose.material.samples
 
 import androidx.annotation.Sampled
 import androidx.compose.Composable
@@ -26,11 +26,11 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.aspectRatio
 import androidx.compose.foundation.layout.fillMaxSize
-import androidx.ui.material.ExtendedFloatingActionButton
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Typography
-import androidx.ui.material.darkColorPalette
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ExtendedFloatingActionButton
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Typography
+import androidx.compose.material.darkColorPalette
+import androidx.compose.material.lightColorPalette
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.unit.sp
diff --git a/ui/ui-material/src/androidAndroidTest/AndroidManifest.xml b/ui/ui-material/src/androidAndroidTest/AndroidManifest.xml
index 1b20554..93f5779 100644
--- a/ui/ui-material/src/androidAndroidTest/AndroidManifest.xml
+++ b/ui/ui-material/src/androidAndroidTest/AndroidManifest.xml
@@ -14,4 +14,4 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest package="androidx.ui.material.test" />
+<manifest package="androidx.compose.material" />
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt
index dc84456..ef14c3d 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/AppBarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/AppBarTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.test.filters.SmallTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomNavigationTest.kt
similarity index 97%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomNavigationTest.kt
index ead9562..3be6536 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/BottomNavigationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/BottomNavigationTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.test.filters.LargeTest
 import androidx.ui.core.LayoutCoordinates
@@ -24,9 +24,9 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Icon
 import androidx.compose.foundation.Text
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
-import androidx.ui.material.samples.BottomNavigationSample
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material.samples.BottomNavigationSample
 import androidx.ui.test.assertCountEquals
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertIsEqualTo
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonScreenshotTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonScreenshotTest.kt
index 1f613b1..32b148c1f1 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonScreenshotTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.test.filters.MediumTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
index 790a4d8..adf65ac 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ButtonTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.Composable
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt
index 8f60e5b..104b035 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CardTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CardTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.Providers
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt
index 7cb40ae..76059aa 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxScreenshotTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.state
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt
index 71b362d..6ff73ca 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/CheckboxUiTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/CheckboxUiTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.state
 import androidx.test.filters.MediumTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt
index fe3df3d..77738f1 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DividerUiTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DividerUiTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.test.filters.MediumTest
 import androidx.ui.test.assertHeightIsEqualTo
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerScreenshotTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerScreenshotTest.kt
index 313c599..c5a4de3 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerScreenshotTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.test.filters.LargeTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt
index 68d84d0..3d3b3b6 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/DrawerTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/DrawerTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.SystemClock.sleep
 import androidx.compose.emptyContent
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ElevationOverlayTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ElevationOverlayTest.kt
index ff09fc6..fd9ff83 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ElevationOverlayTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ElevationOverlayTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.test.filters.LargeTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/EmphasisTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/EmphasisTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/EmphasisTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/EmphasisTest.kt
index 11e98a6..65469e8 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/EmphasisTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/EmphasisTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.contentColor
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
index cc472e7..127f343 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/FloatingActionButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/FloatingActionButtonTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.Providers
@@ -35,8 +35,8 @@
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertIsEnabled
 import androidx.ui.test.assertShape
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/GoldenCommon.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/GoldenCommon.kt
similarity index 94%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/GoldenCommon.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/GoldenCommon.kt
index 437ffa4..a69d606 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/GoldenCommon.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/GoldenCommon.kt
@@ -14,6 +14,6 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 internal const val GOLDEN_MATERIAL = "ui/ui-material"
\ No newline at end of file
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt
similarity index 96%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt
index 3f18b2f..358df05 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconButtonTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.emptyContent
 import androidx.test.filters.LargeTest
@@ -21,8 +21,8 @@
 import androidx.ui.core.testTag
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.samples.IconButtonSample
-import androidx.ui.material.samples.IconToggleButtonSample
+import androidx.compose.material.samples.IconButtonSample
+import androidx.compose.material.samples.IconToggleButtonSample
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertIsOff
 import androidx.ui.test.assertIsOn
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt
similarity index 96%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt
index e70ad22..5510c86 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/IconTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/IconTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.test.filters.LargeTest
 import androidx.ui.core.DensityAmbient
@@ -23,8 +23,8 @@
 import androidx.compose.ui.graphics.painter.ColorPainter
 import androidx.compose.ui.graphics.painter.ImagePainter
 import androidx.compose.ui.graphics.vector.VectorAssetBuilder
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Menu
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Menu
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertWidthIsEqualTo
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt
index 76b3d5c..6b33349 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ListItemTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ListItemTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.test.filters.SmallTest
 import androidx.compose.foundation.text.FirstBaseline
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt
index cbf8e02..4ca16e2 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MaterialTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MaterialTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.AndroidOwner
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
index 5c2333c..79166fd 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/MenuTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/MenuTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.getValue
 import androidx.compose.mutableStateOf
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt
index 1e3df05..9e59753 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ProgressIndicatorTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ProgressIndicatorTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.mutableStateOf
 import androidx.test.filters.LargeTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt
index ac6c316..700e2e9 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonScreenshotTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.state
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
index cd4518d..818c30e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/RadioButtonTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/RadioButtonTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.mutableStateOf
 import androidx.test.filters.MediumTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
index 2564f81..149e777 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ScaffoldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ScaffoldTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.Composable
@@ -40,8 +40,8 @@
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.size
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertWidthIsEqualTo
 import androidx.ui.test.captureToBitmap
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt
index 4a318b4..2db7a27 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SliderTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SliderTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.mutableStateOf
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt
index bc24d3f..bd485e8 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SnackbarTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SnackbarTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.Providers
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceContentColorTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceContentColorTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceContentColorTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceContentColorTest.kt
index 32218e9..e9bea3e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceContentColorTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceContentColorTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.contentColor
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt
index 6de1309..964ec16 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SurfaceTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SurfaceTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.test.filters.MediumTest
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
index 2daaeb5..ca7995c 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchScreenshotTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import android.os.Build
 import androidx.compose.state
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt
similarity index 99%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt
index 1f103f5..7e12e79 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/SwitchTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/SwitchTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.mutableStateOf
 import androidx.compose.state
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt
index e0d5013..0a0039e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/TabTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/TabTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.getValue
@@ -29,10 +29,10 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.preferredHeight
-import androidx.ui.material.icons.Icons
-import androidx.ui.material.icons.filled.Favorite
-import androidx.ui.material.samples.ScrollingTextTabs
-import androidx.ui.material.samples.TextTabs
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.Favorite
+import androidx.compose.material.samples.ScrollingTextTabs
+import androidx.compose.material.samples.TextTabs
 import androidx.ui.test.assertCountEquals
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertIsEqualTo
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt
index ebce69f..f223219 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/ripple/RippleIndicationTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/ripple/RippleIndicationTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.ripple
+package androidx.compose.material.ripple
 
 import android.os.Build
 import androidx.compose.Composable
@@ -43,12 +43,12 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.ExperimentalMaterialApi
-import androidx.ui.material.GOLDEN_MATERIAL
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
-import androidx.ui.material.darkColorPalette
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ExperimentalMaterialApi
+import androidx.compose.material.GOLDEN_MATERIAL
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
+import androidx.compose.material.darkColorPalette
+import androidx.compose.material.lightColorPalette
 import androidx.ui.test.ComposeTestRule
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt
index 44d4cf5..a4f35c6 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/FilledTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/FilledTextFieldTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.textfield
+package androidx.compose.material.textfield
 
 import android.os.Build
 import androidx.compose.Providers
@@ -46,11 +46,11 @@
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.TextField
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.runOnIdleWithDensity
-import androidx.ui.material.setMaterialContent
-import androidx.ui.material.setMaterialContentForSizeAssertions
+import androidx.compose.material.TextField
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.runOnIdleWithDensity
+import androidx.compose.material.setMaterialContent
+import androidx.compose.material.setMaterialContentForSizeAssertions
 import androidx.ui.test.assertHeightIsEqualTo
 import androidx.ui.test.assertShape
 import androidx.ui.test.captureToBitmap
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
similarity index 98%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
index 202e85e..e22a31e 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/OutlinedTextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/OutlinedTextFieldTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.textfield
+package androidx.compose.material.textfield
 
 import android.os.Build
 import androidx.compose.Providers
@@ -43,10 +43,10 @@
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.OutlinedTextField
-import androidx.ui.material.runOnIdleWithDensity
-import androidx.ui.material.setMaterialContent
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.runOnIdleWithDensity
+import androidx.compose.material.setMaterialContent
 import androidx.ui.test.assertShape
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldScreenshotTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldScreenshotTest.kt
similarity index 95%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldScreenshotTest.kt
index db16868..fd34edf 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldScreenshotTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldScreenshotTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.textfield
+package androidx.compose.material.textfield
 
 import android.os.Build
 import androidx.test.filters.LargeTest
@@ -27,10 +27,10 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.rtl
-import androidx.ui.material.GOLDEN_MATERIAL
-import androidx.ui.material.OutlinedTextField
-import androidx.ui.material.TextField
-import androidx.ui.material.setMaterialContent
+import androidx.compose.material.GOLDEN_MATERIAL
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.TextField
+import androidx.compose.material.setMaterialContent
 import androidx.ui.test.captureToBitmap
 import androidx.ui.test.createComposeRule
 import androidx.ui.test.onNodeWithTag
diff --git a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
similarity index 97%
rename from ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
rename to ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
index 354ecde..e2957b2 100644
--- a/ui/ui-material/src/androidAndroidTest/kotlin/androidx/ui/material/textfield/TextFieldTest.kt
+++ b/ui/ui-material/src/androidAndroidTest/kotlin/androidx/compose/material/textfield/TextFieldTest.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.textfield
+package androidx.compose.material.textfield
 
 import android.os.Build
 import androidx.compose.remember
@@ -29,8 +29,8 @@
 import androidx.compose.ui.text.input.TextFieldValue
 import androidx.compose.foundation.layout.Stack
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.TextFieldScroller
-import androidx.ui.material.TextFieldScrollerPosition
+import androidx.compose.material.TextFieldScroller
+import androidx.compose.material.TextFieldScrollerPosition
 import androidx.compose.runtime.savedinstancestate.rememberSavedInstanceState
 import androidx.ui.test.StateRestorationTester
 import androidx.ui.test.assertPixels
diff --git a/ui/ui-material/src/androidMain/AndroidManifest.xml b/ui/ui-material/src/androidMain/AndroidManifest.xml
index c72e60d..93f5779 100644
--- a/ui/ui-material/src/androidMain/AndroidManifest.xml
+++ b/ui/ui-material/src/androidMain/AndroidManifest.xml
@@ -14,4 +14,4 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License.
   -->
-<manifest package="androidx.ui.material" />
+<manifest package="androidx.compose.material" />
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
similarity index 95%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
index 52abcb4..113000e 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AlertDialog.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AlertDialog.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -32,8 +32,8 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.AlertDialogButtonLayout.SideBySide
-import androidx.ui.material.AlertDialogButtonLayout.Stacked
+import androidx.compose.material.AlertDialogButtonLayout.SideBySide
+import androidx.compose.material.AlertDialogButtonLayout.Stacked
 import androidx.compose.ui.unit.dp
 
 /**
@@ -44,11 +44,11 @@
  *
  * Sample of dialog with side by side buttons:
  *
- * @sample androidx.ui.material.samples.SideBySideAlertDialogSample
+ * @sample androidx.compose.material.samples.SideBySideAlertDialogSample
  *
  * Sample of dialog with stacked buttons:
  *
- * @sample androidx.ui.material.samples.StackedAlertDialogSample
+ * @sample androidx.compose.material.samples.StackedAlertDialogSample
  *
  * @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
  * or pressing the back button.
@@ -94,7 +94,7 @@
  *
  * This function can be used to fully customize the button area, e.g. with:
  *
- * @sample androidx.ui.material.samples.CustomAlertDialogSample
+ * @sample androidx.compose.material.samples.CustomAlertDialogSample
  *
  * @param onCloseRequest Executes when the user tries to dismiss the Dialog by clicking outside
  * or pressing the back button.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt
index 42ee0fc..d86aaef 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/AppBar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/AppBar.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -57,7 +57,7 @@
  * centering the title, use the other TopAppBar overload for a generic TopAppBar with no
  * restriction on content.
  *
- * @sample androidx.ui.material.samples.SimpleTopAppBar
+ * @sample androidx.compose.material.samples.SimpleTopAppBar
  *
  * @param title The title to be displayed in the center of the TopAppBar
  * @param navigationIcon The navigation icon displayed at the start of the TopAppBar. This should
@@ -153,7 +153,7 @@
  * See [BottomAppBar anatomy](https://material.io/components/app-bars-bottom/#anatomy) for the
  * recommended content depending on the [FloatingActionButton] position.
  *
- * @sample androidx.ui.material.samples.SimpleBottomAppBar
+ * @sample androidx.compose.material.samples.SimpleBottomAppBar
  *
  * @param backgroundColor The background color for the BottomAppBar. Use [Color.Transparent] to
  * have no color.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt
index 29cfd50..0472b39 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/BottomNavigation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/BottomNavigation.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.VectorizedAnimationSpec
 import androidx.compose.animation.core.FastOutSlowInEasing
@@ -63,7 +63,7 @@
  *
  * A simple example looks like:
  *
- * @sample androidx.ui.material.samples.BottomNavigationSample
+ * @sample androidx.compose.material.samples.BottomNavigationSample
  *
  * See [BottomNavigationItem] for configuration specific to each item, and not the overall
  * BottomNavigation component.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt
similarity index 96%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt
index 99c506d..e724b76 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Button.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Button.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("NOTHING_TO_INLINE")
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -56,12 +56,12 @@
  * background color is set to [ColorPalette.primary] then the text will by default use
  * [ColorPalette.onPrimary].
  *
- * @sample androidx.ui.material.samples.ButtonSample
+ * @sample androidx.compose.material.samples.ButtonSample
  *
  * If you need to add an icon just put it inside the [content] slot together with a spacing
  * and a text:
  *
- * @sample androidx.ui.material.samples.ButtonWithIconSample
+ * @sample androidx.compose.material.samples.ButtonWithIconSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -148,7 +148,7 @@
  * background color is set to [ColorPalette.primary] then the text will by default use
  * [ColorPalette.onPrimary].
  *
- * @sample androidx.ui.material.samples.OutlinedButtonSample
+ * @sample androidx.compose.material.samples.OutlinedButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -209,7 +209,7 @@
  * background color is set to [ColorPalette.primary] then the text will by default use
  * [ColorPalette.onPrimary].
  *
- * @sample androidx.ui.material.samples.TextButtonSample
+ * @sample androidx.compose.material.samples.TextButtonSample
  *
  * @param onClick Will be called when the user clicks the button
  * @param modifier Modifier to be applied to the button
@@ -285,14 +285,14 @@
     /**
      * The default size of the icon when used inside a [Button].
      *
-     * @sample androidx.ui.material.samples.ButtonWithIconSample
+     * @sample androidx.compose.material.samples.ButtonWithIconSample
      */
     val DefaultIconSize = 18.dp
 
     /**
      * The default size of the spacing between an icon and a text when they used inside a [Button].
      *
-     * @sample androidx.ui.material.samples.ButtonWithIconSample
+     * @sample androidx.compose.material.samples.ButtonWithIconSample
      */
     val DefaultIconSpacing = 8.dp
 
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt
similarity index 95%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt
index d100ebc..7711f17 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Card.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Card.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -27,7 +27,7 @@
 /**
  * Cards are [Surface]s that display content and actions on a single topic.
  *
- * @sample androidx.ui.material.samples.CardSample
+ * @sample androidx.compose.material.samples.CardSample
  *
  * @param modifier Modifier to be applied to the layout of the card.
  * @param shape Defines the surface's shape as well its shadow. A shadow is only
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt
index 24acf97..5594d13 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Checkbox.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Checkbox.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.FloatPropKey
 import androidx.compose.animation.core.TransitionSpec
@@ -45,14 +45,14 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.util.lerp
 
 /**
  * A component that represents two states (checked / unchecked).
  *
- * @sample androidx.ui.material.samples.CheckboxSample
+ * @sample androidx.compose.material.samples.CheckboxSample
  *
  * @see [TriStateCheckbox] if you require support for an indeterminate state.
  *
@@ -97,7 +97,7 @@
  * A TriStateCheckbox should be used when there are
  * dependent checkboxes associated to this component and those can have different values.
  *
- * @sample androidx.ui.material.samples.TriStateCheckboxSample
+ * @sample androidx.compose.material.samples.TriStateCheckboxSample
  *
  * @see [Checkbox] if you want a simple component that represents Boolean state
  *
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Color.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Color.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt
index abe2ae7..14072c1 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Color.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Color.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Ambient
 import androidx.compose.Composable
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
index f28a426..142a9c1 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Divider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Divider.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
index c7620c1..c91af79 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Drawer.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Drawer.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.SpringSpec
 import androidx.compose.Composable
@@ -35,8 +35,8 @@
 import androidx.compose.foundation.layout.offsetPx
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSizeIn
-import androidx.ui.material.internal.fixedThresholds
-import androidx.ui.material.internal.stateDraggable
+import androidx.compose.material.internal.fixedThresholds
+import androidx.compose.material.internal.stateDraggable
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.util.lerp
@@ -82,7 +82,7 @@
  * See [BottomDrawerLayout] for a layout that introduces a bottom drawer, suitable when
  * using bottom navigation.
  *
- * @sample androidx.ui.material.samples.ModalDrawerSample
+ * @sample androidx.compose.material.samples.ModalDrawerSample
  *
  * @param drawerState state of the drawer
  * @param onStateChange lambda to be invoked when the drawer requests to change its state,
@@ -159,7 +159,7 @@
  *
  * See [ModalDrawerLayout] for a layout that introduces a classic from-the-side drawer.
  *
- * @sample androidx.ui.material.samples.BottomDrawerSample
+ * @sample androidx.compose.material.samples.BottomDrawerSample
  *
  * @param drawerState state of the drawer
  * @param onStateChange lambda to be invoked when the drawer requests to change its state,
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Emphasis.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Emphasis.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt
index 58e44b1..d2fc69c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Emphasis.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Emphasis.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Ambient
 import androidx.compose.Composable
@@ -94,7 +94,7 @@
  * See [EmphasisAmbient] to retrieve the levels of emphasis provided in the theme,
  * so they can be applied with this function.
  *
- * @sample androidx.ui.material.samples.EmphasisSample
+ * @sample androidx.compose.material.samples.EmphasisSample
  */
 @Composable
 fun ProvideEmphasis(emphasis: Emphasis, content: @Composable () -> Unit) {
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ExperimentalMaterialApi.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ExperimentalMaterialApi.kt
similarity index 95%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ExperimentalMaterialApi.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ExperimentalMaterialApi.kt
index c15a347..615f6dd 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ExperimentalMaterialApi.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ExperimentalMaterialApi.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 @RequiresOptIn("This material API is experimental and is likely to change or to be removed in" +
         " the future.")
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
similarity index 96%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
index e596ead..a0bf07e 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/FloatingActionButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/FloatingActionButton.kt
@@ -16,7 +16,7 @@
 
 @file:Suppress("Deprecation")
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.remember
@@ -45,7 +45,7 @@
  *
  * This FAB is typically used with an [androidx.compose.foundation.Icon]:
  *
- * @sample androidx.ui.material.samples.SimpleFab
+ * @sample androidx.compose.material.samples.SimpleFab
  *
  * See [ExtendedFloatingActionButton] for an extended FAB that contains text and an optional icon.
  *
@@ -101,13 +101,13 @@
  * This extended FAB contains text and an optional icon that will be placed at the start. See
  * [FloatingActionButton] for a FAB that just contains some content, typically an icon.
  *
- * @sample androidx.ui.material.samples.SimpleExtendedFabWithIcon
+ * @sample androidx.compose.material.samples.SimpleExtendedFabWithIcon
  *
  * If you want FAB’s container to have a fluid width (to be defined by its relationship to something
  * else on screen, such as screen width or the layout grid) just apply an appropriate modifier.
  * For example to fill the whole available width you can do:
  *
- * @sample androidx.ui.material.samples.FluidExtendedFab
+ * @sample androidx.compose.material.samples.FluidExtendedFab
  *
  * @param text Text label displayed inside this FAB
  * @param icon Optional icon for this FAB, typically this will be a [androidx.compose.foundation.Icon]
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
similarity index 91%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
index 30a5551..a2bd7103 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/IconButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/IconButton.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Modifier
@@ -23,7 +23,7 @@
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.selection.toggleable
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.ui.unit.dp
 
 /**
@@ -35,10 +35,10 @@
  * Bar documentation for samples of this.
  *
  * [icon] should typically be an [androidx.compose.foundation.Icon], using an icon from
- * [androidx.ui.material.icons.Icons]. If using a custom icon, note that the typical size for the
+ * [androidx.compose.material.icons.Icons]. If using a custom icon, note that the typical size for the
  * internal icon is 24 x 24 dp.
  *
- * @sample androidx.ui.material.samples.IconButtonSample
+ * @sample androidx.compose.material.samples.IconButtonSample
  *
  * @param onClick the lambda to be invoked when this icon is pressed
  * @param modifier optional [Modifier] for this IconButton
@@ -67,7 +67,7 @@
  * An [IconButton] with two states, for icons that can be toggled 'on' and 'off', such as a
  * bookmark icon, or a navigation icon that opens a drawer.
  *
- * @sample androidx.ui.material.samples.IconToggleButtonSample
+ * @sample androidx.compose.material.samples.IconToggleButtonSample
  *
  * @param checked whether this IconToggleButton is currently checked
  * @param onCheckedChange callback to be invoked when this icon is selected
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
index b535554..8a34058 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ListItem.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ListItem.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -34,7 +34,7 @@
 import androidx.compose.foundation.layout.preferredHeightIn
 import androidx.compose.foundation.layout.preferredSizeIn
 import androidx.compose.foundation.layout.preferredWidthIn
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
 import androidx.compose.ui.text.TextStyle
@@ -50,11 +50,11 @@
  *
  * This component can be used to achieve the list item templates existing in the spec. For example:
  * - one-line items
- * @sample androidx.ui.material.samples.OneLineListItems
+ * @sample androidx.compose.material.samples.OneLineListItems
  * - two-line items
- * @sample androidx.ui.material.samples.TwoLineListItems
+ * @sample androidx.compose.material.samples.TwoLineListItems
  * - three-line items
- * @sample androidx.ui.material.samples.ThreeLineListItems
+ * @sample androidx.compose.material.samples.ThreeLineListItems
  *
  * @param text The primary text of the list item
  * @param modifier Modifier to be applied to the list item
@@ -112,11 +112,11 @@
  *
  * This component can be used to achieve the list item templates existing in the spec. For example:
  * - one-line items
- * @sample androidx.ui.material.samples.OneLineListItems
+ * @sample androidx.compose.material.samples.OneLineListItems
  * - two-line items
- * @sample androidx.ui.material.samples.TwoLineListItems
+ * @sample androidx.compose.material.samples.TwoLineListItems
  * - three-line items
- * @sample androidx.ui.material.samples.ThreeLineListItems
+ * @sample androidx.compose.material.samples.ThreeLineListItems
  *
  * @param modifier Modifier to be applied to the list item
  * @param onClick Callback to be invoked when the list item is clicked
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/MaterialTheme.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
similarity index 92%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/MaterialTheme.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
index 1cea8a9..c7ef885 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/MaterialTheme.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/MaterialTheme.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.Providers
@@ -22,7 +22,7 @@
 import androidx.compose.foundation.Indication
 import androidx.compose.foundation.IndicationAmbient
 import androidx.compose.foundation.ProvideTextStyle
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 
 /**
  * A MaterialTheme defines the styling principles from the Material design specification.
@@ -43,7 +43,7 @@
  * of your application, and then separate MaterialTheme(s) for different screens / parts of your
  * UI, overriding only the parts of the theme definition that need to change.
  *
- * @sample androidx.ui.material.samples.MaterialThemeSample
+ * @sample androidx.compose.material.samples.MaterialThemeSample
  *
  * @param colors A complete definition of the Material Color theme for this hierarchy
  * @param typography A set of text styles to be used as this hierarchy's typography system
@@ -76,7 +76,7 @@
     /**
      * Retrieves the current [ColorPalette] at the call site's position in the hierarchy.
      *
-     * @sample androidx.ui.material.samples.ThemeColorSample
+     * @sample androidx.compose.material.samples.ThemeColorSample
      */
     @Composable
     val colors: ColorPalette
@@ -85,7 +85,7 @@
     /**
      * Retrieves the current [Typography] at the call site's position in the hierarchy.
      *
-     * @sample androidx.ui.material.samples.ThemeTextStyleSample
+     * @sample androidx.compose.material.samples.ThemeTextStyleSample
      */
     @Composable
     val typography: Typography
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
index 478e733..e52523f 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Menu.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Menu.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.FloatPropKey
 import androidx.compose.animation.core.LinearOutSlowInEasing
@@ -46,7 +46,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSizeIn
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.ui.unit.Density
 import androidx.compose.ui.unit.IntBounds
 import androidx.compose.ui.unit.IntOffset
@@ -75,7 +75,7 @@
  * layout bounds of the [toggle] do not coincide with its visual bounds.
  *
  * Example usage:
- * @sample androidx.ui.material.samples.MenuSample
+ * @sample androidx.compose.material.samples.MenuSample
  *
  * @param toggle The element generating the menu
  * @param expanded Whether the menu is currently open or dismissed
@@ -156,7 +156,7 @@
  * A dropdown menu item, as defined by the Material Design spec.
  *
  * Example usage:
- * @sample androidx.ui.material.samples.MenuSample
+ * @sample androidx.compose.material.samples.MenuSample
  *
  * @param onClick Called when the menu item was clicked
  * @param modifier The modifier to be applied to the menu item
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
index e907524..2f207af 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/OutlinedTextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/OutlinedTextField.kt
@@ -17,7 +17,7 @@
 // TODO(b/160821157): Replace FocusDetailedState with FocusState2 DEPRECATION
 @file:Suppress("DEPRECATION")
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.Stable
@@ -65,7 +65,7 @@
  * [Outlined TextField](https://material.io/components/text-fields/#outlined-text-field)
  *
  * See example usage:
- * @sample androidx.ui.material.samples.SimpleOutlinedTextFieldSample
+ * @sample androidx.compose.material.samples.SimpleOutlinedTextFieldSample
  *
  * If apart from input text change you also want to observe the cursor location, selection range,
  * or IME composition use the OutlinedTextField overload with the [TextFieldValue] parameter
@@ -181,7 +181,7 @@
  * [Outlined TextField](https://material.io/components/text-fields/#outlined-text-field)
  *
  * See example usage:
- * @sample androidx.ui.material.samples.OutlinedTextFieldSample
+ * @sample androidx.compose.material.samples.OutlinedTextFieldSample
  *
  * This overload provides access to the input text, cursor position and selection range and
  * IME composition. If you only want to observe an input text change, use the OutlinedTextField
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt
index 5253ccd..43308d3 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ProgressIndicator.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ProgressIndicator.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.AnimationConstants.Infinite
 import androidx.compose.animation.core.CubicBezierEasing
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt
index 736f1a55..bdba9a0 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/RadioButton.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/RadioButton.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.transitionDefinition
 import androidx.compose.animation.core.tween
@@ -40,7 +40,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.wrapContentSize
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.ui.text.TextStyle
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
@@ -57,7 +57,7 @@
  * such groups manually, to gain flexibility and full control over the state and the appearance
  *
  * See example of a simple radio group-like layout
- * @sample androidx.ui.material.samples.RadioGroupSample
+ * @sample androidx.compose.material.samples.RadioGroupSample
  */
 @Composable
 @Suppress("DEPRECATION")
@@ -87,7 +87,7 @@
  * appearance.
  *
  * See example of a simple radio group-like layout
- * @sample androidx.ui.material.samples.RadioGroupSample
+ * @sample androidx.compose.material.samples.RadioGroupSample
  */
 @Deprecated(
     "RadioGroup provides hardcoded layout and no flexibility. It is recommended to create such " +
@@ -117,7 +117,7 @@
                 "}\n" +
                 "}" +
                 "}",
-        "androidx.ui.material.RadioButton",
+        "androidx.compose.material.RadioButton",
         "androidx.compose.foundation.Text",
         "androidx.compose.foundation.layout.Row",
         "androidx.compose.foundation.layout.Column",
@@ -304,12 +304,12 @@
 /**
  * Component to represent two states, selected and not selected.
  *
- * @sample androidx.ui.material.samples.RadioButtonSample
+ * @sample androidx.compose.material.samples.RadioButtonSample
  *
  * [RadioButton]s can be combined together with [Text] in the desired layout (e.g. [Column] or
  * [Row]) to achieve radio group-like behaviour, where the entire layout is selectable:
  *
- * @sample androidx.ui.material.samples.RadioGroupSample
+ * @sample androidx.compose.material.samples.RadioGroupSample
  *
  * @param selected boolean state for this button: either it is selected or not
  * @param onClick callback to be invoked when the RadioButton is being clicked
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
index ea0fbf4..be3bfa9 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Scaffold.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Scaffold.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.Providers
@@ -41,7 +41,7 @@
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
-import androidx.ui.material.Scaffold.FabPosition
+import androidx.compose.material.Scaffold.FabPosition
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.PxBounds
 import androidx.compose.ui.geometry.Size
@@ -138,12 +138,12 @@
  *
  * Simple example of a Scaffold with [TopAppBar], [FloatingActionButton] and drawer:
  *
- * @sample androidx.ui.material.samples.SimpleScaffoldWithTopBar
+ * @sample androidx.compose.material.samples.SimpleScaffoldWithTopBar
  *
  * More fancy usage with [BottomAppBar] with cutout and docked [FloatingActionButton], which
  * animates it's shape when clicked:
  *
- * @sample androidx.ui.material.samples.ScaffoldWithBottomBarAndCutout
+ * @sample androidx.compose.material.samples.ScaffoldWithBottomBarAndCutout
  *
  * @param scaffoldState state of this scaffold widget. It contains the state of the screen, e.g.
  * variables to provide manual control over the drawer behavior, sizes of components, etc
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt
index 7b4bd22..5bbf58c 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Shapes.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Shapes.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.staticAmbientOf
 import androidx.compose.foundation.shape.CornerBasedShape
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
index 159845e..1266141 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Slider.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Slider.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.AnimatedFloat
 import androidx.compose.animation.core.AnimationClockObservable
@@ -56,7 +56,7 @@
 import androidx.compose.foundation.layout.preferredHeightIn
 import androidx.compose.foundation.layout.preferredSize
 import androidx.compose.foundation.layout.preferredWidthIn
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.ui.semantics.AccessibilityRangeInfo
 import androidx.ui.semantics.accessibilityValue
 import androidx.ui.semantics.accessibilityValueRange
@@ -79,12 +79,12 @@
  * Use continuous sliders allow users to make meaningful selections that don’t
  * require a specific value:
  *
- * @sample androidx.ui.material.samples.SliderSample
+ * @sample androidx.compose.material.samples.SliderSample
  *
  * You can allow the user to choose only between predefined set of values by specifying the amount
  * of steps between min and max values:
  *
- * @sample androidx.ui.material.samples.StepsSliderSample
+ * @sample androidx.compose.material.samples.StepsSliderSample
  *
  * @param value current value of the Slider. If outside of [valueRange] provided, value will be
  * coerced to this range.
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt
index 6802415..d795881 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Snackbar.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Snackbar.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.ui.core.Alignment
@@ -48,7 +48,7 @@
  * A Snackbar can contain a single action. Because they disappear automatically, the action
  * shouldn't be "Dismiss" or "Cancel".
  *
- * @sample androidx.ui.material.samples.SimpleSnackbar
+ * @sample androidx.compose.material.samples.SimpleSnackbar
  *
  * @param text text component to show information about a process that an app has performed or
  * will perform
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt
index f522f3a2..546a094 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Surface.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Surface.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.Providers
@@ -105,8 +105,8 @@
 
 /**
  * primarySurface represents the background color of components that are [ColorPalette.primary]
- * in light theme, and [ColorPalette.surface] in dark theme, such as [androidx.ui.material.TabRow]
- * and [androidx.ui.material.TopAppBar]. This is to reduce brightness of large surfaces in dark
+ * in light theme, and [ColorPalette.surface] in dark theme, such as [androidx.compose.material.TabRow]
+ * and [androidx.compose.material.TopAppBar]. This is to reduce brightness of large surfaces in dark
  * theme, aiding contrast and readability. See
  * [Dark Theme](https://material.io/design/color/dark-theme.html#custom-application).
  *
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt
similarity index 92%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt
index 9962bf8..e20a9d5 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Switch.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Switch.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.TweenSpec
 import androidx.compose.Composable
@@ -43,20 +43,20 @@
 import androidx.compose.foundation.layout.offsetPx
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSize
-import androidx.ui.material.SwitchDefaults.disabledUncheckedThumbColor
-import androidx.ui.material.SwitchDefaults.disabledUncheckedTrackColor
-import androidx.ui.material.SwitchDefaults.makeDisabledCheckedThumbColor
-import androidx.ui.material.SwitchDefaults.makeDisabledCheckedTrackColor
-import androidx.ui.material.SwitchDefaults.uncheckedThumbColor
-import androidx.ui.material.SwitchDefaults.uncheckedTrackColor
-import androidx.ui.material.internal.stateDraggable
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.SwitchDefaults.disabledUncheckedThumbColor
+import androidx.compose.material.SwitchDefaults.disabledUncheckedTrackColor
+import androidx.compose.material.SwitchDefaults.makeDisabledCheckedThumbColor
+import androidx.compose.material.SwitchDefaults.makeDisabledCheckedTrackColor
+import androidx.compose.material.SwitchDefaults.uncheckedThumbColor
+import androidx.compose.material.SwitchDefaults.uncheckedTrackColor
+import androidx.compose.material.internal.stateDraggable
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.ui.unit.dp
 
 /**
  * A Switch is a two state toggleable component that provides on/off like options
  *
- * @sample androidx.ui.material.samples.SwitchSample
+ * @sample androidx.compose.material.samples.SwitchSample
  *
  * @param checked whether or not this components is checked
  * @param onCheckedChange callback to be invoked when Switch is being clicked,
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt
index db2ffaf..726e263 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Tab.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Tab.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.FastOutSlowInEasing
 import androidx.compose.animation.core.LinearEasing
@@ -53,7 +53,7 @@
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredHeight
 import androidx.compose.foundation.layout.preferredWidth
-import androidx.ui.material.TabRow.TabPosition
+import androidx.compose.material.TabRow.TabPosition
 import androidx.compose.foundation.text.FirstBaseline
 import androidx.compose.foundation.text.LastBaseline
 import androidx.compose.ui.text.style.TextAlign
@@ -72,15 +72,15 @@
  *
  * A simple example with text tabs looks like:
  *
- * @sample androidx.ui.material.samples.TextTabs
+ * @sample androidx.compose.material.samples.TextTabs
  *
  * You can also provide your own custom tab, such as:
  *
- * @sample androidx.ui.material.samples.FancyTabs
+ * @sample androidx.compose.material.samples.FancyTabs
  *
  * Where the custom tab itself could look like:
  *
- * @sample androidx.ui.material.samples.FancyTab
+ * @sample androidx.compose.material.samples.FancyTab
  *
  * As well as customizing the tab, you can also provide a custom [indicatorContainer], to customize
  * the indicator displayed for a tab. [indicatorContainer] is responsible for positioning an
@@ -88,12 +88,12 @@
  *
  * For example, given an indicator that draws a rounded rectangle near the edges of the [Tab]:
  *
- * @sample androidx.ui.material.samples.FancyIndicator
+ * @sample androidx.compose.material.samples.FancyIndicator
  *
  * We can reuse [TabRow.IndicatorContainer] and just provide this indicator, as we aren't changing
  * the transition:
  *
- * @sample androidx.ui.material.samples.FancyIndicatorTabs
+ * @sample androidx.compose.material.samples.FancyIndicatorTabs
  *
  * You may also want to provide a custom transition, to allow you to dynamically change the
  * appearance of the indicator as it animates between tabs, such as changing its color or size.
@@ -103,7 +103,7 @@
  * position of the indicator, the color of the indicator, and also adds a physics based 'spring'
  * effect to the indicator in the direction of motion:
  *
- * @sample androidx.ui.material.samples.FancyIndicatorContainer
+ * @sample androidx.compose.material.samples.FancyIndicatorContainer
  *
  * This container will fill up the entire width of the TabRow, and when a new tab is selected,
  * the transition will be called with a new value for [selectedIndex], which will animate the
@@ -111,7 +111,7 @@
  *
  * We can use this custom container similarly to before:
  *
- * @sample androidx.ui.material.samples.FancyIndicatorContainerTabs
+ * @sample androidx.compose.material.samples.FancyIndicatorContainerTabs
  *
  * @param T the type of the item provided that will map to a [Tab]
  * @param items the list containing the items used to build this TabRow
@@ -473,7 +473,7 @@
  *
  * A custom tab using this API may look like:
  *
- * @sample androidx.ui.material.samples.FancyTab
+ * @sample androidx.compose.material.samples.FancyTab
  *
  * @param selected whether this tab is selected or not
  * @param onSelected the callback to be invoked when this tab is selected
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
similarity index 96%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
index 00bdab0..9cb9cc8 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextField.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextField.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Composable
 import androidx.compose.getValue
@@ -61,31 +61,31 @@
  *
  * A simple example looks like:
  *
- * @sample androidx.ui.material.samples.SimpleFilledTextFieldSample
+ * @sample androidx.compose.material.samples.SimpleFilledTextFieldSample
  *
  * You may provide a placeholder:
  *
- * @sample androidx.ui.material.samples.FilledTextFieldWithPlaceholder
+ * @sample androidx.compose.material.samples.FilledTextFieldWithPlaceholder
  *
  * You can also provide leading and trailing icons:
  *
- * @sample androidx.ui.material.samples.FilledTextFieldWithIcons
+ * @sample androidx.compose.material.samples.FilledTextFieldWithIcons
  *
  * To handle the error input state, use [isErrorValue] parameter:
  *
- * @sample androidx.ui.material.samples.FilledTextFieldWithErrorState
+ * @sample androidx.compose.material.samples.FilledTextFieldWithErrorState
  *
  * Additionally, you may provide additional message at the bottom:
  *
- * @sample androidx.ui.material.samples.TextFieldWithHelperMessage
+ * @sample androidx.compose.material.samples.TextFieldWithHelperMessage
  *
  * Password text field example:
  *
- * @sample androidx.ui.material.samples.PasswordFilledTextField
+ * @sample androidx.compose.material.samples.PasswordFilledTextField
  *
  * Hiding a software keyboard on IME action performed:
  *
- * @sample androidx.ui.material.samples.TextFieldWithHideKeyboardOnImeAction
+ * @sample androidx.compose.material.samples.TextFieldWithHideKeyboardOnImeAction
  *
  * If apart from input text change you also want to observe the cursor location, selection range,
  * or IME composition use the FilledTextField overload with the [TextFieldValue] parameter instead.
@@ -206,31 +206,31 @@
  *
  * A simple example looks like:
  *
- * @sample androidx.ui.material.samples.SimpleFilledTextFieldSample
+ * @sample androidx.compose.material.samples.SimpleFilledTextFieldSample
  *
  * You may provide a placeholder:
  *
- * @sample androidx.ui.material.samples.FilledTextFieldWithPlaceholder
+ * @sample androidx.compose.material.samples.FilledTextFieldWithPlaceholder
  *
  * You can also provide leading and trailing icons:
  *
- * @sample androidx.ui.material.samples.FilledTextFieldWithIcons
+ * @sample androidx.compose.material.samples.FilledTextFieldWithIcons
  *
  * To handle the error input state, use [isErrorValue] parameter:
  *
- * @sample androidx.ui.material.samples.FilledTextFieldWithErrorState
+ * @sample androidx.compose.material.samples.FilledTextFieldWithErrorState
  *
  * Additionally, you may provide additional message at the bottom:
  *
- * @sample androidx.ui.material.samples.TextFieldWithHelperMessage
+ * @sample androidx.compose.material.samples.TextFieldWithHelperMessage
  *
  * Password text field example:
  *
- * @sample androidx.ui.material.samples.PasswordFilledTextField
+ * @sample androidx.compose.material.samples.PasswordFilledTextField
  *
  * Hiding a software keyboard on IME action performed:
  *
- * @sample androidx.ui.material.samples.TextFieldWithHideKeyboardOnImeAction
+ * @sample androidx.compose.material.samples.TextFieldWithHideKeyboardOnImeAction
  *
  * If apart from input text change you also want to observe the cursor location, selection range,
  * or IME composition use the FilledTextField overload with the [TextFieldValue] parameter instead.
@@ -305,7 +305,7 @@
                 " errorColor = errorColor," +
                 " backgroundColor = backgroundColor," +
                 " shape = shape)",
-        "androidx.ui.material.TextField"
+        "androidx.compose.material.TextField"
     )
 )
 @Composable
@@ -363,7 +363,7 @@
  * If you are looking for an outlined version, see [OutlinedTextField].
  *
  * See example usage:
- * @sample androidx.ui.material.samples.FilledTextFieldSample
+ * @sample androidx.compose.material.samples.FilledTextFieldSample
  *
  * This overload provides access to the input text, cursor position, selection range and
  * IME composition. If you only want to observe an input text change, use the FilledTextField
@@ -470,7 +470,7 @@
  * [Filled TextField](https://material.io/components/text-fields/#filled-text-field)
  *
  * See example usage:
- * @sample androidx.ui.material.samples.FilledTextFieldSample
+ * @sample androidx.compose.material.samples.FilledTextFieldSample
  *
  * This overload provides access to the input text, cursor position, selection range and
  * IME composition. If you only want to observe an input text change, use the FilledTextField
@@ -546,7 +546,7 @@
                 " errorColor = errorColor," +
                 " backgroundColor = backgroundColor," +
                 " shape = shape)",
-        "androidx.ui.material.TextField"
+        "androidx.compose.material.TextField"
     )
 )
 @Composable
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
index 3d53fa2..60cbeec 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/TextFieldImpl.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/TextFieldImpl.kt
@@ -17,7 +17,7 @@
 // TODO(b/160821157): Replace FocusDetailedState with FocusState2 DEPRECATION
 @file:Suppress("DEPRECATION")
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.animation.core.FloatPropKey
 import androidx.compose.animation.core.TransitionSpec
@@ -66,7 +66,7 @@
 import androidx.compose.ui.text.input.VisualTransformation
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.preferredSizeIn
-import androidx.ui.material.ripple.RippleIndication
+import androidx.compose.material.ripple.RippleIndication
 import androidx.compose.runtime.savedinstancestate.Saver
 import androidx.compose.runtime.savedinstancestate.rememberSavedInstanceState
 import androidx.compose.ui.text.SoftwareKeyboardController
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
index 23cd196..84254e8 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/Typography.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/Typography.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material
+package androidx.compose.material
 
 import androidx.compose.Immutable
 import androidx.compose.staticAmbientOf
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/internal/StateDraggable.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/internal/StateDraggable.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt
index 2089f8e..3252b7b 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/internal/StateDraggable.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/internal/StateDraggable.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.internal
+package androidx.compose.material.internal
 
 import androidx.compose.animation.core.AnimatedFloat
 import androidx.compose.animation.core.AnimationClockObservable
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
similarity index 99%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
index 90bf63a..c06ad05 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleAnimation.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleAnimation.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.ripple
+package androidx.compose.material.ripple
 
 import androidx.compose.animation.core.AnimationClockObservable
 import androidx.compose.animation.core.FastOutSlowInEasing
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt
similarity index 98%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt
index ec734e8..7bc2d98 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleIndication.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleIndication.kt
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package androidx.ui.material.ripple
+package androidx.compose.material.ripple
 
 import androidx.compose.animation.core.AnimationClockObservable
 import androidx.compose.animation.core.AnimationSpec
@@ -41,8 +41,8 @@
 import androidx.compose.ui.graphics.drawscope.DrawScope
 import androidx.compose.ui.graphics.drawscope.clipRect
 import androidx.compose.ui.graphics.useOrElse
-import androidx.ui.material.ExperimentalMaterialApi
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.ExperimentalMaterialApi
+import androidx.compose.material.MaterialTheme
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.util.fastForEach
 import androidx.compose.ui.util.nativeClass
diff --git a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleTheme.kt b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt
similarity index 97%
rename from ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleTheme.kt
rename to ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt
index 2491edc..5e2fc25 100644
--- a/ui/ui-material/src/commonMain/kotlin/androidx/ui/material/ripple/RippleTheme.kt
+++ b/ui/ui-material/src/commonMain/kotlin/androidx/compose/material/ripple/RippleTheme.kt
@@ -15,7 +15,7 @@
  */
 @file:OptIn(ExperimentalMaterialApi::class)
 
-package androidx.ui.material.ripple
+package androidx.compose.material.ripple
 
 import androidx.compose.Composable
 import androidx.compose.staticAmbientOf
@@ -23,8 +23,8 @@
 import androidx.compose.foundation.contentColor
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.luminance
-import androidx.ui.material.ExperimentalMaterialApi
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.ExperimentalMaterialApi
+import androidx.compose.material.MaterialTheme
 
 /**
  * Defines the appearance and the behavior for [RippleIndication]s.
diff --git a/ui/ui-material/src/test/kotlin/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt b/ui/ui-material/src/test/kotlin/androidx/compose/material/BottomAppBarRoundedEdgesTest.kt
similarity index 98%
rename from ui/ui-material/src/test/kotlin/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
rename to ui/ui-material/src/test/kotlin/androidx/compose/material/BottomAppBarRoundedEdgesTest.kt
index 2037c2b..c6017ad 100644
--- a/ui/ui-material/src/test/kotlin/androidx/ui/material/BottomAppBarRoundedEdgesTest.kt
+++ b/ui/ui-material/src/test/kotlin/androidx/compose/material/BottomAppBarRoundedEdgesTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material
+package androidx.compose.material
 
 import com.google.common.truth.Truth.assertThat
 import org.junit.Test
diff --git a/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt b/ui/ui-material/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt
similarity index 97%
rename from ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
rename to ui/ui-material/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt
index e63d65fd..31838e1 100644
--- a/ui/ui-material/src/test/kotlin/androidx/ui/material/ripple/RippleAnimationTest.kt
+++ b/ui/ui-material/src/test/kotlin/androidx/compose/material/ripple/RippleAnimationTest.kt
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package androidx.ui.material.ripple
+package androidx.compose.material.ripple
 
 import androidx.compose.ui.geometry.Size
 import androidx.compose.ui.unit.Density
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 c9faf4b..98c2ba6 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
@@ -23,9 +23,9 @@
 import androidx.ui.core.testTag
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.Button
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import androidx.ui.test.util.expectAssertionError
 import org.junit.Rule
 import org.junit.Test
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt
index 88e478c..46c333a 100644
--- a/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt
+++ b/ui/ui-test/src/androidTest/java/androidx/ui/test/CustomActivityTest.kt
@@ -22,8 +22,8 @@
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Stack
-import androidx.ui.material.Button
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
 import androidx.ui.test.android.createAndroidComposeRule
 import org.junit.Rule
 import org.junit.Test
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 9cc3efb..e2c6b6c 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
@@ -25,8 +25,8 @@
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import androidx.ui.semantics.SemanticsActions
 import androidx.ui.test.util.expectErrorMessage
 import androidx.ui.test.util.expectErrorMessageStartsWith
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 01b7e32..5512ea9 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
@@ -19,9 +19,9 @@
 import androidx.compose.state
 import androidx.test.filters.MediumTest
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.Checkbox
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.Checkbox
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 import org.junit.Rule
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt b/ui/ui-test/src/androidTest/java/androidx/ui/test/MultipleComposeRootsTest.kt
index e45b0c0..c485862 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
@@ -32,9 +32,9 @@
 import androidx.ui.core.setContent
 import androidx.ui.core.testTag
 import androidx.compose.foundation.selection.ToggleableState
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
-import androidx.ui.material.TriStateCheckbox
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
+import androidx.compose.material.TriStateCheckbox
 import androidx.ui.test.android.createAndroidComposeRule
 import org.junit.Rule
 import org.junit.Test
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 eed138f..b4ab4a5 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
@@ -23,8 +23,8 @@
 import androidx.compose.foundation.Box
 import androidx.compose.foundation.Text
 import androidx.compose.foundation.layout.Column
-import androidx.ui.material.Button
-import androidx.ui.material.MaterialTheme
+import androidx.compose.material.Button
+import androidx.compose.material.MaterialTheme
 import androidx.ui.semantics.disabled
 import androidx.ui.semantics.testTag
 import androidx.ui.test.util.BoundaryNode
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 e9bce81..4dbb047 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(1203, 1240, 1261, 1389, 1437, 1459, 1476, 1499, 1516),
+            assertArrayEquals(arrayOf(1213, 1250, 1271, 1399, 1447, 1469, 1486, 1509, 1526),
                 viewInfos
                     .map { it.location?.offset ?: -1 }
                     .sorted()
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 a7c2cea..d9d073b 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
@@ -21,8 +21,8 @@
 import androidx.compose.ui.graphics.Color
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Row
-import androidx.ui.material.Button
-import androidx.ui.material.Surface
+import androidx.compose.material.Button
+import androidx.compose.material.Surface
 import androidx.ui.tooling.preview.Preview
 
 /**
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 448fe21..b687f88 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
@@ -21,7 +21,7 @@
 import androidx.ui.core.LifecycleOwnerAmbient
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.Surface
+import androidx.compose.material.Surface
 import androidx.ui.tooling.preview.Preview
 
 @Preview
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt
index 3cf1f6d..01b207c 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/inspector/InlineClassConverterTest.kt
@@ -19,8 +19,8 @@
 import androidx.test.filters.SmallTest
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.Button
-import androidx.ui.material.Surface
+import androidx.compose.material.Button
+import androidx.compose.material.Surface
 import androidx.ui.tooling.Group
 import androidx.ui.tooling.Inspectable
 import androidx.ui.tooling.SlotTableRecord
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 8ce7662..5b2a61d 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
@@ -25,8 +25,8 @@
 import androidx.test.filters.SmallTest
 import androidx.ui.core.OwnedLayer
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.Button
-import androidx.ui.material.Surface
+import androidx.compose.material.Button
+import androidx.compose.material.Surface
 import androidx.ui.tooling.Group
 import androidx.ui.tooling.Inspectable
 import androidx.ui.tooling.R
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 c33efdd..fd40ec6 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
@@ -19,10 +19,10 @@
 import androidx.compose.Composable
 import androidx.compose.foundation.Text
 import androidx.compose.ui.graphics.Color
-import androidx.ui.material.Button
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.MaterialTheme
-import androidx.ui.material.Surface
+import androidx.compose.material.Button
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Surface
 
 @Preview
 @Composable
diff --git a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/PreviewParameterTest.kt b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/PreviewParameterTest.kt
index 218d5f1..75a1163 100644
--- a/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/PreviewParameterTest.kt
+++ b/ui/ui-tooling/src/androidTest/java/androidx/ui/tooling/preview/PreviewParameterTest.kt
@@ -16,9 +16,9 @@
 
 package androidx.ui.tooling.preview
 
-import androidx.ui.material.ColorPalette
-import androidx.ui.material.darkColorPalette
-import androidx.ui.material.lightColorPalette
+import androidx.compose.material.ColorPalette
+import androidx.compose.material.darkColorPalette
+import androidx.compose.material.lightColorPalette
 import androidx.ui.tooling.ComposeViewAdapterTest
 import androidx.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
 import androidx.ui.tooling.preview.datasource.LoremIpsum
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 a5fd7733..8aa5688f 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
@@ -24,8 +24,8 @@
 import androidx.compose.state
 import androidx.ui.core.setContent
 import androidx.compose.foundation.Text
-import androidx.ui.material.ExtendedFloatingActionButton
-import androidx.ui.material.Scaffold
+import androidx.compose.material.ExtendedFloatingActionButton
+import androidx.compose.material.Scaffold
 
 /**
  * Activity used to run `@Composable` previews from Android Studio.
