Skip to content

Commit

Permalink
Merge pull request #756 from arkivanov/stabilize-pages
Browse files Browse the repository at this point in the history
Renamed Pages composable function to ChildPages, promoted all Child Pages API to stable
  • Loading branch information
arkivanov authored Aug 7, 2024
2 parents ad03ddf + 36c5d88 commit 2a466cc
Show file tree
Hide file tree
Showing 13 changed files with 27 additions and 77 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.arkivanov.decompose.router.pages

import com.arkivanov.decompose.Child
import com.arkivanov.decompose.ExperimentalDecomposeApi

/**
* A state holder for Child Pages.
Expand All @@ -10,7 +9,6 @@ import com.arkivanov.decompose.ExperimentalDecomposeApi
* @param selectedIndex an index of the selected child component.
* Must be within the range of [items] indices if [items] is not empty, otherwise can be any number.
*/
@ExperimentalDecomposeApi
data class ChildPages<out C : Any, out T : Any>(
val items: List<Child<C, T>>,
val selectedIndex: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.arkivanov.decompose.router.pages

import com.arkivanov.decompose.ExperimentalDecomposeApi
import com.arkivanov.decompose.GenericComponentContext
import com.arkivanov.decompose.router.children.ChildNavState
import com.arkivanov.decompose.router.children.ChildNavState.Status
Expand Down Expand Up @@ -36,7 +35,6 @@ import kotlinx.serialization.Serializable
* @param childFactory a factory function that creates new child instances.
* @return an observable [Value] of [ChildPages].
*/
@ExperimentalDecomposeApi
fun <Ctx : GenericComponentContext<Ctx>, C : Any, T : Any> Ctx.childPages(
source: NavigationSource<PagesNavigation.Event<C>>,
serializer: KSerializer<C>?,
Expand Down Expand Up @@ -107,7 +105,6 @@ private class SerializablePages<out C : Any>(
* @param childFactory a factory function that creates new child instances.
* @return an observable [Value] of [ChildPages].
*/
@ExperimentalDecomposeApi
fun <Ctx : GenericComponentContext<Ctx>, C : Any, T : Any> Ctx.childPages(
source: NavigationSource<PagesNavigation.Event<C>>,
initialPages: () -> Pages<C>,
Expand Down Expand Up @@ -180,9 +177,3 @@ private data class PagesNavState<out C : Any>(
)
}
}

@Serializable
private class PagesSavedNavState(
val configurations: List<SerializableContainer>,
val selectedIndex: Int,
)
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.arkivanov.decompose.router.pages

import com.arkivanov.decompose.ExperimentalDecomposeApi

/**
* Represents a state of Child Pages navigation model.
*
* @param items a list of child configurations, must be unique, can be empty.
* @param selectedIndex an index of the selected child configuration.
* Must be within the range of [items] indices if [items] is not empty, otherwise can be any number.
*/
@ExperimentalDecomposeApi
data class Pages<out C : Any>(
val items: List<C>,
val selectedIndex: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
package com.arkivanov.decompose.router.pages

import com.arkivanov.decompose.ExperimentalDecomposeApi
import com.arkivanov.decompose.router.children.NavigationSource
import com.arkivanov.decompose.router.pages.PagesNavigation.Event

/**
* Represents [PagesNavigator] and [PagesNavigationSource] at the same time.
*/
@ExperimentalDecomposeApi
interface PagesNavigation<C : Any> : PagesNavigator<C>, NavigationSource<Event<C>> {

class Event<C : Any>(
Expand All @@ -20,6 +18,5 @@ interface PagesNavigation<C : Any> : PagesNavigator<C>, NavigationSource<Event<C
* Returns a default implementation of [PagesNavigation].
* Broadcasts navigation events to all subscribed observers.
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigation(): PagesNavigation<C> =
DefaultPagesNavigation()
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
package com.arkivanov.decompose.router.pages

import com.arkivanov.decompose.ExperimentalDecomposeApi

@ExperimentalDecomposeApi
interface PagesNavigator<C : Any> {

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.arkivanov.decompose.router.pages

import com.arkivanov.decompose.ExperimentalDecomposeApi

/**
* A convenience method for [PagesNavigator.navigate].
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.navigate(transformer: (Pages<C>) -> Pages<C>) {
navigate(transformer = transformer, onComplete = { _, _ -> })
}
Expand All @@ -18,7 +15,6 @@ fun <C : Any> PagesNavigator<C>.navigate(transformer: (Pages<C>) -> Pages<C>) {
* Default value is `false`.
* @param onComplete called when the navigation is finished (either synchronously or asynchronously).
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.selectNext(
circular: Boolean = false,
onComplete: (newPages: Pages<C>, oldPages: Pages<C>) -> Unit = { _, _ -> },
Expand All @@ -39,7 +35,6 @@ fun <C : Any> PagesNavigator<C>.selectNext(
* Default value is `false`.
* @param onComplete called when the navigation is finished (either synchronously or asynchronously).
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.selectPrev(
circular: Boolean = false,
onComplete: (newPages: Pages<C>, oldPages: Pages<C>) -> Unit = { _, _ -> },
Expand All @@ -57,7 +52,6 @@ fun <C : Any> PagesNavigator<C>.selectPrev(
*
* @param onComplete called when the navigation is finished (either synchronously or asynchronously).
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.selectFirst(onComplete: (newPages: Pages<C>, oldPages: Pages<C>) -> Unit = { _, _ -> }) {
navigate(
transformer = { pages ->
Expand All @@ -72,7 +66,6 @@ fun <C : Any> PagesNavigator<C>.selectFirst(onComplete: (newPages: Pages<C>, old
*
* @param onComplete called when the navigation is finished (either synchronously or asynchronously).
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.selectLast(onComplete: (newPages: Pages<C>, oldPages: Pages<C>) -> Unit = { _, _ -> }) {
navigate(
transformer = { pages ->
Expand All @@ -88,7 +81,6 @@ fun <C : Any> PagesNavigator<C>.selectLast(onComplete: (newPages: Pages<C>, oldP
*
* @param onComplete called when the navigation is finished (either synchronously or asynchronously).
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.select(
index: Int,
onComplete: (newPages: Pages<C>, oldPages: Pages<C>) -> Unit = { _, _ -> },
Expand All @@ -104,7 +96,6 @@ fun <C : Any> PagesNavigator<C>.select(
*
* @param onComplete called when the navigation is finished (either synchronously or asynchronously).
*/
@ExperimentalDecomposeApi
fun <C : Any> PagesNavigator<C>.clear(onComplete: (newPages: Pages<C>, oldPages: Pages<C>) -> Unit = { _, _ -> }) {
navigate(
transformer = { Pages() },
Expand Down
18 changes: 9 additions & 9 deletions extensions-compose/api/android/extensions-compose.api
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ public final class com/arkivanov/decompose/extensions/compose/SubscribeAsStateKt
public static final fun subscribeAsState (Lcom/arkivanov/decompose/value/Value;Landroidx/compose/runtime/SnapshotMutationPolicy;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State;
}

public final class com/arkivanov/decompose/extensions/compose/pages/ComposableSingletons$PagesKt {
public static final field INSTANCE Lcom/arkivanov/decompose/extensions/compose/pages/ComposableSingletons$PagesKt;
public final class com/arkivanov/decompose/extensions/compose/pages/ChildPagesKt {
public static final fun ChildPages (Lcom/arkivanov/decompose/router/pages/ChildPages;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/arkivanov/decompose/extensions/compose/pages/PagesScrollAnimation;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;II)V
public static final fun ChildPages (Lcom/arkivanov/decompose/value/Value;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/arkivanov/decompose/extensions/compose/pages/PagesScrollAnimation;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;II)V
public static final fun defaultHorizontalPager ()Lkotlin/jvm/functions/Function6;
public static final fun defaultVerticalPager ()Lkotlin/jvm/functions/Function6;
}

public final class com/arkivanov/decompose/extensions/compose/pages/ComposableSingletons$ChildPagesKt {
public static final field INSTANCE Lcom/arkivanov/decompose/extensions/compose/pages/ComposableSingletons$ChildPagesKt;
public static field lambda-1 Lkotlin/jvm/functions/Function6;
public static field lambda-2 Lkotlin/jvm/functions/Function6;
public fun <init> ()V
public final fun getLambda-1$extensions_compose_release ()Lkotlin/jvm/functions/Function6;
public final fun getLambda-2$extensions_compose_release ()Lkotlin/jvm/functions/Function6;
}

public final class com/arkivanov/decompose/extensions/compose/pages/PagesKt {
public static final fun Pages (Lcom/arkivanov/decompose/router/pages/ChildPages;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/arkivanov/decompose/extensions/compose/pages/PagesScrollAnimation;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;II)V
public static final fun Pages (Lcom/arkivanov/decompose/value/Value;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/arkivanov/decompose/extensions/compose/pages/PagesScrollAnimation;Lkotlin/jvm/functions/Function6;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;II)V
public static final fun defaultHorizontalPager ()Lkotlin/jvm/functions/Function6;
public static final fun defaultVerticalPager ()Lkotlin/jvm/functions/Function6;
}

public abstract interface class com/arkivanov/decompose/extensions/compose/pages/PagesScrollAnimation {
}

Expand Down
4 changes: 2 additions & 2 deletions extensions-compose/api/extensions-compose.klib.api
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ final val com.arkivanov.decompose.extensions.compose.stack.animation/isFront //
final fun (com.arkivanov.decompose.extensions.compose.stack.animation/Direction).<get-isFront>(): kotlin/Boolean // com.arkivanov.decompose.extensions.compose.stack.animation/isFront.<get-isFront>|<get-isFront>@com.arkivanov.decompose.extensions.compose.stack.animation.Direction(){}[0]

final fun (com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimator).com.arkivanov.decompose.extensions.compose.stack.animation/plus(com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimator): com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimator // com.arkivanov.decompose.extensions.compose.stack.animation/plus|plus@com.arkivanov.decompose.extensions.compose.stack.animation.StackAnimator(com.arkivanov.decompose.extensions.compose.stack.animation.StackAnimator){}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.pages/Pages(com.arkivanov.decompose.router.pages/ChildPages<#A, #B>, kotlin/Function1<kotlin/Int, kotlin/Unit>, androidx.compose.ui/Modifier?, com.arkivanov.decompose.extensions.compose.pages/PagesScrollAnimation?, kotlin/Function6<androidx.compose.ui/Modifier, androidx.compose.foundation.pager/PagerState, kotlin/Function1<kotlin/Int, kotlin/Any>, kotlin/Function4<androidx.compose.foundation.pager/PagerScope, kotlin/Int, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, kotlin/Function1<com.arkivanov.decompose/Child<#A, #B>, kotlin/Any>?, kotlin/Function5<androidx.compose.foundation.pager/PagerScope, kotlin/Int, #B, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.arkivanov.decompose.extensions.compose.pages/Pages|Pages(com.arkivanov.decompose.router.pages.ChildPages<0:0,0:1>;kotlin.Function1<kotlin.Int,kotlin.Unit>;androidx.compose.ui.Modifier?;com.arkivanov.decompose.extensions.compose.pages.PagesScrollAnimation?;kotlin.Function6<androidx.compose.ui.Modifier,androidx.compose.foundation.pager.PagerState,kotlin.Function1<kotlin.Int,kotlin.Any>,kotlin.Function4<androidx.compose.foundation.pager.PagerScope,kotlin.Int,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;kotlin.Function1<com.arkivanov.decompose.Child<0:0,0:1>,kotlin.Any>?;kotlin.Function5<androidx.compose.foundation.pager.PagerScope,kotlin.Int,0:1,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){0§<kotlin.Any>;1§<kotlin.Any>}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.pages/Pages(com.arkivanov.decompose.value/Value<com.arkivanov.decompose.router.pages/ChildPages<#A, #B>>, kotlin/Function1<kotlin/Int, kotlin/Unit>, androidx.compose.ui/Modifier?, com.arkivanov.decompose.extensions.compose.pages/PagesScrollAnimation?, kotlin/Function6<androidx.compose.ui/Modifier, androidx.compose.foundation.pager/PagerState, kotlin/Function1<kotlin/Int, kotlin/Any>, kotlin/Function4<androidx.compose.foundation.pager/PagerScope, kotlin/Int, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, kotlin/Function1<com.arkivanov.decompose/Child<#A, #B>, kotlin/Any>?, kotlin/Function5<androidx.compose.foundation.pager/PagerScope, kotlin/Int, #B, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.arkivanov.decompose.extensions.compose.pages/Pages|Pages(com.arkivanov.decompose.value.Value<com.arkivanov.decompose.router.pages.ChildPages<0:0,0:1>>;kotlin.Function1<kotlin.Int,kotlin.Unit>;androidx.compose.ui.Modifier?;com.arkivanov.decompose.extensions.compose.pages.PagesScrollAnimation?;kotlin.Function6<androidx.compose.ui.Modifier,androidx.compose.foundation.pager.PagerState,kotlin.Function1<kotlin.Int,kotlin.Any>,kotlin.Function4<androidx.compose.foundation.pager.PagerScope,kotlin.Int,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;kotlin.Function1<com.arkivanov.decompose.Child<0:0,0:1>,kotlin.Any>?;kotlin.Function5<androidx.compose.foundation.pager.PagerScope,kotlin.Int,0:1,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){0§<kotlin.Any>;1§<kotlin.Any>}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.pages/ChildPages(com.arkivanov.decompose.router.pages/ChildPages<#A, #B>, kotlin/Function1<kotlin/Int, kotlin/Unit>, androidx.compose.ui/Modifier?, com.arkivanov.decompose.extensions.compose.pages/PagesScrollAnimation?, kotlin/Function6<androidx.compose.ui/Modifier, androidx.compose.foundation.pager/PagerState, kotlin/Function1<kotlin/Int, kotlin/Any>, kotlin/Function4<androidx.compose.foundation.pager/PagerScope, kotlin/Int, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, kotlin/Function1<com.arkivanov.decompose/Child<#A, #B>, kotlin/Any>?, kotlin/Function5<androidx.compose.foundation.pager/PagerScope, kotlin/Int, #B, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.arkivanov.decompose.extensions.compose.pages/ChildPages|ChildPages(com.arkivanov.decompose.router.pages.ChildPages<0:0,0:1>;kotlin.Function1<kotlin.Int,kotlin.Unit>;androidx.compose.ui.Modifier?;com.arkivanov.decompose.extensions.compose.pages.PagesScrollAnimation?;kotlin.Function6<androidx.compose.ui.Modifier,androidx.compose.foundation.pager.PagerState,kotlin.Function1<kotlin.Int,kotlin.Any>,kotlin.Function4<androidx.compose.foundation.pager.PagerScope,kotlin.Int,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;kotlin.Function1<com.arkivanov.decompose.Child<0:0,0:1>,kotlin.Any>?;kotlin.Function5<androidx.compose.foundation.pager.PagerScope,kotlin.Int,0:1,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){0§<kotlin.Any>;1§<kotlin.Any>}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.pages/ChildPages(com.arkivanov.decompose.value/Value<com.arkivanov.decompose.router.pages/ChildPages<#A, #B>>, kotlin/Function1<kotlin/Int, kotlin/Unit>, androidx.compose.ui/Modifier?, com.arkivanov.decompose.extensions.compose.pages/PagesScrollAnimation?, kotlin/Function6<androidx.compose.ui/Modifier, androidx.compose.foundation.pager/PagerState, kotlin/Function1<kotlin/Int, kotlin/Any>, kotlin/Function4<androidx.compose.foundation.pager/PagerScope, kotlin/Int, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>?, kotlin/Function1<com.arkivanov.decompose/Child<#A, #B>, kotlin/Any>?, kotlin/Function5<androidx.compose.foundation.pager/PagerScope, kotlin/Int, #B, androidx.compose.runtime/Composer, kotlin/Int, kotlin/Unit>, androidx.compose.runtime/Composer?, kotlin/Int, kotlin/Int) // com.arkivanov.decompose.extensions.compose.pages/ChildPages|ChildPages(com.arkivanov.decompose.value.Value<com.arkivanov.decompose.router.pages.ChildPages<0:0,0:1>>;kotlin.Function1<kotlin.Int,kotlin.Unit>;androidx.compose.ui.Modifier?;com.arkivanov.decompose.extensions.compose.pages.PagesScrollAnimation?;kotlin.Function6<androidx.compose.ui.Modifier,androidx.compose.foundation.pager.PagerState,kotlin.Function1<kotlin.Int,kotlin.Any>,kotlin.Function4<androidx.compose.foundation.pager.PagerScope,kotlin.Int,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>?;kotlin.Function1<com.arkivanov.decompose.Child<0:0,0:1>,kotlin.Any>?;kotlin.Function5<androidx.compose.foundation.pager.PagerScope,kotlin.Int,0:1,androidx.compose.runtime.Composer,kotlin.Int,kotlin.Unit>;androidx.compose.runtime.Composer?;kotlin.Int;kotlin.Int){0§<kotlin.Any>;1§<kotlin.Any>}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback/predictiveBackAnimation(com.arkivanov.essenty.backhandler/BackHandler, com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimation<#A, #B>? = ..., kotlin/Function3<com.arkivanov.essenty.backhandler/BackEvent, com.arkivanov.decompose/Child.Created<#A, #B>, com.arkivanov.decompose/Child.Created<#A, #B>, com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback/PredictiveBackAnimatable> = ..., kotlin/Function0<kotlin/Unit>): com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimation<#A, #B> // com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback/predictiveBackAnimation|predictiveBackAnimation(com.arkivanov.essenty.backhandler.BackHandler;com.arkivanov.decompose.extensions.compose.stack.animation.StackAnimation<0:0,0:1>?;kotlin.Function3<com.arkivanov.essenty.backhandler.BackEvent,com.arkivanov.decompose.Child.Created<0:0,0:1>,com.arkivanov.decompose.Child.Created<0:0,0:1>,com.arkivanov.decompose.extensions.compose.stack.animation.predictiveback.PredictiveBackAnimatable>;kotlin.Function0<kotlin.Unit>){0§<kotlin.Any>;1§<kotlin.Any>}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.stack.animation/stackAnimation(com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimator = ..., kotlin/Boolean = ...): com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimation<#A, #B> // com.arkivanov.decompose.extensions.compose.stack.animation/stackAnimation|stackAnimation(com.arkivanov.decompose.extensions.compose.stack.animation.StackAnimator;kotlin.Boolean){0§<kotlin.Any>;1§<kotlin.Any>}[0]
final fun <#A: kotlin/Any, #B: kotlin/Any> com.arkivanov.decompose.extensions.compose.stack.animation/stackAnimation(kotlin/Boolean = ..., kotlin/Function1<com.arkivanov.decompose/Child.Created<#A, #B>, com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimator?>): com.arkivanov.decompose.extensions.compose.stack.animation/StackAnimation<#A, #B> // com.arkivanov.decompose.extensions.compose.stack.animation/stackAnimation|stackAnimation(kotlin.Boolean;kotlin.Function1<com.arkivanov.decompose.Child.Created<0:0,0:1>,com.arkivanov.decompose.extensions.compose.stack.animation.StackAnimator?>){0§<kotlin.Any>;1§<kotlin.Any>}[0]
Expand Down
Loading

0 comments on commit 2a466cc

Please sign in to comment.