// Signature format: 3.0
package androidx.navigation {

  public final class NavGraphViewModelLazyKt {
    method @MainThread public static inline <reified VM> kotlin.Lazy<? extends VM>! navGraphViewModels(androidx.fragment.app.Fragment, @IdRes int navGraphId, kotlin.jvm.functions.Function0<? extends androidx.lifecycle.ViewModelProvider.Factory>? factoryProducer = null);
  }

}

package androidx.navigation.fragment {

  public final class DialogFragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.DialogFragmentNavigator.Destination> {
    ctor public DialogFragmentNavigatorDestinationBuilder(androidx.navigation.fragment.DialogFragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.DialogFragment> fragmentClass);
    method public androidx.navigation.fragment.DialogFragmentNavigator.Destination build();
  }

  public final class DialogFragmentNavigatorDestinationBuilderKt {
    method public static inline <reified F> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id);
    method public static inline <reified F> void dialog(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.DialogFragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
  }

  public final class FragmentKt {
    method public static androidx.navigation.NavController findNavController(androidx.fragment.app.Fragment);
  }

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

  public final class FragmentNavigatorDestinationBuilder extends androidx.navigation.NavDestinationBuilder<androidx.navigation.fragment.FragmentNavigator.Destination> {
    ctor public FragmentNavigatorDestinationBuilder(androidx.navigation.fragment.FragmentNavigator navigator, @IdRes int id, kotlin.reflect.KClass<? extends androidx.fragment.app.Fragment> fragmentClass);
    method public androidx.navigation.fragment.FragmentNavigator.Destination build();
  }

  public final class FragmentNavigatorDestinationBuilderKt {
    method public static inline <reified F> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id);
    method public static inline <reified F> void fragment(androidx.navigation.NavGraphBuilder, @IdRes int id, kotlin.jvm.functions.Function1<? super androidx.navigation.fragment.FragmentNavigatorDestinationBuilder,? extends kotlin.Unit> builder);
  }

  public final class FragmentNavigatorExtrasKt {
    method public static androidx.navigation.fragment.FragmentNavigator.Extras FragmentNavigatorExtras(kotlin.Pair<? extends android.view.View,java.lang.String>... sharedElements);
  }

}

