// Signature format: 3.0
package androidx.navigation {

  public final class ActivityKt {
    method public static androidx.navigation.NavController findNavController(android.app.Activity, @IdRes int viewId);
  }

  public final class ActivityNavArgsLazyKt {
    method @MainThread public static inline <reified Args> androidx.navigation.NavArgsLazy<Args>! navArgs(android.app.Activity);
  }

  public final class ActivityNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.ActivityNavigator.Destination> {
    ctor public ActivityNavigatorDestinationBuilder(androidx.navigation.ActivityNavigator navigator, @IdRes int id);
    method public androidx.navigation.ActivityNavigator.Destination build();
    method public String? getAction();
    method public kotlin.reflect.KClass<? extends android.app.Activity>? getActivityClass();
    method public android.net.Uri? getData();
    method public String? getDataPattern();
    method public String? getTargetPackage();
    method public void setAction(String? p);
    method public void setActivityClass(kotlin.reflect.KClass<? extends android.app.Activity>? p);
    method public void setData(android.net.Uri? p);
    method public void setDataPattern(String? p);
    method public void setTargetPackage(String? p);
    property public final String? action;
    property public final kotlin.reflect.KClass<? extends android.app.Activity>? activityClass;
    property public final android.net.Uri? data;
    property public final String? dataPattern;
    property public final String? targetPackage;
  }

  public final class ActivityNavigatorDestinationBuilderKt {
    method public static inline void activity(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.ActivityNavigatorDestinationBuilder,kotlin.Unit> builder);
  }

  public final class ActivityNavigatorExtrasKt {
    method public static androidx.navigation.ActivityNavigator.Extras ActivityNavigatorExtras(androidx.core.app.ActivityOptionsCompat? activityOptions = null, int flags = 0);
  }

  public final class NavControllerKt {
    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavController, @IdRes int id = 0, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
  }

  public final class NavHostKt {
    method public static inline androidx.navigation.NavGraph createGraph(androidx.navigation.NavHost, @IdRes int id = 0, @IdRes int startDestination, kotlin.jvm.functions.Function1<? super androidx.navigation.NavGraphBuilder,kotlin.Unit> builder);
  }

  public final class ViewKt {
    method public static androidx.navigation.NavController findNavController(android.view.View);
  }

}

