From d7ceabe9393581f700f0086dc1f4b809a2ffc2f2 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <mail@justjanne.de>
Date: Sun, 8 Jun 2025 16:54:30 +0200
Subject: [PATCH] chore: update dependencies

---
 .gitignore                                    |  1 +
 .../de/chaosdorf/mete/v1/MeteApiV1Factory.kt  |  2 +-
 app/build.gradle.kts                          |  2 +
 .../chaosdorf/meteroid/MeteroidApplication.kt | 42 ++++++------
 .../kotlin/de/chaosdorf/meteroid/ui/Avatar.kt |  2 +-
 .../chaosdorf/meteroid/ui/MeteroidRouter.kt   |  1 -
 .../chaosdorf/meteroid/ui/MeteroidScaffold.kt | 36 +++++++---
 .../ui/home/purchase/PurchaseDrinkTile.kt     |  2 +-
 .../TransactionHistoryItem.kt                 |  2 +-
 .../meteroid/ui/home/wrapped/WrappedScreen.kt |  2 +-
 .../meteroid/ui/servers/AddServerScreen.kt    |  2 +-
 .../meteroid/util/RememberAvatarPainter.kt    |  4 +-
 build.gradle.kts                              |  1 +
 .../kotlin/AndroidApplicationConvention.kt    |  4 +-
 .../main/kotlin/AndroidLibraryConvention.kt   |  2 +-
 .../main/kotlin/KotlinAndroidConvention.kt    |  4 --
 .../src/main/kotlin/KotlinConvention.kt       |  4 --
 gradle/libs.versions.toml                     | 68 ++++++++++---------
 18 files changed, 99 insertions(+), 82 deletions(-)

diff --git a/.gitignore b/.gitignore
index 49ca4c2..e4641da 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 *.iml
 .gradle
+.kotlin
 /local.properties
 /signing.properties
 /.idea/*
diff --git a/api/src/main/kotlin/de/chaosdorf/mete/v1/MeteApiV1Factory.kt b/api/src/main/kotlin/de/chaosdorf/mete/v1/MeteApiV1Factory.kt
index 3fdc434..af56fc8 100644
--- a/api/src/main/kotlin/de/chaosdorf/mete/v1/MeteApiV1Factory.kt
+++ b/api/src/main/kotlin/de/chaosdorf/mete/v1/MeteApiV1Factory.kt
@@ -24,7 +24,6 @@
 
 package de.chaosdorf.mete.v1
 
-import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
 import de.chaosdorf.mete.model.MeteApi
 import de.chaosdorf.mete.model.MeteApiFactory
 import de.chaosdorf.mete.util.Code204Interceptor
@@ -32,6 +31,7 @@ import kotlinx.serialization.json.Json
 import okhttp3.MediaType.Companion.toMediaType
 import okhttp3.OkHttpClient
 import retrofit2.Retrofit
+import retrofit2.converter.kotlinx.serialization.asConverterFactory
 import retrofit2.create
 
 object MeteApiV1Factory : MeteApiFactory {
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 93f0374..86f5a5a 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -24,6 +24,7 @@ plugins {
   alias(libs.plugins.kotlin.serialization)
   alias(libs.plugins.kotlin.ksp)
   alias(libs.plugins.dagger.hilt)
+  alias(libs.plugins.compose.compiler)
 }
 
 android {
@@ -91,6 +92,7 @@ dependencies {
 
   implementation(libs.okhttp)
   implementation(libs.coil.compose)
+  implementation(libs.coil.okhttp)
 
   implementation(libs.hilt.navigation)
   implementation(libs.hilt.android)
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt
index 6ae713b..589c0d6 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/MeteroidApplication.kt
@@ -21,30 +21,32 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
-
 package de.chaosdorf.meteroid
 
 import android.app.Application
-import coil.ImageLoader
-import coil.ImageLoaderFactory
-import coil.disk.DiskCache
-import coil.memory.MemoryCache
+import coil3.ImageLoader
+import coil3.PlatformContext
+import coil3.SingletonImageLoader
+import coil3.disk.DiskCache
+import coil3.disk.directory
+import coil3.memory.MemoryCache
 import dagger.hilt.android.HiltAndroidApp
 
 @HiltAndroidApp
-class MeteroidApplication : Application(), ImageLoaderFactory {
-  override fun newImageLoader() = ImageLoader.Builder(applicationContext)
-    .memoryCache {
-      MemoryCache.Builder(applicationContext)
-        .maxSizePercent(0.25)
-        .build()
-    }
-    .diskCache {
-      DiskCache.Builder()
-        .directory(applicationContext.cacheDir.resolve("image_cache"))
-        .maxSizePercent(0.02)
-        .build()
-    }
-    .respectCacheHeaders(false)
-    .build()
+class MeteroidApplication : Application(), SingletonImageLoader.Factory {
+  override fun newImageLoader(context: PlatformContext): ImageLoader {
+    return ImageLoader.Builder(context)
+      .memoryCache {
+        MemoryCache.Builder()
+          .maxSizePercent(context, 0.25)
+          .build()
+      }
+      .diskCache {
+        DiskCache.Builder()
+          .directory(applicationContext.cacheDir.resolve("image_cache"))
+          .maxSizePercent(0.02)
+          .build()
+      }
+      .build()
+  }
 }
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/Avatar.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/Avatar.kt
index eb711a2..c0861ac 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/Avatar.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/Avatar.kt
@@ -40,7 +40,7 @@ import androidx.compose.ui.draw.clip
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
-import coil.compose.AsyncImage
+import coil3.compose.AsyncImage
 import de.chaosdorf.meteroid.theme.icons.MeteroidIcons
 import de.chaosdorf.meteroid.theme.icons.filled.WaterFull
 
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt
index 7b74224..45bba3a 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidRouter.kt
@@ -81,7 +81,6 @@ fun MeteroidRouter(
       exitTransition = { fadeOut() },
       popEnterTransition = { fadeIn() },
       popExitTransition = { fadeOut() },
-      modifier = Modifier.padding(paddingValues)
     ) {
       composable(
         MeteroidScreen.Home.Purchase.route, arguments = listOf(
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidScaffold.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidScaffold.kt
index 2867b47..19dbfe5 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidScaffold.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/MeteroidScaffold.kt
@@ -24,10 +24,13 @@
 
 package de.chaosdorf.meteroid.ui
 
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Scaffold
+import androidx.compose.material3.Surface
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
 import androidx.navigation.NavController
 import de.chaosdorf.meteroid.ui.home.MeteroidBottomBar
 import de.chaosdorf.meteroid.ui.navigation.MeteroidNavigation
@@ -40,12 +43,27 @@ fun MeteroidScaffold(
   viewModel: NavigationViewModel,
   content: @Composable (PaddingValues) -> Unit
 ) {
-  Box {
-    Scaffold(
-      bottomBar = { MeteroidBottomBar(navController, viewModel) },
-      content = content
-    )
-    NavigationScrim(viewModel)
-    MeteroidNavigation(navController, viewModel)
+  Column {
+    Surface(
+      modifier = Modifier
+        .fillMaxWidth()
+        .windowInsetsTopHeight(WindowInsets.statusBars),
+      color = MaterialTheme.colorScheme.scrim.copy(alpha = .38f),
+    ) {}
+    Box(Modifier.weight(1f)) {
+      Scaffold(
+        bottomBar = { MeteroidBottomBar(navController, viewModel) },
+        content = content
+      )
+      Surface(
+        modifier = Modifier
+          .align(Alignment.BottomCenter)
+          .fillMaxWidth()
+          .windowInsetsBottomHeight(WindowInsets.navigationBars),
+        color = MaterialTheme.colorScheme.scrim.copy(alpha = .38f),
+      ) {}
+      NavigationScrim(viewModel)
+      MeteroidNavigation(navController, viewModel)
+    }
   }
 }
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/purchase/PurchaseDrinkTile.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/purchase/PurchaseDrinkTile.kt
index 274c9b1..d3ca74c 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/purchase/PurchaseDrinkTile.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/purchase/PurchaseDrinkTile.kt
@@ -42,7 +42,7 @@ import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
-import coil.compose.rememberAsyncImagePainter
+import coil3.compose.rememberAsyncImagePainter
 import de.chaosdorf.meteroid.model.Drink
 import de.chaosdorf.meteroid.theme.secondaryGradient
 import de.chaosdorf.meteroid.ui.home.PriceBadge
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/transactionhistory/TransactionHistoryItem.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/transactionhistory/TransactionHistoryItem.kt
index 71d5353..968d8fc 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/transactionhistory/TransactionHistoryItem.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/transactionhistory/TransactionHistoryItem.kt
@@ -41,7 +41,7 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.clip
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.unit.dp
-import coil.compose.rememberAsyncImagePainter
+import coil3.compose.rememberAsyncImagePainter
 import de.chaosdorf.meteroid.model.Drink
 import de.chaosdorf.meteroid.model.Transaction
 import de.chaosdorf.meteroid.theme.secondaryGradient
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/wrapped/WrappedScreen.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/wrapped/WrappedScreen.kt
index c08ee4d..9aaa2b4 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/wrapped/WrappedScreen.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/home/wrapped/WrappedScreen.kt
@@ -41,7 +41,7 @@ import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalConfiguration
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.unit.dp
-import coil.compose.rememberAsyncImagePainter
+import coil3.compose.rememberAsyncImagePainter
 import de.chaosdorf.meteroid.R
 import java.time.format.TextStyle
 
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/servers/AddServerScreen.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/servers/AddServerScreen.kt
index a629d0b..46489c8 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/ui/servers/AddServerScreen.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/ui/servers/AddServerScreen.kt
@@ -38,7 +38,7 @@ import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.unit.dp
 import androidx.navigation.NavController
-import coil.compose.AsyncImage
+import coil3.compose.AsyncImage
 import kotlinx.coroutines.launch
 import okhttp3.HttpUrl.Companion.toHttpUrl
 
diff --git a/app/src/main/kotlin/de/chaosdorf/meteroid/util/RememberAvatarPainter.kt b/app/src/main/kotlin/de/chaosdorf/meteroid/util/RememberAvatarPainter.kt
index 463fdf4..9b56e25 100644
--- a/app/src/main/kotlin/de/chaosdorf/meteroid/util/RememberAvatarPainter.kt
+++ b/app/src/main/kotlin/de/chaosdorf/meteroid/util/RememberAvatarPainter.kt
@@ -31,8 +31,8 @@ import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.vector.RenderVectorGroup
 import androidx.compose.ui.graphics.vector.rememberVectorPainter
 import androidx.compose.ui.unit.Dp
-import coil.compose.AsyncImagePainter
-import coil.compose.rememberAsyncImagePainter
+import coil3.compose.AsyncImagePainter
+import coil3.compose.rememberAsyncImagePainter
 
 @Composable
 fun rememberAvatarPainter(url: String?, iconWidth: Dp, iconHeight: Dp, iconTint: Color): AsyncImagePainter {
diff --git a/build.gradle.kts b/build.gradle.kts
index 51555c9..6dfc7d1 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -13,4 +13,5 @@ plugins {
   alias(libs.plugins.kotlin.serialization) apply false
   alias(libs.plugins.kotlin.ksp) apply false
   alias(libs.plugins.dagger.hilt) apply false
+  alias(libs.plugins.compose.compiler) apply false
 }
diff --git a/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt b/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt
index 17c95bd..3f2dd47 100644
--- a/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt
+++ b/gradle/convention/src/main/kotlin/AndroidApplicationConvention.kt
@@ -16,11 +16,11 @@ class AndroidApplicationConvention : Plugin<Project> {
       }
 
       extensions.configure<ApplicationExtension> {
-        compileSdk = 34
+        compileSdk = 35
 
         defaultConfig {
           minSdk = 21
-          targetSdk = 34
+          targetSdk = 35
 
           applicationId = "${rootProject.group}.${rootProject.name.lowercase(Locale.ROOT)}"
           versionCode = cmd("git", "rev-list", "--count", "HEAD")?.toIntOrNull() ?: 1
diff --git a/gradle/convention/src/main/kotlin/AndroidLibraryConvention.kt b/gradle/convention/src/main/kotlin/AndroidLibraryConvention.kt
index ead4e60..0dd1383 100644
--- a/gradle/convention/src/main/kotlin/AndroidLibraryConvention.kt
+++ b/gradle/convention/src/main/kotlin/AndroidLibraryConvention.kt
@@ -12,7 +12,7 @@ class AndroidLibraryConvention : Plugin<Project> {
       }
 
       extensions.configure<LibraryExtension> {
-        compileSdk = 34
+        compileSdk = 35
 
         defaultConfig {
           minSdk = 21
diff --git a/gradle/convention/src/main/kotlin/KotlinAndroidConvention.kt b/gradle/convention/src/main/kotlin/KotlinAndroidConvention.kt
index dbbe81b..ffb1526 100644
--- a/gradle/convention/src/main/kotlin/KotlinAndroidConvention.kt
+++ b/gradle/convention/src/main/kotlin/KotlinAndroidConvention.kt
@@ -21,10 +21,6 @@ class KotlinAndroidConvention : Plugin<Project> {
         kotlinOptions {
           freeCompilerArgs = freeCompilerArgs + listOf(
             "-opt-in=kotlin.RequiresOptIn",
-            // Enable experimental coroutines APIs, including Flow
-            "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
-            "-opt-in=kotlinx.coroutines.FlowPreview",
-            "-opt-in=androidx.compose.material3.ExperimentalMaterial3Api",
             "-opt-in=kotlin.ExperimentalUnsignedTypes",
           )
 
diff --git a/gradle/convention/src/main/kotlin/KotlinConvention.kt b/gradle/convention/src/main/kotlin/KotlinConvention.kt
index ce81fe9..5a48761 100644
--- a/gradle/convention/src/main/kotlin/KotlinConvention.kt
+++ b/gradle/convention/src/main/kotlin/KotlinConvention.kt
@@ -18,10 +18,6 @@ class KotlinConvention : Plugin<Project> {
       extensions.configure<KotlinJvmProjectExtension> {
         compilerOptions.freeCompilerArgs.addAll(
           "-opt-in=kotlin.RequiresOptIn",
-          // Enable experimental coroutines APIs, including Flow
-          "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
-          "-opt-in=kotlinx.coroutines.FlowPreview",
-          "-opt-in=kotlin.Experimental",
           "-opt-in=kotlin.ExperimentalUnsignedTypes",
         )
 
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index b20ab82..a32d359 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,24 +1,30 @@
 [versions]
-androidGradlePlugin = "8.1.4"
-androidx-activity = "1.8.1"
-androidx-appcompat = "1.6.1"
-androidx-compose = "1.6.0-beta02"
-androidx-compose-compiler = "1.5.5"
-androidx-compose-material3 = "1.2.0-alpha12"
-androidx-compose-runtimetracing = "1.0.0-beta01"
-androidx-datastore = "1.0.0"
-androidx-hilt = "1.1.0"
-androidx-navigation = "2.7.5"
-androidx-room = "2.6.1"
-coil = "2.4.0"
-dagger-hilt = "2.48.1"
-desugar-jdk = "2.0.4"
-kotlin = "1.9.20"
-kotlin-ksp = "1.9.20-1.0.14"
-kotlinxCoroutines = "1.7.1"
-kotlinxDatetime = "0.4.0"
-kotlinxSerializationJson = "1.5.1"
-junit = "5.10.0"
+kotlin = "2.1.21"
+kotlin-ksp = "2.1.21-2.0.1"
+kotlinxCoroutines = "1.10.2"
+kotlinxDatetime = "0.6.2"
+kotlinxSerializationJson = "1.8.1"
+
+androidGradlePlugin = "8.10.0"
+androidx-activity = "1.10.1"
+androidx-appcompat = "1.7.1"
+androidx-compose = "1.8.2"
+androidx-compose-compiler = "1.5.15"
+androidx-datastore = "1.1.7"
+androidx-navigation = "2.9.0"
+androidx-room = "2.7.1"
+androidx-splashscreen = "1.0.1"
+androidx-material3 = "1.3.2"
+androidx-material-icons = "1.7.8"
+
+dagger-hilt = "2.56.2"
+androidx-hilt = "1.2.0"
+
+coil = "3.2.0"
+desugar-jdk = "2.1.5"
+junit = "5.13.1"
+okhttp = "4.12.0"
+retrofit = "3.0.0"
 
 [libraries]
 androidx-activity = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity" }
@@ -30,20 +36,14 @@ androidx-appcompat-resources = { module = "androidx.appcompat:appcompat-resource
 androidx-compose-compiler = { module = "androidx.compose.compiler:compiler", version.ref = "androidx-compose-compiler" }
 androidx-compose-animation = { group = "androidx.compose.animation", name = "animation", version.ref = "androidx-compose" }
 androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "androidx-compose" }
-androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "androidx-compose" }
-androidx-compose-material-icons = { group = "androidx.compose.material", name = "material-icons-extended", version = "androidx-compose" }
-androidx-compose-material = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material3" }
-androidx-compose-material-windowSizeClass = { group = "androidx.compose.material3", name = "material3-window-size-class", version.ref = "androidx-compose-material3" }
+androidx-compose-material-icons = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "androidx-material-icons" }
+androidx-compose-material = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-material3" }
 androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "androidx-compose" }
-androidx-compose-runtime-livedata = { group = "androidx.compose.runtime", name = "runtime-livedata", version.ref = "androidx-compose" }
-androidx-compose-runtime-tracing = { group = "androidx.compose.runtime", name = "runtime-tracing", version.ref = "androidx-compose-runtimetracing" }
 androidx-compose-ui-test = { group = "androidx.compose.ui", name = "ui-test", version.ref = "androidx-compose" }
-androidx-compose-ui-testManifest = { group = "androidx.compose.ui", name = "ui-test-manifest", version.ref = "androidx-compose" }
 androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "androidx-compose" }
 androidx-compose-ui-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "androidx-compose" }
-androidx-compose-ui-util = { group = "androidx.compose.ui", name = "ui-util", version.ref = "androidx-compose" }
 
-androidx-splashscreen = { module = "androidx.core:core-splashscreen", version = "1.0.1" }
+androidx-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidx-splashscreen" }
 
 androidx-datastore-preferences = { module = "androidx.datastore:datastore-preferences", version.ref = "androidx-datastore" }
 
@@ -52,14 +52,15 @@ androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref =
 androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidx-room" }
 androidx-room-paging = { module = "androidx.room:room-paging", version.ref = "androidx-room" }
 
-coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coil" }
+coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" }
+coil-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil" }
 
 hilt-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "dagger-hilt" }
 hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "dagger-hilt" }
 hilt-navigation = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "androidx-hilt" }
-okhttp = { module = "com.squareup.okhttp3:okhttp", version = "4.12.0" }
-retrofit-core = { module = "com.squareup.retrofit2:retrofit", version = "2.9.0" }
-retrofit-converter-kotlinx = { module = "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter", version = "1.0.0" }
+okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okhttp" }
+retrofit-core = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" }
+retrofit-converter-kotlinx = { module = "com.squareup.retrofit2:converter-kotlinx-serialization", version.ref = "retrofit" }
 
 androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "androidx-navigation" }
 
@@ -89,3 +90,4 @@ dagger-hilt = { id = "com.google.dagger.hilt.android", version.ref = "dagger-hil
 kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
 kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
 kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "kotlin-ksp" }
+compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
-- 
GitLab