From 69bd39aef55069d0e3e9146f894f67933f9fe0d3 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Mon, 24 Nov 2025 00:10:41 +0530 Subject: [PATCH 1/8] [gradle] add stability analyzer plugin --- build.gradle.kts | 1 + gradle/libs.versions.toml | 4 +++- jetlime/build.gradle.kts | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1d48dca..fb7ebb6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,6 +9,7 @@ plugins { alias(libs.plugins.spotless) apply false alias(libs.plugins.kotlin.cocoapods) apply false alias(libs.plugins.compose.compiler.report.generator) apply false + alias(libs.plugins.stability.analyzer) apply false } // Compose Compiler Metrics diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4263e49..bd7507e 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,6 +12,7 @@ report = "1.4.2" junitVersion = "1.3.0" androidxTest = "1.7.0" composeBom = "2025.11.01" +stabilityAnalyzer = "0.5.3" [libraries] androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junitVersion" } @@ -35,4 +36,5 @@ kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref kotlin-cocoapods = { id = "org.jetbrains.kotlin.native.cocoapods", version.ref = "kotlin" } nexus-vanniktech-publish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech" } dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } -spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } \ No newline at end of file +spotless = { id = "com.diffplug.spotless", version.ref = "spotless" } +stability-analyzer = { id = "com.github.skydoves.compose.stability.analyzer", version.ref = "stabilityAnalyzer" } \ No newline at end of file diff --git a/jetlime/build.gradle.kts b/jetlime/build.gradle.kts index 646e8d6..a41e553 100644 --- a/jetlime/build.gradle.kts +++ b/jetlime/build.gradle.kts @@ -6,6 +6,7 @@ plugins { alias(libs.plugins.kotlin.cocoapods) alias(libs.plugins.nexus.vanniktech.publish) alias(libs.plugins.dokka) + alias(libs.plugins.stability.analyzer) } // Dokka V2 extension From 397449f0fb7c70a1c9a82149284a27673f0ea469 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Mon, 24 Nov 2025 14:39:27 +0530 Subject: [PATCH 2/8] [setup] bump stability analyzer to 0.6.0 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bd7507e..5271875 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ report = "1.4.2" junitVersion = "1.3.0" androidxTest = "1.7.0" composeBom = "2025.11.01" -stabilityAnalyzer = "0.5.3" +stabilityAnalyzer = "0.6.0" [libraries] androidx-junit = { module = "androidx.test.ext:junit", version.ref = "junitVersion" } From 4613706117beb97284dfd1ecee87868d95585705 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Mon, 24 Nov 2025 15:28:46 +0530 Subject: [PATCH 3/8] [setup] add recomposition tracing --- sample/composeApp/build.gradle.kts | 1 + .../src/androidMain/AndroidManifest.xml | 1 + .../pushpal/jetlime/sample/MyApplication.kt | 50 +++++++++++++++++++ .../kotlin/timelines/BasicVerticalTimeLine.kt | 2 + .../timelines/ExtendedVerticalTimeLine.kt | 2 + .../timelines/VerticalDynamicTimeLine.kt | 2 + 6 files changed, 58 insertions(+) create mode 100644 sample/composeApp/src/androidMain/kotlin/com/pushpal/jetlime/sample/MyApplication.kt diff --git a/sample/composeApp/build.gradle.kts b/sample/composeApp/build.gradle.kts index 7495d4f..6ee4339 100644 --- a/sample/composeApp/build.gradle.kts +++ b/sample/composeApp/build.gradle.kts @@ -10,6 +10,7 @@ plugins { alias(libs.plugins.compose.compiler) alias(libs.plugins.kotlin.cocoapods) alias(libs.plugins.compose.compiler.report.generator) + alias(libs.plugins.stability.analyzer) } kotlin { diff --git a/sample/composeApp/src/androidMain/AndroidManifest.xml b/sample/composeApp/src/androidMain/AndroidManifest.xml index f0eebed..512834d 100644 --- a/sample/composeApp/src/androidMain/AndroidManifest.xml +++ b/sample/composeApp/src/androidMain/AndroidManifest.xml @@ -2,6 +2,7 @@ + append(" • ${change.name}: ${change.type}") + when { + change.changed -> append(" ➡️ CHANGED") + change.stable -> append(" ✅ STABLE") + else -> append(" ⚠️ UNSTABLE") + } + appendLine() + } + + if (event.unstableParameters.isNotEmpty()) { + append(" ⚠️ Unstable: ${event.unstableParameters.joinToString()}") + } + } + Log.d("CustomRecomposition", message) + } + }, + ) + } +} \ No newline at end of file diff --git a/sample/composeApp/src/commonMain/kotlin/timelines/BasicVerticalTimeLine.kt b/sample/composeApp/src/commonMain/kotlin/timelines/BasicVerticalTimeLine.kt index 8522150..a389023 100644 --- a/sample/composeApp/src/commonMain/kotlin/timelines/BasicVerticalTimeLine.kt +++ b/sample/composeApp/src/commonMain/kotlin/timelines/BasicVerticalTimeLine.kt @@ -39,11 +39,13 @@ import com.pushpal.jetlime.JetLimeColumn import com.pushpal.jetlime.JetLimeEvent import com.pushpal.jetlime.JetLimeEventDefaults import com.pushpal.jetlime.PointPlacement +import com.skydoves.compose.stability.runtime.TraceRecomposition import data.getCharacters import org.jetbrains.compose.ui.tooling.preview.Preview import timelines.event.VerticalEventContent @ExperimentalAnimationApi +@TraceRecomposition @Composable fun BasicVerticalTimeLine(modifier: Modifier = Modifier, showSnackbar: (message: String) -> Unit) { val items = remember { getCharacters().subList(0, 4) } diff --git a/sample/composeApp/src/commonMain/kotlin/timelines/ExtendedVerticalTimeLine.kt b/sample/composeApp/src/commonMain/kotlin/timelines/ExtendedVerticalTimeLine.kt index 5fdf141..6705b3e 100644 --- a/sample/composeApp/src/commonMain/kotlin/timelines/ExtendedVerticalTimeLine.kt +++ b/sample/composeApp/src/commonMain/kotlin/timelines/ExtendedVerticalTimeLine.kt @@ -45,6 +45,7 @@ import com.pushpal.jetlime.JetLimeColumn import com.pushpal.jetlime.JetLimeDefaults import com.pushpal.jetlime.JetLimeEventDefaults import com.pushpal.jetlime.JetLimeExtendedEvent +import com.skydoves.compose.stability.runtime.TraceRecomposition import data.Item import data.activityNames import data.placeNames @@ -61,6 +62,7 @@ import timelines.event.placeInfo @OptIn(ExperimentalComposeApi::class) @ExperimentalAnimationApi +@TraceRecomposition @Composable fun ExtendedVerticalTimeLine( modifier: Modifier = Modifier, diff --git a/sample/composeApp/src/commonMain/kotlin/timelines/VerticalDynamicTimeLine.kt b/sample/composeApp/src/commonMain/kotlin/timelines/VerticalDynamicTimeLine.kt index c6e4671..c07d77e 100644 --- a/sample/composeApp/src/commonMain/kotlin/timelines/VerticalDynamicTimeLine.kt +++ b/sample/composeApp/src/commonMain/kotlin/timelines/VerticalDynamicTimeLine.kt @@ -55,12 +55,14 @@ import com.pushpal.jetlime.JetLimeDefaults import com.pushpal.jetlime.JetLimeEvent import com.pushpal.jetlime.JetLimeEventDefaults import com.pushpal.jetlime.PointPlacement +import com.skydoves.compose.stability.runtime.TraceRecomposition import data.Item import data.getCharacters import org.jetbrains.compose.ui.tooling.preview.Preview import timelines.event.VerticalEventContent @ExperimentalAnimationApi +@TraceRecomposition @Composable fun VerticalDynamicTimeLine( modifier: Modifier = Modifier, From bcbfa597e91ab57e8e18604ed9d9dbf7df0845d7 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Mon, 24 Nov 2025 15:48:46 +0530 Subject: [PATCH 4/8] [setup] spotless checks fix --- .../pushpal/jetlime/sample/MyApplication.kt | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/sample/composeApp/src/androidMain/kotlin/com/pushpal/jetlime/sample/MyApplication.kt b/sample/composeApp/src/androidMain/kotlin/com/pushpal/jetlime/sample/MyApplication.kt index 0a22705..094ac91 100644 --- a/sample/composeApp/src/androidMain/kotlin/com/pushpal/jetlime/sample/MyApplication.kt +++ b/sample/composeApp/src/androidMain/kotlin/com/pushpal/jetlime/sample/MyApplication.kt @@ -1,3 +1,27 @@ +/* +* MIT License +* +* Copyright (c) 2024 Pushpal Roy +* +* Permission is hereby granted, free of charge, to any person obtaining a copy +* of this software and associated documentation files (the "Software"), to deal +* in the Software without restriction, including without limitation the rights +* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the Software is +* furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included in all +* copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +* SOFTWARE. +* +*/ package com.pushpal.jetlime.sample import android.app.Application @@ -47,4 +71,4 @@ class MyApplication : Application() { }, ) } -} \ No newline at end of file +} From 21792586166d6069914c394ae31172beefa239a6 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Fri, 28 Nov 2025 03:47:55 +0530 Subject: [PATCH 5/8] [setup] add ios xcscheme files --- .../xcschemes/xcschememanagement.plist | 6 ++++-- .../xcschemes/xcschememanagement.plist | 8 +------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/sample/iosApp/Pods/Pods.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist b/sample/iosApp/Pods/Pods.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist index 42d49dd..1e1525e 100644 --- a/sample/iosApp/Pods/Pods.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/sample/iosApp/Pods/Pods.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,10 +7,12 @@ Pods-iosApp.xcscheme isShown - + + orderHint + 0 SuppressBuildableAutocreation - + diff --git a/sample/iosApp/iosApp.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist b/sample/iosApp/iosApp.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist index fa59f97..81d0dc8 100644 --- a/sample/iosApp/iosApp.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/sample/iosApp/iosApp.xcodeproj/xcuserdata/pushpalroy.xcuserdatad/xcschemes/xcschememanagement.plist @@ -3,12 +3,6 @@ SchemeUserState - - iosApp.xcscheme - - orderHint - 0 - - + From a162ad79e5416524fa20c63bd103380fcfe6d1d0 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Fri, 28 Nov 2025 03:48:18 +0530 Subject: [PATCH 6/8] [setup] increase heap size for Kotlin/Wasm compilation --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index 7ac3dd1..30ef2a1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ # Code style kotlin.code.style=official -# Gradle -org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options="-Xmx2048M" +# Increase heap size for Kotlin/Wasm compilation +org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=1g # Android android.nonTransitiveRClass=true android.useAndroidX=true From f9f579a7336b36f5fe2d05abeb5472adbe0d66e9 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Fri, 28 Nov 2025 03:48:52 +0530 Subject: [PATCH 7/8] [setup] add the stability baseline for jetlime --- jetlime/stability/jetlime.stability | 177 ++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 jetlime/stability/jetlime.stability diff --git a/jetlime/stability/jetlime.stability b/jetlime/stability/jetlime.stability new file mode 100644 index 0000000..a494373 --- /dev/null +++ b/jetlime/stability/jetlime.stability @@ -0,0 +1,177 @@ +// 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 :jetlime:stabilityDump + +@Composable +internal fun com.pushpal.jetlime.HorizontalEvent(style: com.pushpal.jetlime.JetLimeEventStyle, jetLimeStyle: com.pushpal.jetlime.JetLimeStyle, modifier: androidx.compose.ui.Modifier, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - style: STABLE (marked @Stable or @Immutable) + - jetLimeStyle: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.pushpal.jetlime.JetLimeColumn(itemsList: com.pushpal.jetlime.ItemsList, modifier: androidx.compose.ui.Modifier, style: com.pushpal.jetlime.JetLimeStyle, listState: androidx.compose.foundation.lazy.LazyListState, contentPadding: androidx.compose.foundation.layout.PaddingValues, key: kotlin.Function2<@[ParameterName(name = \, itemContent: @[Composable] androidx.compose.runtime.internal.ComposableFunction3<@[ParameterName(name = \): kotlin.Unit + skippable: true + restartable: true + params: + - itemsList: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - style: STABLE (marked @Stable or @Immutable) + - listState: STABLE (marked @Stable or @Immutable) + - contentPadding: STABLE (marked @Stable or @Immutable) + - key: STABLE (function type) + - itemContent: STABLE (composable function type) + +@Composable +public fun com.pushpal.jetlime.JetLimeDefaults.columnStyle(contentDistance: androidx.compose.ui.unit.Dp, itemSpacing: androidx.compose.ui.unit.Dp, lineThickness: androidx.compose.ui.unit.Dp, lineBrush: androidx.compose.ui.graphics.Brush, pathEffect: androidx.compose.ui.graphics.PathEffect?, lineVerticalAlignment: com.pushpal.jetlime.VerticalAlignment): com.pushpal.jetlime.JetLimeStyle + skippable: false + restartable: true + params: + - contentDistance: STABLE (marked @Stable or @Immutable) + - itemSpacing: STABLE (marked @Stable or @Immutable) + - lineThickness: STABLE (marked @Stable or @Immutable) + - lineBrush: STABLE (marked @Stable or @Immutable) + - pathEffect: RUNTIME (requires runtime check) + - lineVerticalAlignment: STABLE (marked @Stable or @Immutable) + +@Composable +internal fun com.pushpal.jetlime.JetLimeDefaults.jetLimeStyle(contentDistance: androidx.compose.ui.unit.Dp, itemSpacing: androidx.compose.ui.unit.Dp, lineThickness: androidx.compose.ui.unit.Dp, lineBrush: androidx.compose.ui.graphics.Brush, pathEffect: androidx.compose.ui.graphics.PathEffect?, lineHorizontalAlignment: com.pushpal.jetlime.HorizontalAlignment, lineVerticalAlignment: com.pushpal.jetlime.VerticalAlignment): com.pushpal.jetlime.JetLimeStyle + skippable: false + restartable: true + params: + - contentDistance: STABLE (marked @Stable or @Immutable) + - itemSpacing: STABLE (marked @Stable or @Immutable) + - lineThickness: STABLE (marked @Stable or @Immutable) + - lineBrush: STABLE (marked @Stable or @Immutable) + - pathEffect: RUNTIME (requires runtime check) + - lineHorizontalAlignment: STABLE (marked @Stable or @Immutable) + - lineVerticalAlignment: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.pushpal.jetlime.JetLimeDefaults.lineGradientBrush(colors: kotlinx.collections.immutable.ImmutableList, start: androidx.compose.ui.geometry.Offset, end: androidx.compose.ui.geometry.Offset, tileMode: androidx.compose.ui.graphics.TileMode): androidx.compose.ui.graphics.Brush + skippable: true + restartable: true + params: + - colors: STABLE (known stable type) + - start: STABLE (marked @Stable or @Immutable) + - end: STABLE (marked @Stable or @Immutable) + - tileMode: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.pushpal.jetlime.JetLimeDefaults.lineSolidBrush(color: androidx.compose.ui.graphics.Color): androidx.compose.ui.graphics.Brush + skippable: true + restartable: true + params: + - color: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.pushpal.jetlime.JetLimeDefaults.rowStyle(contentDistance: androidx.compose.ui.unit.Dp, itemSpacing: androidx.compose.ui.unit.Dp, lineThickness: androidx.compose.ui.unit.Dp, lineBrush: androidx.compose.ui.graphics.Brush, pathEffect: androidx.compose.ui.graphics.PathEffect?, lineHorizontalAlignment: com.pushpal.jetlime.HorizontalAlignment): com.pushpal.jetlime.JetLimeStyle + skippable: false + restartable: true + params: + - contentDistance: STABLE (marked @Stable or @Immutable) + - itemSpacing: STABLE (marked @Stable or @Immutable) + - lineThickness: STABLE (marked @Stable or @Immutable) + - lineBrush: STABLE (marked @Stable or @Immutable) + - pathEffect: RUNTIME (requires runtime check) + - lineHorizontalAlignment: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.pushpal.jetlime.JetLimeEvent(modifier: androidx.compose.ui.Modifier, style: com.pushpal.jetlime.JetLimeEventStyle, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - style: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.pushpal.jetlime.JetLimeEventDefaults.eventStyle(position: com.pushpal.jetlime.EventPosition, pointPlacement: com.pushpal.jetlime.PointPlacement, pointType: com.pushpal.jetlime.EventPointType, pointColor: androidx.compose.ui.graphics.Color, pointFillColor: androidx.compose.ui.graphics.Color, pointRadius: androidx.compose.ui.unit.Dp, pointAnimation: com.pushpal.jetlime.EventPointAnimation?, pointStrokeWidth: androidx.compose.ui.unit.Dp, pointStrokeColor: androidx.compose.ui.graphics.Color): com.pushpal.jetlime.JetLimeEventStyle + skippable: true + restartable: true + params: + - position: STABLE (marked @Stable or @Immutable) + - pointPlacement: STABLE (class with no mutable properties) + - pointType: STABLE (marked @Stable or @Immutable) + - pointColor: STABLE (marked @Stable or @Immutable) + - pointFillColor: STABLE (marked @Stable or @Immutable) + - pointRadius: STABLE (marked @Stable or @Immutable) + - pointAnimation: STABLE (marked @Stable or @Immutable) + - pointStrokeWidth: STABLE (marked @Stable or @Immutable) + - pointStrokeColor: STABLE (marked @Stable or @Immutable) + +@Composable +public fun com.pushpal.jetlime.JetLimeEventDefaults.pointAnimation(initialValue: kotlin.Float, targetValue: kotlin.Float, animationSpec: androidx.compose.animation.core.InfiniteRepeatableSpec): com.pushpal.jetlime.EventPointAnimation + skippable: false + restartable: true + params: + - initialValue: STABLE (primitive type) + - targetValue: STABLE (primitive type) + - animationSpec: RUNTIME (requires runtime check) + +@Composable +public fun com.pushpal.jetlime.JetLimeExtendedEvent(modifier: androidx.compose.ui.Modifier, style: com.pushpal.jetlime.JetLimeEventStyle, additionalContent: @[Composable] @[ExtensionFunctionType] androidx.compose.runtime.internal.ComposableFunction1, additionalContentMaxWidth: androidx.compose.ui.unit.Dp, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - modifier: STABLE (marked @Stable or @Immutable) + - style: STABLE (marked @Stable or @Immutable) + - additionalContent: STABLE (composable function type) + - additionalContentMaxWidth: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +public fun com.pushpal.jetlime.JetLimeRow(itemsList: com.pushpal.jetlime.ItemsList, modifier: androidx.compose.ui.Modifier, style: com.pushpal.jetlime.JetLimeStyle, listState: androidx.compose.foundation.lazy.LazyListState, contentPadding: androidx.compose.foundation.layout.PaddingValues, key: kotlin.Function2<@[ParameterName(name = \, itemContent: @[Composable] androidx.compose.runtime.internal.ComposableFunction3<@[ParameterName(name = \): kotlin.Unit + skippable: true + restartable: true + params: + - itemsList: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - style: STABLE (marked @Stable or @Immutable) + - listState: STABLE (marked @Stable or @Immutable) + - contentPadding: STABLE (marked @Stable or @Immutable) + - key: STABLE (function type) + - itemContent: STABLE (composable function type) + +@Composable +private fun com.pushpal.jetlime.PlaceHorizontalEventContent(style: com.pushpal.jetlime.JetLimeEventStyle, jetLimeStyle: com.pushpal.jetlime.JetLimeStyle, alignment: com.pushpal.jetlime.HorizontalAlignment, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - style: STABLE (marked @Stable or @Immutable) + - jetLimeStyle: STABLE (marked @Stable or @Immutable) + - alignment: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +private fun com.pushpal.jetlime.PlaceVerticalEventContent(style: com.pushpal.jetlime.JetLimeEventStyle, jetLimeStyle: com.pushpal.jetlime.JetLimeStyle, alignment: com.pushpal.jetlime.VerticalAlignment, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - style: STABLE (marked @Stable or @Immutable) + - jetLimeStyle: STABLE (marked @Stable or @Immutable) + - alignment: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +internal fun com.pushpal.jetlime.VerticalEvent(style: com.pushpal.jetlime.JetLimeEventStyle, jetLimeStyle: com.pushpal.jetlime.JetLimeStyle, modifier: androidx.compose.ui.Modifier, content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0): kotlin.Unit + skippable: true + restartable: true + params: + - style: STABLE (marked @Stable or @Immutable) + - jetLimeStyle: STABLE (marked @Stable or @Immutable) + - modifier: STABLE (marked @Stable or @Immutable) + - content: STABLE (composable function type) + +@Composable +internal fun com.pushpal.jetlime.calculateRadiusAnimFactor(style: com.pushpal.jetlime.JetLimeEventStyle): androidx.compose.runtime.State + skippable: true + restartable: true + params: + - style: STABLE (marked @Stable or @Immutable) + From 8e0256b0c262c045869b7c2732d22ee80a4e70c0 Mon Sep 17 00:00:00 2001 From: Pushpal Roy Date: Fri, 28 Nov 2025 03:57:12 +0530 Subject: [PATCH 8/8] [setup] add stability check in ci --- .github/workflows/build.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 87e9bce..de9f5e5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,6 +26,20 @@ jobs: - name: spotless run: ./gradlew spotlessCheck + stability_check: + name: Compose stability check + runs-on: macos-latest + steps: + - name: Check out code + uses: actions/checkout@v6 + - name: Set up JDK + uses: actions/setup-java@v5.0.0 + with: + distribution: 'zulu' + java-version: 21 + - name: Run Compose stability analyzer + run: ./gradlew :jetlime:stabilityCheck + build: strategy: matrix: