diff --git a/.github/workflows/android-ci.yml b/.github/workflows/android-ci.yml index 5a4e56c9..f3e8862f 100644 --- a/.github/workflows/android-ci.yml +++ b/.github/workflows/android-ci.yml @@ -21,11 +21,11 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: Setup JDK 17 + - name: Setup JDK 21 uses: actions/setup-java@v4 with: distribution: 'corretto' - java-version: 17 + java-version: 21 - name: Setup Android SDK uses: android-actions/setup-android@v2 @@ -50,3 +50,39 @@ jobs: - name: Run build run: ./gradlew buildDebug --stacktrace + + stability_check: + name: Compose Stability Check + runs-on: ubuntu-latest + + if: ${{ !contains(github.event.pull_request.labels.*.name, 'skip-ci') }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'corretto' + java-version: 21 + + - name: Setup Android SDK + uses: android-actions/setup-android@v2 + + - name: Setup Gradle + uses: gradle/gradle-build-action@v2 + with: + gradle-home-cache-cleanup: true + + - name: Generate local.properties + run: echo '${{ secrets.LOCAL_PROPERTIES }}' | base64 -d > ./local.properties + + - name: Generate keystore.properties + run: echo '${{ secrets.KEYSTORE_PROPERTIES }}' | base64 -d > ./keystore.properties + + - name: Generate google-services.json + run: echo '${{ secrets.GOOGLE_SERVICES }}' | base64 -d > ./app/google-services.json + + - name: Compose Stability Check + run: ./gradlew stabilityCheck diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 49baa4fb..3790c539 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -59,6 +59,10 @@ android { } } +composeStabilityAnalyzer { + enabled.set(true) +} + ksp { arg("circuit.codegen.mode", "hilt") } diff --git a/app/stability/app.stability b/app/stability/app.stability new file mode 100644 index 00000000..dc1f99ee --- /dev/null +++ b/app/stability/app.stability @@ -0,0 +1,21 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :app:stabilityDump + +@Composable +public fun com.ninecraft.booket.di.CrossFadeNavDecorator.Decoration(targetState: com.slack.circuit.foundation.NavigatorDefaults.DefaultDecorator.DefaultAnimatedState, innerContent: @[Composable] androidx.compose.runtime.internal.ComposableFunction1): kotlin.Unit + skippable: false + restartable: true + params: + - targetState: RUNTIME (requires runtime check) + - innerContent: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.di.CrossFadeNavDecorator.updateTransition(args: kotlinx.collections.immutable.ImmutableList): androidx.compose.animation.core.Transition> + skippable: true + restartable: true + params: + - args: STABLE (known stable type) + diff --git a/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index 310243b4..7c90de29 100644 --- a/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -12,6 +12,7 @@ internal class AndroidApplicationComposeConventionPlugin : Plugin { applyPlugins( Plugins.ANDROID_APPLICATION, Plugins.KOTLIN_COMPOSE, + Plugins.COMPOSE_STABILITY_ANALYZER, ) extensions.configure { diff --git a/core/common/stability/common.stability b/core/common/stability/common.stability new file mode 100644 index 00000000..6de75f09 --- /dev/null +++ b/core/common/stability/common.stability @@ -0,0 +1,33 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :common:stabilityDump + +@Composable +public fun com.ninecraft.booket.core.common.utils.HighlightedText(fullText: kotlin.String, highlightText: kotlin.String, highlightColor: androidx.compose.ui.graphics.Color): androidx.compose.ui.text.AnnotatedString + skippable: true + restartable: true + params: + - fullText: STABLE (String is immutable) + - highlightText: STABLE (String is immutable) + - highlightColor: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.core.common.utils.UiText.DirectString.asString(): kotlin.String + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.common.utils.UiText.StringResource.asString(): kotlin.String + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.common.utils.UiText.asString(): kotlin.String + skippable: true + restartable: true + params: + diff --git a/core/designsystem/stability/designsystem.stability b/core/designsystem/stability/designsystem.stability new file mode 100644 index 00000000..e3399e9a --- /dev/null +++ b/core/designsystem/stability/designsystem.stability @@ -0,0 +1,316 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :designsystem:stabilityDump + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.NetworkImage(imageUrl: kotlin.String, contentDescription: kotlin.String, modifier: androidx.compose.ui.Modifier, placeholder: androidx.compose.ui.graphics.painter.Painter?, contentScale: androidx.compose.ui.layout.ContentScale): kotlin.Unit + skippable: false + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - contentDescription: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - placeholder: RUNTIME (requires runtime check) + - contentScale: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.NetworkImagePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.RecordProgressBar(currentStep: com.ninecraft.booket.core.designsystem.RecordStep, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - currentStep: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.ReedDivider(modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.ReedDividerPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.ResourceImage(imageRes: kotlin.Int, contentDescription: kotlin.String, modifier: androidx.compose.ui.Modifier, placeholder: androidx.compose.ui.graphics.painter.Painter?, contentScale: androidx.compose.ui.layout.ContentScale): kotlin.Unit + skippable: false + restartable: true + params: + - imageRes: STABLE (primitive type) + - contentDescription: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - placeholder: RUNTIME (requires runtime check) + - contentScale: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.ResourceImagePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.(): com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButton(onClick: kotlin.Function0, text: kotlin.String, sizeStyle: com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle, colorStyle: com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle, modifier: androidx.compose.ui.Modifier, enabled: kotlin.Boolean, leadingIcon: @[Composable] androidx.compose.runtime.internal.ComposableFunction0?, trailingIcon: @[Composable] androidx.compose.runtime.internal.ComposableFunction0?, multipleEventsCutterEnabled: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - text: STABLE (String is immutable) + - sizeStyle: STABLE + - colorStyle: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + - enabled: STABLE (primitive type) + - leadingIcon: STABLE (composable function type) + - trailingIcon: STABLE (composable function type) + - multipleEventsCutterEnabled: STABLE (primitive type) + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.borderStroke(): androidx.compose.foundation.BorderStroke? + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.containerColor(isPressed: kotlin.Boolean): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + - isPressed: STABLE (primitive type) + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.contentColor(): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.disabledContainerColor(): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle.disabledContentColor(): androidx.compose.ui.graphics.Color + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedButtonDisabledPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedLargeButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedMediumButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedSmallButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.button.ReedTextButton(onClick: kotlin.Function0, text: kotlin.String, sizeStyle: com.ninecraft.booket.core.designsystem.component.button.ButtonSizeStyle, colorStyle: com.ninecraft.booket.core.designsystem.component.button.ReedButtonColorStyle, modifier: androidx.compose.ui.Modifier, enabled: kotlin.Boolean, multipleEventsCutterEnabled: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - text: STABLE (String is immutable) + - sizeStyle: STABLE + - colorStyle: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + - enabled: STABLE (primitive type) + - multipleEventsCutterEnabled: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.button.ReedTextButtonPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.checkbox.CircleCheckBox(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.checkbox.CircleCheckboxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.checkbox.SquareCheckBox(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.checkbox.SquareCheckboxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCheckBox(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCheckBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecordTextField(recordState: androidx.compose.foundation.text.input.TextFieldState, recordHintRes: kotlin.Int, modifier: androidx.compose.ui.Modifier, inputTransformation: androidx.compose.foundation.text.input.InputTransformation?, keyboardOptions: androidx.compose.foundation.text.KeyboardOptions, lineLimits: androidx.compose.foundation.text.input.TextFieldLineLimits, isError: kotlin.Boolean, errorMessage: kotlin.String, onClear: kotlin.Function0?, onNext: kotlin.Function0, backgroundColor: androidx.compose.ui.graphics.Color, textColor: androidx.compose.ui.graphics.Color, cornerShape: androidx.compose.foundation.shape.RoundedCornerShape, borderStroke: androidx.compose.foundation.BorderStroke): kotlin.Unit + skippable: false + restartable: true + params: + - recordState: STABLE (marked @Stable or @Immutable) + - recordHintRes: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + - inputTransformation: STABLE (marked @Stable or @Immutable) + - keyboardOptions: STABLE (marked @Stable or @Immutable) + - lineLimits: STABLE (marked @Stable or @Immutable) + - isError: STABLE (primitive type) + - errorMessage: STABLE (String is immutable) + - onClear: STABLE (function type) + - onNext: STABLE (function type) + - backgroundColor: STABLE (marked @Stable or @Immutable) + - textColor: STABLE (marked @Stable or @Immutable) + - cornerShape: RUNTIME (requires runtime check) + - borderStroke: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.textfield.ReedRecordTextFieldPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextField(queryState: androidx.compose.foundation.text.input.TextFieldState, queryHintRes: kotlin.Int, onSearch: kotlin.Function1, onClear: kotlin.Function0, modifier: androidx.compose.ui.Modifier, backgroundColor: androidx.compose.ui.graphics.Color, textColor: androidx.compose.ui.graphics.Color, cornerShape: androidx.compose.foundation.shape.RoundedCornerShape, borderStroke: androidx.compose.foundation.BorderStroke?, searchIconTint: androidx.compose.ui.graphics.Color): kotlin.Unit + skippable: false + restartable: true + params: + - queryState: STABLE (marked @Stable or @Immutable) + - queryHintRes: STABLE (primitive type) + - onSearch: STABLE (function type) + - onClear: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - backgroundColor: STABLE (marked @Stable or @Immutable) + - textColor: STABLE (marked @Stable or @Immutable) + - cornerShape: RUNTIME (requires runtime check) + - borderStroke: STABLE (marked @Stable or @Immutable) + - searchIconTint: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextFieldPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme(content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - content: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedBorder + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedColorScheme + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedRadius + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedSpacing + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.(): com.ninecraft.booket.core.designsystem.theme.ReedTypography + skippable: true + restartable: true + params: + diff --git a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt index 6805f4fc..b0798ffd 100644 --- a/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt +++ b/core/ui/src/main/kotlin/com/ninecraft/booket/core/ui/component/InfinityLazyColumn.kt @@ -35,10 +35,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.skydoves.compose.effects.RememberedEffect +import com.skydoves.compose.stability.runtime.TraceRecomposition // 기기에서 평균적으로 한 화면에 보이는 아이템 개수 private const val LIMIT_COUNT = 6 +@TraceRecomposition @Composable fun InfinityLazyColumn( modifier: Modifier = Modifier, diff --git a/core/ui/stability/ui.stability b/core/ui/stability/ui.stability new file mode 100644 index 00000000..44d5e658 --- /dev/null +++ b/core/ui/stability/ui.stability @@ -0,0 +1,199 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :ui:stabilityDump + +@Composable +public fun com.ninecraft.booket.core.ui.ReedScaffold(modifier: androidx.compose.ui.Modifier, topBar: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, bottomBar: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, snackbarHost: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, floatingActionButton: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, containerColor: androidx.compose.ui.graphics.Color, contentWindowInsets: androidx.compose.foundation.layout.WindowInsets, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction1): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - topBar: STABLE (composable function type) + - bottomBar: STABLE (composable function type) + - snackbarHost: STABLE (composable function type) + - floatingActionButton: STABLE (composable function type) + - containerColor: STABLE (marked @Stable or @Immutable) + - contentWindowInsets: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.InfinityLazyColumn(modifier: androidx.compose.ui.Modifier, state: androidx.compose.foundation.lazy.LazyListState, contentPadding: androidx.compose.foundation.layout.PaddingValues, reverseLayout: kotlin.Boolean, verticalArrangement: androidx.compose.foundation.layout.Arrangement.Vertical, horizontalAlignment: androidx.compose.ui.Alignment.Horizontal, flingBehavior: androidx.compose.foundation.gestures.FlingBehavior, userScrollEnabled: kotlin.Boolean, loadMoreLimitCount: kotlin.Int, loadMore: kotlin.Function0, content: @[ExtensionFunctionType] kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - state: STABLE (marked @Stable or @Immutable) + - contentPadding: STABLE (marked @Stable or @Immutable) + - reverseLayout: STABLE (primitive type) + - verticalArrangement: STABLE (marked @Stable or @Immutable) + - horizontalAlignment: STABLE (marked @Stable or @Immutable) + - flingBehavior: STABLE (marked @Stable or @Immutable) + - userScrollEnabled: STABLE (primitive type) + - loadMoreLimitCount: STABLE (primitive type) + - loadMore: STABLE (function type) + - content: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.InfinityLazyColumnPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.LoadStateFooter(footerState: com.ninecraft.booket.core.ui.component.FooterState, onRetryClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - footerState: STABLE (marked @Stable or @Immutable) + - onRetryClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedBackTopAppBar(modifier: androidx.compose.ui.Modifier, isDark: kotlin.Boolean, title: kotlin.String, onBackClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - isDark: STABLE (primitive type) + - title: STABLE (String is immutable) + - onBackClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedBackTopAppBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedBottomSheet(onDismissRequest: kotlin.Function0, modifier: androidx.compose.ui.Modifier, sheetState: androidx.compose.material3.SheetState, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - sheetState: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedChoiceDialogPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedCloseTopAppBar(modifier: androidx.compose.ui.Modifier, isDark: kotlin.Boolean, title: kotlin.String, onClose: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - isDark: STABLE (primitive type) + - title: STABLE (String is immutable) + - onClose: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedCloseTopAppBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedConfirmDialogPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedDialog(confirmButtonText: kotlin.String, onConfirmRequest: kotlin.Function0, modifier: androidx.compose.ui.Modifier, title: kotlin.String?, description: kotlin.String?, dismissButtonText: kotlin.String?, onDismissRequest: kotlin.Function0, headerContent: @[Composable] androidx.compose.runtime.internal.ComposableFunction0?): kotlin.Unit + skippable: true + restartable: true + params: + - confirmButtonText: STABLE (String is immutable) + - onConfirmRequest: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - title: STABLE + - description: STABLE + - dismissButtonText: STABLE + - onDismissRequest: STABLE (function type) + - headerContent: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedErrorUi(errorType: com.ninecraft.booket.core.common.utils.ErrorType, onRetryClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - errorType: STABLE (marked @Stable or @Immutable) + - onRetryClick: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedFullScreen(modifier: androidx.compose.ui.Modifier, backgroundColor: androidx.compose.ui.graphics.Color, content: @[Composable] @[ExtensionFunctionType] androidx.compose.runtime.internal.ComposableFunction1): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - backgroundColor: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedLoadingIndicator(modifier: androidx.compose.ui.Modifier, delayMillis: kotlin.Long): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - delayMillis: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedLoadingIndicatorPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedNetworkErrorUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedServerErrorUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.core.ui.component.ReedTopAppBar(modifier: androidx.compose.ui.Modifier, isDark: kotlin.Boolean, title: kotlin.String, startIconRes: kotlin.Int?, startIconDescription: kotlin.String, startIconOnClick: kotlin.Function0, endIconRes: kotlin.Int?, endIconDescription: kotlin.String, endIconOnClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - isDark: STABLE (primitive type) + - title: STABLE (String is immutable) + - startIconRes: STABLE + - startIconDescription: STABLE (String is immutable) + - startIconOnClick: STABLE (function type) + - endIconRes: STABLE + - endIconDescription: STABLE (String is immutable) + - endIconOnClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.core.ui.component.ReedTopAppBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.core.ui.component.onLoadMore(limitCount: kotlin.Int, loadOnBottom: kotlin.Boolean, action: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - limitCount: STABLE (primitive type) + - loadOnBottom: STABLE (primitive type) + - action: STABLE (function type) + diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt index bece26b4..6ce7d6f7 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt @@ -54,12 +54,14 @@ import com.ninecraft.booket.feature.detail.book.component.RecordItem import com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet import com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet import com.ninecraft.booket.feature.screens.BookDetailScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @CircuitInject(BookDetailScreen::class, ActivityRetainedComponent::class) @Composable @@ -195,6 +197,7 @@ internal fun BookDetailUi( } } +@TraceRecomposition @Composable internal fun BookDetailContent( state: BookDetailUiState, diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt index 35b6554f..7d7789ee 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/BookUpdateBottomSheet.kt @@ -37,10 +37,12 @@ import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedBottomSheet import com.ninecraft.booket.feature.detail.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toImmutableList import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable internal fun BookUpdateBottomSheet( diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt index 57c25d97..7dfdefb2 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/ReadingRecordsHeader.kt @@ -14,11 +14,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.vectorResource +import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.detail.R import com.ninecraft.booket.feature.detail.book.RecordSort +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable internal fun ReadingRecordsHeader( totalCount: Int, @@ -62,3 +65,15 @@ internal fun ReadingRecordsHeader( } } } + +@ComponentPreview +@Composable +private fun ReadingRecordsHeaderPreview() { + ReedTheme { + ReadingRecordsHeader( + totalCount = 4, + currentRecordSort = RecordSort.PAGE_NUMBER_ASC, + onReadingRecordClick = {}, + ) + } +} diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt index 97e39ca7..49144940 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/card/RecordCardUi.kt @@ -36,10 +36,12 @@ import com.ninecraft.booket.core.ui.component.ReedTopAppBar import com.ninecraft.booket.feature.detail.R import com.ninecraft.booket.feature.detail.card.component.RecordCard import com.ninecraft.booket.feature.screens.RecordCardScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(RecordCardScreen::class, ActivityRetainedComponent::class) @Composable internal fun RecordCardUi( diff --git a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt index a8f0b2f0..93f671da 100644 --- a/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt +++ b/feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailUi.kt @@ -31,11 +31,13 @@ import com.ninecraft.booket.feature.detail.record.component.QuoteItem import com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet import com.ninecraft.booket.feature.detail.record.component.ReviewItem import com.ninecraft.booket.feature.screens.RecordDetailScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @CircuitInject(RecordDetailScreen::class, ActivityRetainedComponent::class) @Composable @@ -116,6 +118,7 @@ internal fun RecordDetailUi( } } +@TraceRecomposition @Composable private fun RecordDetailContent( state: RecordDetailUiState, diff --git a/feature/detail/stability/detail.stability b/feature/detail/stability/detail.stability new file mode 100644 index 00000000..eb8cb1a8 --- /dev/null +++ b/feature/detail/stability/detail.stability @@ -0,0 +1,380 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :detail:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.BookDetailContent(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier, lazyListState: androidx.compose.foundation.lazy.LazyListState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - lazyListState: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.detail.book.BookDetailPresenter.present(): com.ninecraft.booket.feature.detail.book.BookDetailUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.BookDetailPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.BookDetailUi(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.HandleBookDetailSideEffects(state: com.ninecraft.booket.feature.detail.book.BookDetailUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.BookItem(bookDetail: com.ninecraft.booket.core.model.BookDetailModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - bookDetail: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.detail.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, bookStatuses: kotlinx.collections.immutable.ImmutableList, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, selectedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onItemSelected: kotlin.Function1, onBookUpdateButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - bookStatuses: STABLE (known stable type) + - currentBookStatus: STABLE + - selectedBookStatus: STABLE + - onItemSelected: STABLE (function type) + - onBookUpdateButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.BookUpdateBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.ChoiceBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.CollectedSeedPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.CollectedSeeds(seedsStats: kotlinx.collections.immutable.ImmutableList, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - seedsStats: STABLE (known stable type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.DetailMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onDeleteBookClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onDeleteBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.DetailMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - iconResId: STABLE (primitive type) + - iconDescription: STABLE (String is immutable) + - label: STABLE (String is immutable) + - color: STABLE (marked @Stable or @Immutable) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.EmotionAnalysisResultText(emotions: kotlinx.collections.immutable.ImmutableList, brandColor: androidx.compose.ui.graphics.Color, secondaryColor: androidx.compose.ui.graphics.Color, emotionTextStyle: androidx.compose.ui.text.TextStyle, regularTextStyle: androidx.compose.ui.text.TextStyle): androidx.compose.ui.text.AnnotatedString? + skippable: true + restartable: true + params: + - emotions: STABLE (known stable type) + - brandColor: STABLE (marked @Stable or @Immutable) + - secondaryColor: STABLE (marked @Stable or @Immutable) + - emotionTextStyle: STABLE (marked @Stable or @Immutable) + - regularTextStyle: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.EmotionTextAllCasesPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeader(totalCount: kotlin.Int, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onReadingRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - totalCount: STABLE (primitive type) + - currentRecordSort: STABLE + - onReadingRecordClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.ReadingRecordsHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.RecordItem(recordInfo: com.ninecraft.booket.core.model.ReadingRecordModel, onRecordMenuClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - recordInfo: STABLE (marked @Stable or @Immutable) + - onRecordMenuClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.RecordItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, recordSortItems: kotlinx.collections.immutable.ImmutableList, currentRecordSort: com.ninecraft.booket.feature.detail.book.RecordSort, onItemSelected: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - recordSortItems: STABLE (known stable type) + - currentRecordSort: STABLE + - onItemSelected: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.RecordSortBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.detail.book.component.RecordSortItem(item: com.ninecraft.booket.feature.detail.book.RecordSort, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.book.component.SeedItem(emotion: com.ninecraft.booket.core.model.EmotionModel, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotion: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.book.component.SeedItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.HandleRecordCardSideEffects(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, recordCardGraphicsLayer: androidx.compose.ui.graphics.layer.GraphicsLayer, eventSink: kotlin.Function1): kotlin.Unit + skippable: false + restartable: true + params: + - state: STABLE + - recordCardGraphicsLayer: UNSTABLE (has mutable properties or unstable members) + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.detail.card.RecordCardPresenter.present(): com.ninecraft.booket.feature.detail.card.RecordCardUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.RecordCardUi(state: com.ninecraft.booket.feature.detail.card.RecordCardUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.card.RecordCardUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.card.component.RecordCard(quote: kotlin.String, bookTitle: kotlin.String, emotionTag: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - quote: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - emotionTag: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.card.component.RecordCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.HandleRecordDetailSideEffects(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +private fun com.ninecraft.booket.feature.detail.record.RecordDetailContent(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.detail.record.RecordDetailPresenter.present(): com.ninecraft.booket.feature.detail.record.RecordDetailUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.RecordDetailUi(state: com.ninecraft.booket.feature.detail.record.RecordDetailUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.ReviewDetailPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - author: STABLE (String is immutable) + - publisher: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.ChoiceBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.QuoteBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.QuoteItem(quote: kotlin.String, page: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - quote: STABLE (String is immutable) + - page: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.RecordMenuBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onShareRecordClick: kotlin.Function0, onEditRecordClick: kotlin.Function0, onDeleteRecordClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onShareRecordClick: STABLE (function type) + - onEditRecordClick: STABLE (function type) + - onDeleteRecordClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.RecordMenuItem(iconResId: kotlin.Int, iconDescription: kotlin.String, label: kotlin.String, color: androidx.compose.ui.graphics.Color, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - iconResId: STABLE (primitive type) + - iconDescription: STABLE (String is immutable) + - label: STABLE (String is immutable) + - color: STABLE (marked @Stable or @Immutable) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.detail.record.component.ReviewBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.detail.record.component.ReviewItem(emotion: kotlin.String, createdAt: kotlin.String, review: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotion: STABLE (String is immutable) + - createdAt: STABLE (String is immutable) + - review: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt index 0ddc68c2..a9ff1ec8 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/emotion/EmotionEditUi.kt @@ -36,10 +36,12 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.feature.edit.R import com.ninecraft.booket.feature.screens.EmotionEditScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toPersistentList +@TraceRecomposition @CircuitInject(EmotionEditScreen::class, ActivityRetainedComponent::class) @Composable internal fun EmotionEditUi( @@ -65,6 +67,7 @@ internal fun EmotionEditUi( } } +@TraceRecomposition @Composable private fun EmotionEditContent( state: EmotionEditUiState, diff --git a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt index 9f1257eb..84ee03c6 100644 --- a/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt +++ b/feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt @@ -5,14 +5,13 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.exclude import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.exclude import androidx.compose.foundation.layout.ime import androidx.compose.foundation.layout.imePadding -import androidx.compose.material3.ScaffoldDefaults import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState @@ -21,6 +20,7 @@ import androidx.compose.foundation.text.input.TextFieldLineLimits import androidx.compose.foundation.verticalScroll import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon +import androidx.compose.material3.ScaffoldDefaults import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment @@ -45,10 +45,12 @@ import com.ninecraft.booket.feature.edit.R import com.ninecraft.booket.feature.edit.record.component.BookItem import com.ninecraft.booket.feature.screens.RecordEditScreen import com.ninecraft.booket.feature.screens.arguments.RecordEditArgs +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(RecordEditScreen::class, ActivityRetainedComponent::class) @Composable internal fun RecordEditUi( @@ -83,6 +85,7 @@ internal fun RecordEditUi( } } +@TraceRecomposition @Composable private fun ColumnScope.RecordEditContent(state: RecordEditUiState) { Column( diff --git a/feature/edit/stability/edit.stability b/feature/edit/stability/edit.stability new file mode 100644 index 00000000..c3591cda --- /dev/null +++ b/feature/edit/stability/edit.stability @@ -0,0 +1,95 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :edit:stabilityDump + +@Composable +private fun com.ninecraft.booket.feature.edit.emotion.EmotionEditContent(state: com.ninecraft.booket.feature.edit.emotion.EmotionEditUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.edit.emotion.EmotionEditPresenter.present(): com.ninecraft.booket.feature.edit.emotion.EmotionEditUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.edit.emotion.EmotionEditUi(state: com.ninecraft.booket.feature.edit.emotion.EmotionEditUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.edit.emotion.EmotionEditUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.edit.emotion.EmotionItem(emotionTag: com.ninecraft.booket.core.designsystem.EmotionTag, onClick: kotlin.Function0, isSelected: kotlin.Boolean, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotionTag: STABLE + - onClick: STABLE (function type) + - isSelected: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.edit.record.HandleRecordEditSideEffects(state: com.ninecraft.booket.feature.edit.record.RecordEditUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +private fun com.ninecraft.booket.feature.edit.record.RecordEditContent(state: com.ninecraft.booket.feature.edit.record.RecordEditUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.edit.record.RecordEditPresenter.present(): com.ninecraft.booket.feature.edit.record.RecordEditUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.edit.record.RecordEditUi(state: com.ninecraft.booket.feature.edit.record.RecordEditUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.edit.record.RecordEditUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.edit.record.component.BookItem(imageUrl: kotlin.String, bookTitle: kotlin.String, author: kotlin.String, publisher: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageUrl: STABLE (String is immutable) + - bookTitle: STABLE (String is immutable) + - author: STABLE (String is immutable) + - publisher: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.edit.record.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt index 72624840..f1858302 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/HomeUi.kt @@ -47,10 +47,12 @@ import com.ninecraft.booket.feature.home.component.HomeHeader import com.ninecraft.booket.feature.screens.HomeScreen import com.ninecraft.booket.feature.screens.component.MainBottomBar import com.ninecraft.booket.feature.screens.component.MainTab +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList +@TraceRecomposition @CircuitInject(HomeScreen::class, ActivityRetainedComponent::class) @Composable internal fun HomeUi( diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt index 3b140709..678c2052 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeBanner.kt @@ -29,8 +29,10 @@ import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.HomeBg import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.home.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable fun HomeBanner( onBookRegisterClick: () -> Unit, diff --git a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt index 72835dab..a193a689 100644 --- a/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt +++ b/feature/home/src/main/kotlin/com/ninecraft/booket/feature/home/component/HomeHeader.kt @@ -17,10 +17,10 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.vectorResource import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.ComponentPreview -import com.ninecraft.booket.core.designsystem.R as designR import com.ninecraft.booket.core.designsystem.theme.HomeBg import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.home.R +import com.ninecraft.booket.core.designsystem.R as designR @Composable fun HomeHeader( diff --git a/feature/home/stability/home.stability b/feature/home/stability/home.stability new file mode 100644 index 00000000..c66b0bb9 --- /dev/null +++ b/feature/home/stability/home.stability @@ -0,0 +1,99 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :home:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.home.HandleHomeSideEffects(state: com.ninecraft.booket.feature.home.HomeUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +internal fun com.ninecraft.booket.feature.home.HomeContent(state: com.ninecraft.booket.feature.home.HomeUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.home.HomePresenter.present(): com.ninecraft.booket.feature.home.HomeUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.home.HomePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.home.HomeUi(state: com.ninecraft.booket.feature.home.HomeUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.home.component.BookCard(recentBookInfo: com.ninecraft.booket.core.model.RecentBookModel, onBookDetailClick: kotlin.Function0, onRecordButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - recentBookInfo: STABLE (marked @Stable or @Immutable) + - onBookDetailClick: STABLE (function type) + - onRecordButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.BookCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.home.component.EmptyBookCard(onBookRegisterClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onBookRegisterClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.EmptyBookCardPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.home.component.HomeBanner(onBookRegisterClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onBookRegisterClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.HomeBannerPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.home.component.HomeHeader(onSettingsClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onSettingsClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.home.component.HomeHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt index e016bc50..aac44e11 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUi.kt @@ -34,11 +34,13 @@ import com.ninecraft.booket.feature.library.component.LibraryHeader import com.ninecraft.booket.feature.screens.LibraryScreen import com.ninecraft.booket.feature.screens.component.MainBottomBar import com.ninecraft.booket.feature.screens.component.MainTab +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList +@TraceRecomposition @CircuitInject(LibraryScreen::class, ActivityRetainedComponent::class) @Composable internal fun LibraryUi( @@ -84,6 +86,7 @@ internal fun LibraryUi( } } +@TraceRecomposition @Composable internal fun LibraryContent( state: LibraryUiState, @@ -187,6 +190,7 @@ internal fun LibraryContent( } } +@TraceRecomposition @Composable private fun EmptyResult() { Box( diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt index 0e9f1a65..08236f8d 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChip.kt @@ -20,7 +20,9 @@ import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.library.LibraryFilterOption +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable fun FilterChip( option: LibraryFilterOption, diff --git a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt index 6f7c2213..c0b0a975 100644 --- a/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt +++ b/feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/component/FilterChipGroup.kt @@ -13,9 +13,11 @@ import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.feature.library.LibraryFilterChip import com.ninecraft.booket.feature.library.LibraryFilterOption +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList +@TraceRecomposition @Composable fun FilterChipGroup( filterList: ImmutableList, diff --git a/feature/library/stability/library.stability b/feature/library/stability/library.stability new file mode 100644 index 00000000..edab8a55 --- /dev/null +++ b/feature/library/stability/library.stability @@ -0,0 +1,111 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :library:stabilityDump + +@Composable +private fun com.ninecraft.booket.feature.library.EmptyResult(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.library.HandleLibrarySideEffects(state: com.ninecraft.booket.feature.library.LibraryUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.library.LibraryContent(state: com.ninecraft.booket.feature.library.LibraryUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.library.LibraryPresenter.present(): com.ninecraft.booket.feature.library.LibraryUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.library.LibraryPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.library.LibraryUi(state: com.ninecraft.booket.feature.library.LibraryUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.ChipPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.library.component.FilterChip(option: com.ninecraft.booket.feature.library.LibraryFilterOption, count: kotlin.Int, isSelected: kotlin.Boolean, onChipClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - option: STABLE + - count: STABLE (primitive type) + - isSelected: STABLE (primitive type) + - onChipClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.library.component.FilterChipGroup(filterList: kotlinx.collections.immutable.ImmutableList, selectedChipOption: com.ninecraft.booket.feature.library.LibraryFilterOption, onChipClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - filterList: STABLE (known stable type) + - selectedChipOption: STABLE + - onChipClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.FilterChipGroupPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.library.component.LibraryBookItem(book: com.ninecraft.booket.core.model.LibraryBookSummaryModel, onBookClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - book: STABLE (marked @Stable or @Immutable) + - onBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.LibraryBookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.library.component.LibraryHeader(onSearchClick: kotlin.Function0, onSettingClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onSearchClick: STABLE (function type) + - onSettingClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.library.component.LibraryHeaderPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt index 359989bf..4e6bcd93 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/login/LoginUi.kt @@ -33,9 +33,11 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.core.ui.component.ReedCloseTopAppBar import com.ninecraft.booket.core.ui.component.ReedLoadingIndicator import com.ninecraft.booket.feature.screens.LoginScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(LoginScreen::class, ActivityRetainedComponent::class) @Composable internal fun LoginUi( diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt index f017165f..2443ce0b 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/TermsAgreementUi.kt @@ -29,10 +29,12 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.feature.login.R import com.ninecraft.booket.feature.screens.TermsAgreementScreen import com.ninecraft.booket.feature.termsagreement.component.TermItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.persistentListOf +@TraceRecomposition @CircuitInject(TermsAgreementScreen::class, ActivityRetainedComponent::class) @Composable internal fun TermsAgreementUi( diff --git a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt index f8f18caa..f163c417 100644 --- a/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt +++ b/feature/login/src/main/kotlin/com/ninecraft/booket/feature/termsagreement/component/TermsItem.kt @@ -17,8 +17,10 @@ import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.component.checkbox.TickOnlyCheckBox import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable internal fun TermItem( title: String, diff --git a/feature/login/stability/login.stability b/feature/login/stability/login.stability new file mode 100644 index 00000000..0d5e7076 --- /dev/null +++ b/feature/login/stability/login.stability @@ -0,0 +1,79 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :login:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.login.HandleLoginSideEffects(state: com.ninecraft.booket.feature.login.LoginUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.login.LoginPresenter.present(): com.ninecraft.booket.feature.login.LoginUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.login.LoginPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.login.LoginUi(state: com.ninecraft.booket.feature.login.LoginUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.termsagreement.HandleTermsAgreementSideEffects(state: com.ninecraft.booket.feature.termsagreement.TermsAgreementUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.termsagreement.TermsAgreementPresenter.present(): com.ninecraft.booket.feature.termsagreement.TermsAgreementUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.termsagreement.TermsAgreementPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.termsagreement.TermsAgreementUi(state: com.ninecraft.booket.feature.termsagreement.TermsAgreementUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.termsagreement.component.TermItem(title: kotlin.String, onCheckClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier, checked: kotlin.Boolean, hasDetailAction: kotlin.Boolean, onDetailClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - title: STABLE (String is immutable) + - onCheckClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - checked: STABLE (primitive type) + - hasDetailAction: STABLE (primitive type) + - onDetailClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.termsagreement.component.TermItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt index c32f2b80..444d9c4b 100644 --- a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt +++ b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/OnboardingUi.kt @@ -23,9 +23,11 @@ import com.ninecraft.booket.core.ui.ReedScaffold import com.ninecraft.booket.feature.onboarding.component.OnboardingPage import com.ninecraft.booket.feature.onboarding.component.PagerIndicator import com.ninecraft.booket.feature.screens.OnboardingScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(OnboardingScreen::class, ActivityRetainedComponent::class) @Composable internal fun OnboardingUi( diff --git a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt index 20ef8632..19d70951 100644 --- a/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt +++ b/feature/onboarding/src/main/kotlin/com/ninecraft/booket/feature/onboarding/component/PagerIndicator.kt @@ -18,7 +18,9 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable internal fun PagerIndicator( pageCount: Int, diff --git a/feature/onboarding/stability/onboarding.stability b/feature/onboarding/stability/onboarding.stability new file mode 100644 index 00000000..f01b11fc --- /dev/null +++ b/feature/onboarding/stability/onboarding.stability @@ -0,0 +1,58 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :onboarding:stabilityDump + +@Composable +public fun com.ninecraft.booket.feature.onboarding.OnboardingPresenter.present(): com.ninecraft.booket.feature.onboarding.OnboardingUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.onboarding.OnboardingScreenPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.onboarding.OnboardingUi(state: com.ninecraft.booket.feature.onboarding.OnboardingUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.onboarding.component.OnboardingPage(imageRes: kotlin.Int, titleRes: kotlin.Int, highlightTextRes: kotlin.Int, descriptionRes: kotlin.Int, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - imageRes: STABLE (primitive type) + - titleRes: STABLE (primitive type) + - highlightTextRes: STABLE (primitive type) + - descriptionRes: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.onboarding.component.OnboardingPagePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.onboarding.component.PagerIndicator(pageCount: kotlin.Int, pagerState: androidx.compose.foundation.pager.PagerState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - pageCount: STABLE (primitive type) + - pagerState: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.onboarding.component.PagerIndicatorPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt index a97890b6..599b6dbd 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBottomSheet.kt @@ -28,10 +28,12 @@ import com.ninecraft.booket.core.designsystem.component.button.largeButtonStyle import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedBottomSheet import com.ninecraft.booket.feature.record.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.toPersistentList import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable fun ImpressionGuideBottomSheet( diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt index bc0f85b0..641d2cde 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/component/ImpressionGuideBox.kt @@ -20,7 +20,9 @@ import com.ninecraft.booket.core.designsystem.theme.Blank import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.record.R +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable fun ImpressionGuideBox( onClick: () -> Unit, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt index 76af3913..82b9c56c 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/OcrUi.kt @@ -68,12 +68,14 @@ import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.ocr.component.CameraFrame import com.ninecraft.booket.feature.record.ocr.component.SentenceBox import com.ninecraft.booket.feature.screens.OcrScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController import java.io.File import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(OcrScreen::class, ActivityRetainedComponent::class) @Composable internal fun OcrUi( @@ -88,6 +90,7 @@ internal fun OcrUi( } } +@TraceRecomposition @Composable private fun CameraPreview( state: OcrUiState, @@ -312,6 +315,7 @@ private fun CameraPreview( } } +@TraceRecomposition @Composable private fun TextScanResult( state: OcrUiState, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt index 237d59ff..ddc188bf 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/ocr/component/SentenceBox.kt @@ -15,7 +15,9 @@ import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.ComponentPreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable fun SentenceBox( onClick: () -> Unit, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt index ac3a7278..255338ce 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/register/RecordRegisterUi.kt @@ -31,9 +31,11 @@ import com.ninecraft.booket.feature.record.step.EmotionStep import com.ninecraft.booket.feature.record.step.ImpressionStep import com.ninecraft.booket.feature.record.step.QuoteStep import com.ninecraft.booket.feature.screens.RecordScreen +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(RecordScreen::class, ActivityRetainedComponent::class) @Composable internal fun RecordRegisterUi( diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt index bb49fec0..67f98766 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/EmotionStep.kt @@ -35,8 +35,10 @@ import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.collections.immutable.toPersistentList +@TraceRecomposition @Composable fun EmotionStep( state: RecordRegisterUiState, diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt index 4a1dd16b..7d219f97 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/ImpressionStep.kt @@ -55,11 +55,13 @@ import com.ninecraft.booket.feature.record.component.CustomTooltipBox import com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheet import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.coroutines.delay import kotlinx.coroutines.launch import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable fun ImpressionStep( diff --git a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt index 42a76fa6..13f85de0 100644 --- a/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt +++ b/feature/record/src/main/kotlin/com/ninecraft/booket/feature/record/step/QuoteStep.kt @@ -48,10 +48,12 @@ import com.ninecraft.booket.feature.record.R import com.ninecraft.booket.feature.record.component.CustomTooltipBox import com.ninecraft.booket.feature.record.register.RecordRegisterUiEvent import com.ninecraft.booket.feature.record.register.RecordRegisterUiState +import com.skydoves.compose.stability.runtime.TraceRecomposition import kotlinx.coroutines.delay import tech.thdev.compose.extensions.keyboard.state.foundation.rememberKeyboardVisible import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable internal fun QuoteStep( state: RecordRegisterUiState, diff --git a/feature/record/stability/record.stability b/feature/record/stability/record.stability new file mode 100644 index 00000000..21fb836f --- /dev/null +++ b/feature/record/stability/record.stability @@ -0,0 +1,213 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :record:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.record.component.CustomTooltipBox(messageResId: kotlin.Int): kotlin.Unit + skippable: true + restartable: true + params: + - messageResId: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.record.component.CustomTooltipBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, impressionState: androidx.compose.foundation.text.input.TextFieldState, impressionGuideList: kotlinx.collections.immutable.ImmutableList, beforeSelectedImpressionGuide: kotlin.String, selectedImpressionGuide: kotlin.String, onGuideClick: kotlin.Function1, onCloseButtonClick: kotlin.Function0, onSelectionConfirmButtonClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - impressionState: STABLE (marked @Stable or @Immutable) + - impressionGuideList: STABLE (known stable type) + - beforeSelectedImpressionGuide: STABLE (String is immutable) + - selectedImpressionGuide: STABLE (String is immutable) + - onGuideClick: STABLE (function type) + - onCloseButtonClick: STABLE (function type) + - onSelectionConfirmButtonClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.record.component.ImpressionGuideBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.record.component.ImpressionGuideBox(onClick: kotlin.Function0, impressionText: kotlin.String, modifier: androidx.compose.ui.Modifier, isSelected: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - impressionText: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - isSelected: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.record.component.ImpressionGuideBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.CameraPreview(state: com.ninecraft.booket.feature.record.ocr.OcrUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.CameraPreviewPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.ocr.HandleOcrSideEffects(state: com.ninecraft.booket.feature.record.ocr.OcrUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.record.ocr.OcrPresenter.present(): com.ninecraft.booket.feature.record.ocr.OcrUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.ocr.OcrUi(state: com.ninecraft.booket.feature.record.ocr.OcrUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.TextRecognitionResultPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.TextScanResult(state: com.ninecraft.booket.feature.record.ocr.OcrUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.record.ocr.component.CameraFrame(modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.component.CameraFramePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.record.ocr.component.SentenceBox(onClick: kotlin.Function0, sentence: kotlin.String, modifier: androidx.compose.ui.Modifier, isSelected: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - sentence: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - isSelected: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.record.ocr.component.SentenceBoxPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.register.HandleRecordRegisterSideEffects(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +public fun com.ninecraft.booket.feature.record.register.RecordRegisterPresenter.present(): com.ninecraft.booket.feature.record.register.RecordRegisterUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.register.RecordRegisterPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.register.RecordRegisterUi(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.step.EmotionItem(emotionTag: com.ninecraft.booket.core.designsystem.EmotionTag, onClick: kotlin.Function0, isSelected: kotlin.Boolean, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - emotionTag: STABLE + - onClick: STABLE (function type) + - isSelected: STABLE (primitive type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.record.step.EmotionStep(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.record.step.ImpressionStep(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.step.ImpressionStepPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.record.step.QuoteStep(state: com.ninecraft.booket.feature.record.register.RecordRegisterUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.record.step.QuoteStepPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.record.step.RecordRegisterPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/screens/stability/screens.stability b/feature/screens/stability/screens.stability new file mode 100644 index 00000000..aaa1f6b6 --- /dev/null +++ b/feature/screens/stability/screens.stability @@ -0,0 +1,31 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :screens:stabilityDump + +@Composable +public fun com.ninecraft.booket.feature.screens.component.MainBottomBar(tabs: kotlinx.collections.immutable.ImmutableList, currentTab: com.ninecraft.booket.feature.screens.component.MainTab?, onTabSelected: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - tabs: STABLE (known stable type) + - currentTab: STABLE + - onTabSelected: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.screens.component.MainBottomBarItem(tab: com.ninecraft.booket.feature.screens.component.MainTab, selected: kotlin.Boolean, onClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - tab: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.screens.component.MainBottomBarPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt index 88f6b7fc..5904f258 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/BookSearchUi.kt @@ -40,12 +40,14 @@ import com.ninecraft.booket.feature.search.book.component.BookRegisterBottomShee import com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessBottomSheet import com.ninecraft.booket.feature.search.common.component.RecentSearchTitle import com.ninecraft.booket.feature.search.common.component.SearchItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(BookSearchScreen::class, ActivityRetainedComponent::class) @Composable internal fun BookSearchUi( @@ -80,6 +82,7 @@ internal fun BookSearchUi( } } +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @Composable internal fun BookSearchContent( diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt index 59dcdba8..53c538c2 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/book/component/BookItem.kt @@ -31,8 +31,10 @@ import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.core.model.BookSummaryModel import com.ninecraft.booket.feature.search.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @Composable fun BookItem( book: BookSummaryModel, diff --git a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt index afb19cf9..227d3ad0 100644 --- a/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt +++ b/feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/library/LibrarySearchUi.kt @@ -33,9 +33,11 @@ import com.ninecraft.booket.feature.search.R import com.ninecraft.booket.feature.search.common.component.RecentSearchTitle import com.ninecraft.booket.feature.search.common.component.SearchItem import com.ninecraft.booket.feature.search.library.component.LibraryBookItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent +@TraceRecomposition @CircuitInject(LibrarySearchScreen::class, ActivityRetainedComponent::class) @Composable internal fun LibrarySearchUi( @@ -55,6 +57,7 @@ internal fun LibrarySearchUi( } } +@TraceRecomposition @Composable internal fun LibrarySearchContent( state: LibrarySearchUiState, diff --git a/feature/search/stability/search.stability b/feature/search/stability/search.stability new file mode 100644 index 00000000..b2786505 --- /dev/null +++ b/feature/search/stability/search.stability @@ -0,0 +1,198 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :search:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.search.book.BookSearchContent(state: com.ninecraft.booket.feature.search.book.BookSearchUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.search.book.BookSearchPresenter.present(): com.ninecraft.booket.feature.search.book.BookSearchUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.book.BookSearchPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.search.book.BookSearchUi(state: com.ninecraft.booket.feature.search.book.BookSearchUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.search.book.HandleBookSearchSideEffects(state: com.ninecraft.booket.feature.search.book.BookSearchUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookItem(book: com.ninecraft.booket.core.model.BookSummaryModel, onBookClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier, enabled: kotlin.Boolean): kotlin.Unit + skippable: true + restartable: true + params: + - book: STABLE (marked @Stable or @Immutable) + - onBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + - enabled: STABLE (primitive type) + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookRegisterBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, onCloseButtonClick: kotlin.Function0, bookStatuses: kotlinx.collections.immutable.ImmutableList, currentBookStatus: com.ninecraft.booket.core.common.constants.BookStatus?, onItemSelected: kotlin.Function1, onBookRegisterButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - onCloseButtonClick: STABLE (function type) + - bookStatuses: STABLE (known stable type) + - currentBookStatus: STABLE + - onItemSelected: STABLE (function type) + - onBookRegisterButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessBeforeReadingBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, upsertedBookStatus: com.ninecraft.booket.core.common.constants.BookStatus, onCancelButtonClick: kotlin.Function0, onOKButtonClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - upsertedBookStatus: STABLE + - onCancelButtonClick: STABLE (function type) + - onOKButtonClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessCompletedBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.book.component.BookRegisterSuccessReadingBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.book.component.BookStatusItem(item: com.ninecraft.booket.core.common.constants.BookStatus, selected: kotlin.Boolean, onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - item: STABLE + - selected: STABLE (primitive type) + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.search.common.component.RecentSearchTitle(modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.common.component.RecentSearchTitlePreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.search.common.component.SearchItem(query: kotlin.String, onQueryClick: kotlin.Function1, onDeleteIconClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - query: STABLE (String is immutable) + - onQueryClick: STABLE (function type) + - onDeleteIconClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.common.component.SearchItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.search.library.HandlingLibrarySearchSideEffect(state: com.ninecraft.booket.feature.search.library.LibrarySearchUiState): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + +@Composable +internal fun com.ninecraft.booket.feature.search.library.LibrarySearchContent(state: com.ninecraft.booket.feature.search.library.LibrarySearchUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.search.library.LibrarySearchPresenter.present(): com.ninecraft.booket.feature.search.library.LibrarySearchUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.search.library.LibrarySearchPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.search.library.LibrarySearchUi(state: com.ninecraft.booket.feature.search.library.LibrarySearchUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.search.library.component.LibraryBookItem(book: com.ninecraft.booket.core.model.LibraryBookSummaryModel, onBookClick: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - book: STABLE (marked @Stable or @Immutable) + - onBookClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.search.library.component.LibraryBookItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt index 2657c4b8..8977e64b 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/SettingsUi.kt @@ -35,11 +35,13 @@ import com.ninecraft.booket.core.ui.component.ReedLoadingIndicator import com.ninecraft.booket.feature.screens.SettingsScreen import com.ninecraft.booket.feature.settings.component.SettingItem import com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheet +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.coroutines.launch import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @OptIn(ExperimentalMaterial3Api::class) @CircuitInject(SettingsScreen::class, ActivityRetainedComponent::class) @Composable diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt index e3f660f4..a7a8db08 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ReedSwitch.kt @@ -26,7 +26,9 @@ import androidx.compose.ui.unit.dp import com.ninecraft.booket.core.common.extensions.noRippleClickable import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @SuppressLint("UseOfNonLambdaOffsetOverload") @Composable internal fun ReedSwitch( diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt index 00046359..da7f0f73 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/component/ToggleItem.kt @@ -10,7 +10,9 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import com.ninecraft.booket.core.designsystem.DevicePreview import com.ninecraft.booket.core.designsystem.theme.ReedTheme +import com.skydoves.compose.stability.runtime.TraceRecomposition +@TraceRecomposition @Composable internal fun ToggleItem( title: String, diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt index f704f7e1..66a86385 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/notification/NotificationUi.kt @@ -43,10 +43,12 @@ import com.ninecraft.booket.core.ui.component.ReedBackTopAppBar import com.ninecraft.booket.feature.screens.NotificationScreen import com.ninecraft.booket.feature.settings.R import com.ninecraft.booket.feature.settings.component.ToggleItem +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import com.ninecraft.booket.core.designsystem.R as designR +@TraceRecomposition @CircuitInject(NotificationScreen::class, ActivityRetainedComponent::class) @Composable internal fun NotificationUi( diff --git a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt index dc804a52..e6380a55 100644 --- a/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt +++ b/feature/settings/src/main/kotlin/com/ninecraft/booket/feature/settings/osslicenses/OssLicensesUi.kt @@ -37,6 +37,7 @@ import com.ninecraft.booket.core.designsystem.theme.White import com.ninecraft.booket.feature.settings.R import com.ninecraft.booket.feature.screens.OssLicensesScreen import com.orhanobut.logger.Logger +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import kotlinx.coroutines.Dispatchers @@ -44,6 +45,7 @@ import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json import java.io.IOException +@TraceRecomposition @CircuitInject(OssLicensesScreen::class, ActivityRetainedComponent::class) @Composable internal fun OssLicenses( diff --git a/feature/settings/stability/settings.stability b/feature/settings/stability/settings.stability new file mode 100644 index 00000000..bb954ee0 --- /dev/null +++ b/feature/settings/stability/settings.stability @@ -0,0 +1,168 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :settings:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.settings.HandleSettingsSideEffects(state: com.ninecraft.booket.feature.settings.SettingsUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.feature.settings.SettingsPresenter.present(): com.ninecraft.booket.feature.settings.SettingsUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.settings.SettingsScreenPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.SettingsUi(state: com.ninecraft.booket.feature.settings.SettingsUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.settings.component.ReedSwitch(checked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - checked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.ReedSwitchPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.component.SettingItem(title: kotlin.String, modifier: androidx.compose.ui.Modifier, isClickable: kotlin.Boolean, onItemClick: kotlin.Function0, action: @[Composable] androidx.compose.runtime.internal.ComposableFunction0, description: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - title: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - isClickable: STABLE (primitive type) + - onItemClick: STABLE (function type) + - action: STABLE (composable function type) + - description: STABLE (composable function type) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.SettingItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.component.ToggleItem(title: kotlin.String, description: kotlin.String, isChecked: kotlin.Boolean, onCheckedChange: kotlin.Function1, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - title: STABLE (String is immutable) + - description: STABLE (String is immutable) + - isChecked: STABLE (primitive type) + - onCheckedChange: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.ToggleItemPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheet(onDismissRequest: kotlin.Function0, sheetState: androidx.compose.material3.SheetState, isCheckBoxChecked: kotlin.Boolean, onCheckBoxCheckedChange: kotlin.Function0, onCancelButtonClick: kotlin.Function0, onWithdrawButtonClick: kotlin.Function0): kotlin.Unit + skippable: true + restartable: true + params: + - onDismissRequest: STABLE (function type) + - sheetState: STABLE (marked @Stable or @Immutable) + - isCheckBoxChecked: STABLE (primitive type) + - onCheckBoxCheckedChange: STABLE (function type) + - onCancelButtonClick: STABLE (function type) + - onWithdrawButtonClick: STABLE (function type) + +@Composable +private fun com.ninecraft.booket.feature.settings.component.WithdrawConfirmationBottomSheetPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.notification.HandleNotificationSideEffects(state: com.ninecraft.booket.feature.settings.notification.NotificationUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +internal fun com.ninecraft.booket.feature.settings.notification.NotificationGuideItem(onClick: kotlin.Function0, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - onClick: STABLE (function type) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.settings.notification.NotificationPresenter.present(): com.ninecraft.booket.feature.settings.notification.NotificationUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.settings.notification.NotificationUi(state: com.ninecraft.booket.feature.settings.notification.NotificationUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.settings.notification.NotificationUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.settings.osslicenses.OssLicenseItem(name: kotlin.String, license: kotlin.String, url: kotlin.String, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - name: STABLE (String is immutable) + - license: STABLE (String is immutable) + - url: STABLE (String is immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.ninecraft.booket.feature.settings.osslicenses.OssLicenses(state: com.ninecraft.booket.feature.settings.osslicenses.OssLicensesUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.settings.osslicenses.OssLicensesPresenter.present(): com.ninecraft.booket.feature.settings.osslicenses.OssLicensesUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.feature.settings.osslicenses.OssLicensesScreenPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt index 6880687d..d60631d0 100644 --- a/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt +++ b/feature/splash/src/main/kotlin/com/ninecraft/booket/splash/SplashUi.kt @@ -24,10 +24,12 @@ import com.ninecraft.booket.core.designsystem.theme.ReedTheme import com.ninecraft.booket.core.ui.component.ReedDialog import com.ninecraft.booket.feature.screens.SplashScreen import com.ninecraft.booket.feature.splash.R +import com.skydoves.compose.stability.runtime.TraceRecomposition import com.slack.circuit.codegen.annotations.CircuitInject import dagger.hilt.android.components.ActivityRetainedComponent import tech.thdev.compose.exteions.system.ui.controller.rememberSystemUiController +@TraceRecomposition @CircuitInject(SplashScreen::class, ActivityRetainedComponent::class) @Composable fun SplashUi( diff --git a/feature/splash/stability/splash.stability b/feature/splash/stability/splash.stability new file mode 100644 index 00000000..f00ec242 --- /dev/null +++ b/feature/splash/stability/splash.stability @@ -0,0 +1,34 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :splash:stabilityDump + +@Composable +internal fun com.ninecraft.booket.splash.HandleSplashSideEffects(state: com.ninecraft.booket.splash.SplashUiState, eventSink: kotlin.Function1): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - eventSink: STABLE (function type) + +@Composable +public fun com.ninecraft.booket.splash.SplashPresenter.present(): com.ninecraft.booket.splash.SplashUiState + skippable: true + restartable: true + params: + +@Composable +private fun com.ninecraft.booket.splash.SplashPreview(): kotlin.Unit + skippable: true + restartable: true + params: + +@Composable +public fun com.ninecraft.booket.splash.SplashUi(state: com.ninecraft.booket.splash.SplashUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + diff --git a/feature/webview/stability/webview.stability b/feature/webview/stability/webview.stability new file mode 100644 index 00000000..936e51ef --- /dev/null +++ b/feature/webview/stability/webview.stability @@ -0,0 +1,35 @@ +// This file was automatically generated by Compose Stability Analyzer +// https://github.com/skydoves/compose-stability-analyzer +// +// Do not edit this file directly. To update it, run: +// ./gradlew :webview:stabilityDump + +@Composable +internal fun com.ninecraft.booket.feature.webview.WebViewContent(state: com.ninecraft.booket.feature.webview.WebViewUiState, innerPadding: androidx.compose.foundation.layout.PaddingValues, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - innerPadding: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.ninecraft.booket.feature.webview.WebViewPresenter.present(): com.ninecraft.booket.feature.webview.WebViewUiState + skippable: true + restartable: true + params: + +@Composable +internal fun com.ninecraft.booket.feature.webview.WebViewUi(state: com.ninecraft.booket.feature.webview.WebViewUiState, modifier: androidx.compose.ui.Modifier): kotlin.Unit + skippable: true + restartable: true + params: + - state: STABLE + - modifier: STABLE (marked @Stable or @Immutable) + +@Composable +private fun com.ninecraft.booket.feature.webview.WebViewUiPreview(): kotlin.Unit + skippable: true + restartable: true + params: + diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 81fefff0..b086333d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,13 +24,13 @@ androidx-compose-material3 = "1.4.0-alpha18" compose-stable-marker = "1.0.6" compose-effects = "0.1.1" compose-shadow = "2.0.4" -compose-stability-analyzer = "0.3.0" +compose-stability-analyzer = "0.4.0" ## Kotlin Symbol Processing -ksp = "2.2.0-2.0.2" +ksp = "2.3.0" ## Kotlin -kotlin = "2.2.0" +kotlin = "2.2.21" kotlinx-coroutines = "1.10.2" kotlinx-serialization-json = "1.9.0" kotlinx-collections-immutable = "0.4.0"