// Signature format: 4.0
package androidx.compose.material3.windowsizeclass {

  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class WindowHeightSizeClass implements java.lang.Comparable<androidx.compose.material3.windowsizeclass.WindowHeightSizeClass> {
    method public operator int compareTo(int other);
    field public static final androidx.compose.material3.windowsizeclass.WindowHeightSizeClass.Companion Companion;
  }

  public static final class WindowHeightSizeClass.Companion {
    method public int getCompact();
    method public int getExpanded();
    method public int getMedium();
    property public final int Compact;
    property public final int Expanded;
    property public final int Medium;
  }

  @androidx.compose.runtime.Immutable public final class WindowSizeClass {
    method public int getHeightSizeClass();
    method public int getWidthSizeClass();
    property public final int heightSizeClass;
    property public final int widthSizeClass;
    field public static final androidx.compose.material3.windowsizeclass.WindowSizeClass.Companion Companion;
  }

  public static final class WindowSizeClass.Companion {
  }

  @androidx.compose.runtime.Immutable @kotlin.jvm.JvmInline public final value class WindowWidthSizeClass implements java.lang.Comparable<androidx.compose.material3.windowsizeclass.WindowWidthSizeClass> {
    method public operator int compareTo(int other);
    field public static final androidx.compose.material3.windowsizeclass.WindowWidthSizeClass.Companion Companion;
  }

  public static final class WindowWidthSizeClass.Companion {
    method public int getCompact();
    method public int getExpanded();
    method public int getMedium();
    property public final int Compact;
    property public final int Expanded;
    property public final int Medium;
  }

}

