// Signature format: 4.0
package com.google.accompanist.themeadapter.material {

  public final class MdcTheme {
    method @Deprecated @androidx.compose.runtime.Composable public static void MdcTheme(optional android.content.Context context, optional boolean readColors, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily, kotlin.jvm.functions.Function0<kotlin.Unit> content);
    method @Deprecated public static com.google.accompanist.themeadapter.material.ThemeParameters createMdcTheme(android.content.Context context, androidx.compose.ui.unit.LayoutDirection layoutDirection, optional androidx.compose.ui.unit.Density density, optional boolean readColors, optional boolean readTypography, optional boolean readShapes, optional boolean setTextColors, optional boolean setDefaultFontFamily);
  }

  @Deprecated public final class ThemeParameters {
    ctor @Deprecated public ThemeParameters(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography, androidx.compose.material.Shapes? shapes);
    method @Deprecated public androidx.compose.material.Colors? component1();
    method @Deprecated public androidx.compose.material.Typography? component2();
    method @Deprecated public androidx.compose.material.Shapes? component3();
    method @Deprecated public com.google.accompanist.themeadapter.material.ThemeParameters copy(androidx.compose.material.Colors? colors, androidx.compose.material.Typography? typography, androidx.compose.material.Shapes? shapes);
    method @Deprecated public androidx.compose.material.Colors? getColors();
    method @Deprecated public androidx.compose.material.Shapes? getShapes();
    method @Deprecated public androidx.compose.material.Typography? getTypography();
    property public final androidx.compose.material.Colors? colors;
    property public final androidx.compose.material.Shapes? shapes;
    property public final androidx.compose.material.Typography? typography;
  }

  public final class TypographyKt {
  }

}

