├── .fleet └── receipt.json ├── .github └── workflows │ └── build.yml ├── .gitignore ├── .kotlin └── metadata │ ├── kotlinTransformedCInteropMetadataLibraries │ ├── .composeApp-appleMain.cinteropLibraries │ ├── .composeApp-appleTest.cinteropLibraries │ ├── .composeApp-iosMain.cinteropLibraries │ ├── .composeApp-iosTest.cinteropLibraries │ ├── .composeApp-nativeMain.cinteropLibraries │ ├── .composeApp-nativeTest.cinteropLibraries │ ├── io.ktor-ktor-utils-2.3.8-iosMain-cinterop │ │ └── io.ktor_ktor-utils-cinterop-threadUtils-kaBnRw.klib │ ├── org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop │ │ └── org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib │ └── org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop │ │ └── org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib │ └── kotlinTransformedMetadataLibraries │ ├── androidx.annotation-annotation-1.7.0-commonMain-kNhS6A.klib │ ├── androidx.annotation-annotation-1.7.0-nonJvmMain-kNhS6A.klib │ ├── androidx.datastore-datastore-core-1.1.1-commonMain-F5wAkA.klib │ ├── androidx.datastore-datastore-core-1.1.1-nativeMain-F5wAkA.klib │ ├── androidx.datastore-datastore-core-okio-1.1.1-commonMain-o1WRng.klib │ ├── androidx.datastore-datastore-core-okio-1.1.1-nativeMain-o1WRng.klib │ ├── androidx.datastore-datastore-preferences-core-1.1.1-commonMain-4e89wQ.klib │ ├── androidx.datastore-datastore-preferences-core-1.1.1-nativeMain-4e89wQ.klib │ ├── co.touchlab-kermit-2.0.3-commonMain-PhOYsA.klib │ ├── co.touchlab-kermit-2.0.3-nativeMain-PhOYsA.klib │ ├── co.touchlab-kermit-core-2.0.3-appleMain-WBU2sg.klib │ ├── co.touchlab-kermit-core-2.0.3-commonMain-sXpuEA.klib │ ├── co.touchlab-kermit-core-2.0.3-nativeMain-sXpuEA.klib │ ├── co.touchlab-stately-concurrency-2.0.6-commonMain-CAw19g.klib │ ├── co.touchlab-stately-concurrency-2.0.6-darwinMain-oJtMMg.klib │ ├── co.touchlab-stately-concurrency-2.0.6-nativeCommonMain-CAw19g.klib │ ├── co.touchlab-stately-concurrent-collections-2.0.6-commonMain-cAetxQ.klib │ ├── co.touchlab-stately-strict-2.0.6-commonMain-0yIOhQ.klib │ ├── co.touchlab-stately-strict-2.0.6-nativeCommonMain-0yIOhQ.klib │ ├── com.ionspin.kotlin-bignum-0.3.9-commonMain-VZw5dw.klib │ ├── com.ionspin.kotlin-bignum-0.3.9-nativeMain-VZw5dw.klib │ ├── com.squareup.okio-okio-3.8.0-appleMain-BlIr1w.klib │ ├── com.squareup.okio-okio-3.8.0-commonMain-YgoO1Q.klib │ ├── com.squareup.okio-okio-3.8.0-hashFunctions-YgoO1Q.klib │ ├── com.squareup.okio-okio-3.8.0-nativeMain-YgoO1Q.klib │ ├── com.squareup.okio-okio-3.8.0-nonJvmMain-YgoO1Q.klib │ ├── com.squareup.okio-okio-3.8.0-unixMain-YgoO1Q.klib │ ├── io.coil-kt.coil3-coil-3.0.0-alpha06-commonMain-NwDnKQ.klib │ ├── io.coil-kt.coil3-coil-3.0.0-alpha06-nonAndroidMain-NwDnKQ.klib │ ├── io.coil-kt.coil3-coil-compose-3.0.0-alpha06-commonMain-AvZVXw.klib │ ├── io.coil-kt.coil3-coil-compose-core-3.0.0-alpha06-commonMain-ZZAbTA.klib │ ├── io.coil-kt.coil3-coil-compose-core-3.0.0-alpha06-nonAndroidMain-ZZAbTA.klib │ ├── io.coil-kt.coil3-coil-core-3.0.0-alpha06-commonMain-WBYwmA.klib │ ├── io.coil-kt.coil3-coil-core-3.0.0-alpha06-nativeMain-rhpzDw.klib │ ├── io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonAndroidMain-WBYwmA.klib │ ├── io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonJsCommonMain-WBYwmA.klib │ ├── io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonJvmCommonMain-WBYwmA.klib │ ├── io.coil-kt.coil3-coil-network-core-3.0.0-alpha06-commonMain-6ep4SA.klib │ ├── io.coil-kt.coil3-coil-network-core-3.0.0-alpha06-nonAndroidMain-6ep4SA.klib │ ├── io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-commonMain-owEVuw.klib │ ├── io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-nativeMain-djsvLg.klib │ ├── io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-nonJvmCommonMain-owEVuw.klib │ ├── io.github.thechance101-chart-Beta-0.0.5-commonMain-0_IXVA.klib │ ├── io.github.thechance101-chart-Beta-0.0.5-iosMain-ucKvFg.klib │ ├── io.insert-koin-koin-annotations-1.3.1-commonMain-hmfsMA.klib │ ├── io.insert-koin-koin-compose-1.2.0-alpha3-commonMain-DO_R0g.klib │ ├── io.insert-koin-koin-core-3.6.0-alpha3-commonMain-WmP6KA.klib │ ├── io.insert-koin-koin-core-3.6.0-alpha3-nativeMain-WmP6KA.klib │ ├── io.ktor-ktor-client-content-negotiation-2.3.2-commonMain-_3fuHg.klib │ ├── io.ktor-ktor-client-content-negotiation-2.3.2-posixMain-_3fuHg.klib │ ├── io.ktor-ktor-client-core-2.3.8-commonMain-FU-9lg.klib │ ├── io.ktor-ktor-client-core-2.3.8-posixMain-FU-9lg.klib │ ├── io.ktor-ktor-client-darwin-2.3.2-darwinMain-CnRCQQ.klib │ ├── io.ktor-ktor-client-logging-2.3.2-commonMain-g9h6jA.klib │ ├── io.ktor-ktor-client-logging-2.3.2-posixMain-g9h6jA.klib │ ├── io.ktor-ktor-events-2.3.8-commonMain-_htHDg.klib │ ├── io.ktor-ktor-http-2.3.8-commonMain-QgEQ0Q.klib │ ├── io.ktor-ktor-http-2.3.8-posixMain-QgEQ0Q.klib │ ├── io.ktor-ktor-io-2.3.8-commonMain-VFYQnA.klib │ ├── io.ktor-ktor-io-2.3.8-darwinMain-sbySvA.klib │ ├── io.ktor-ktor-io-2.3.8-posixMain-VFYQnA.klib │ ├── io.ktor-ktor-serialization-2.3.8-commonMain-NxrIfg.klib │ ├── io.ktor-ktor-serialization-kotlinx-2.3.2-commonMain-dHKAng.klib │ ├── io.ktor-ktor-serialization-kotlinx-2.3.2-posixMain-dHKAng.klib │ ├── io.ktor-ktor-serialization-kotlinx-json-2.3.2-commonMain-ClEcbA.klib │ ├── io.ktor-ktor-serialization-kotlinx-json-2.3.2-posixMain-ClEcbA.klib │ ├── io.ktor-ktor-utils-2.3.8-commonMain-jdPpcw.klib │ ├── io.ktor-ktor-utils-2.3.8-darwinMain-kaBnRw.klib │ ├── io.ktor-ktor-utils-2.3.8-nixMain-jdPpcw.klib │ ├── io.ktor-ktor-utils-2.3.8-posixMain-jdPpcw.klib │ ├── io.ktor-ktor-websocket-serialization-2.3.8-commonMain-8xBQEg.klib │ ├── io.ktor-ktor-websockets-2.3.8-commonMain-8-9-_g.klib │ ├── io.ktor-ktor-websockets-2.3.8-posixMain-8-9-_g.klib │ ├── org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-commonMain-cb_PMQ.klib │ ├── org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-jbMain-cb_PMQ.klib │ ├── org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-nativeMain-cb_PMQ.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-common-2.8.0-commonMain-_oGBew.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-common-2.8.0-nonJvmMain-_oGBew.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-commonMain-Cd-IGw.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-nativeMain-Cd-IGw.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-nonJvmMain-Cd-IGw.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-runtime-compose-2.8.0-commonMain-mvP4Vw.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-commonMain-ydSu5Q.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-nativeMain-ydSu5Q.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-nonJvmMain-ydSu5Q.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-compose-2.8.0-beta01-commonMain-207ecg.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-compose-2.8.0-beta01-jbMain-207ecg.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-savedstate-2.8.0-beta01-commonMain-KnkPTw.klib │ ├── org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-savedstate-2.8.0-beta01-jbMain-KnkPTw.klib │ ├── org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-commonMain-ehBiaA.klib │ ├── org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-darwinMain-lKvdpQ.klib │ ├── org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-jbMain-ehBiaA.klib │ ├── org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-nativeMain-ehBiaA.klib │ ├── org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-commonMain-Ynxpsg.klib │ ├── org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-jbMain-Ynxpsg.klib │ ├── org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-nativeMain-jw2VUA.klib │ ├── org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-commonMain-GH9lnw.klib │ ├── org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-jbMain-GH9lnw.klib │ ├── org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-nonJvmMain-GH9lnw.klib │ ├── org.jetbrains.androidx.savedstate-savedstate-1.2.0-beta01-commonMain-xMdm-g.klib │ ├── org.jetbrains.androidx.savedstate-savedstate-1.2.0-beta01-nonJvmMain-xMdm-g.klib │ ├── org.jetbrains.compose.animation-animation-1.6.10-commonMain-5jNXZw.klib │ ├── org.jetbrains.compose.animation-animation-1.6.10-jsNativeMain-5jNXZw.klib │ ├── org.jetbrains.compose.animation-animation-1.6.10-nativeMain-tpXTFg.klib │ ├── org.jetbrains.compose.animation-animation-core-1.6.10-commonMain-jNz1Aw.klib │ ├── org.jetbrains.compose.animation-animation-core-1.6.10-jbMain-jNz1Aw.klib │ ├── org.jetbrains.compose.animation-animation-core-1.6.10-jsNativeMain-jNz1Aw.klib │ ├── org.jetbrains.compose.animation-animation-core-1.6.10-uikitMain-2J6wbg.klib │ ├── org.jetbrains.compose.annotation-internal-annotation-1.6.10-commonMain-cNNKSA.klib │ ├── org.jetbrains.compose.annotation-internal-annotation-1.6.10-nonJvmMain-cNNKSA.klib │ ├── org.jetbrains.compose.collection-internal-collection-1.6.10-commonMain-hcu3Ug.klib │ ├── org.jetbrains.compose.collection-internal-collection-1.6.10-jbMain-hcu3Ug.klib │ ├── org.jetbrains.compose.collection-internal-collection-1.6.10-jsNativeMain-hcu3Ug.klib │ ├── org.jetbrains.compose.components-components-resources-1.6.10-blockingMain-44UCqg.klib │ ├── org.jetbrains.compose.components-components-resources-1.6.10-commonMain-44UCqg.klib │ ├── org.jetbrains.compose.components-components-resources-1.6.10-iosMain-mlvQUA.klib │ ├── org.jetbrains.compose.components-components-resources-1.6.10-nativeMain-mlvQUA.klib │ ├── org.jetbrains.compose.components-components-resources-1.6.10-skikoMain-44UCqg.klib │ ├── org.jetbrains.compose.components-components-ui-tooling-preview-1.6.10-commonMain--i3iSw.klib │ ├── org.jetbrains.compose.foundation-foundation-1.6.10-commonMain-dXXsCQ.klib │ ├── org.jetbrains.compose.foundation-foundation-1.6.10-darwinMain-aASdXg.klib │ ├── org.jetbrains.compose.foundation-foundation-1.6.10-jsNativeMain-dXXsCQ.klib │ ├── org.jetbrains.compose.foundation-foundation-1.6.10-nativeMain-aASdXg.klib │ ├── org.jetbrains.compose.foundation-foundation-1.6.10-skikoMain-dXXsCQ.klib │ ├── org.jetbrains.compose.foundation-foundation-1.6.10-uikitMain-aASdXg.klib │ ├── org.jetbrains.compose.foundation-foundation-layout-1.6.10-commonMain-89e7lw.klib │ ├── org.jetbrains.compose.foundation-foundation-layout-1.6.10-jsNativeMain-89e7lw.klib │ ├── org.jetbrains.compose.foundation-foundation-layout-1.6.10-skikoMain-89e7lw.klib │ ├── org.jetbrains.compose.foundation-foundation-layout-1.6.10-uikitMain-BKR0pA.klib │ ├── org.jetbrains.compose.material-material-1.6.10-commonMain-tGo7Ag.klib │ ├── org.jetbrains.compose.material-material-1.6.10-jsNativeMain-tGo7Ag.klib │ ├── org.jetbrains.compose.material-material-1.6.10-nativeMain-33WlwA.klib │ ├── org.jetbrains.compose.material-material-1.6.10-skikoMain-tGo7Ag.klib │ ├── org.jetbrains.compose.material-material-icons-core-1.6.10-commonMain-XjyzjQ.klib │ ├── org.jetbrains.compose.material-material-icons-extended-1.6.10-commonMain-qXLT1g.klib │ ├── org.jetbrains.compose.material-material-ripple-1.6.10-commonMain-8kHg7A.klib │ ├── org.jetbrains.compose.material-material-ripple-1.6.10-nativeMain-zsMeyQ.klib │ ├── org.jetbrains.compose.material3-material3-1.6.10-commonMain-0hrc0g.klib │ ├── org.jetbrains.compose.material3-material3-1.6.10-darwinMain-rFGDeg.klib │ ├── org.jetbrains.compose.material3-material3-1.6.10-jsNativeMain-0hrc0g.klib │ ├── org.jetbrains.compose.material3-material3-1.6.10-nativeMain-rFGDeg.klib │ ├── org.jetbrains.compose.material3-material3-1.6.10-skikoMain-0hrc0g.klib │ ├── org.jetbrains.compose.runtime-runtime-1.6.10-commonMain-CVJWAg.klib │ ├── org.jetbrains.compose.runtime-runtime-1.6.10-jbMain-CVJWAg.klib │ ├── org.jetbrains.compose.runtime-runtime-1.6.10-jsNativeMain-CVJWAg.klib │ ├── org.jetbrains.compose.runtime-runtime-1.6.10-nativeMain-CVJWAg.klib │ ├── org.jetbrains.compose.runtime-runtime-1.6.10-uikitMain-LSh9lw.klib │ ├── org.jetbrains.compose.runtime-runtime-saveable-1.6.10-commonMain-pCPplQ.klib │ ├── org.jetbrains.compose.ui-ui-1.6.10-commonMain-Eh674w.klib │ ├── org.jetbrains.compose.ui-ui-1.6.10-darwinMain-BVAqnw.klib │ ├── org.jetbrains.compose.ui-ui-1.6.10-jsNativeMain-Eh674w.klib │ ├── org.jetbrains.compose.ui-ui-1.6.10-nativeMain-BVAqnw.klib │ ├── org.jetbrains.compose.ui-ui-1.6.10-skikoMain-Eh674w.klib │ ├── org.jetbrains.compose.ui-ui-1.6.10-uikitMain-BVAqnw.klib │ ├── org.jetbrains.compose.ui-ui-geometry-1.6.10-commonMain-zDj2GQ.klib │ ├── org.jetbrains.compose.ui-ui-graphics-1.6.10-commonMain-jqr5iw.klib │ ├── org.jetbrains.compose.ui-ui-graphics-1.6.10-jsNativeMain-jqr5iw.klib │ ├── org.jetbrains.compose.ui-ui-graphics-1.6.10-nativeMain-M9RlEw.klib │ ├── org.jetbrains.compose.ui-ui-graphics-1.6.10-skikoExcludingWebMain-jqr5iw.klib │ ├── org.jetbrains.compose.ui-ui-graphics-1.6.10-skikoMain-jqr5iw.klib │ ├── org.jetbrains.compose.ui-ui-text-1.6.10-commonMain-aUvkxg.klib │ ├── org.jetbrains.compose.ui-ui-text-1.6.10-darwinMain-DK5x5Q.klib │ ├── org.jetbrains.compose.ui-ui-text-1.6.10-jsNativeMain-aUvkxg.klib │ ├── org.jetbrains.compose.ui-ui-text-1.6.10-nativeMain-DK5x5Q.klib │ ├── org.jetbrains.compose.ui-ui-text-1.6.10-skikoMain-aUvkxg.klib │ ├── org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-DC3XFw.klib │ ├── org.jetbrains.compose.ui-ui-unit-1.6.10-commonMain-vwDMdg.klib │ ├── org.jetbrains.compose.ui-ui-unit-1.6.10-jbMain-vwDMdg.klib │ ├── org.jetbrains.compose.ui-ui-unit-1.6.10-jsNativeMain-vwDMdg.klib │ ├── org.jetbrains.compose.ui-ui-util-1.6.10-commonMain-LLOBPg.klib │ ├── org.jetbrains.compose.ui-ui-util-1.6.10-uikitMain-4Hpl6Q.klib │ ├── org.jetbrains.kotlin-kotlin-stdlib-2.0.0-commonMain-2bbUHA.klib │ ├── org.jetbrains.kotlinx-atomicfu-0.23.2-commonMain-yBS35w.klib │ ├── org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-yBS35w.klib │ ├── org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-commonMain-UxhG-g.klib │ ├── org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-concurrentMain-UxhG-g.klib │ ├── org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-nativeDarwinMain-sy5nKg.klib │ ├── org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-nativeMain-UxhG-g.klib │ ├── org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-commonMain-iqDvsQ.klib │ ├── org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-darwinMain-FcA7tA.klib │ ├── org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-nativeMain-iqDvsQ.klib │ ├── org.jetbrains.kotlinx-kotlinx-serialization-core-1.6.3-commonMain-oyg_tw.klib │ ├── org.jetbrains.kotlinx-kotlinx-serialization-core-1.6.3-nativeMain-oyg_tw.klib │ ├── org.jetbrains.kotlinx-kotlinx-serialization-json-1.6.3-commonMain-JDnEfA.klib │ ├── org.jetbrains.kotlinx-kotlinx-serialization-json-1.6.3-nativeMain-JDnEfA.klib │ ├── org.jetbrains.kotlinx-kotlinx-serialization-protobuf-1.6.3-commonMain-a1M5Bg.klib │ ├── org.jetbrains.kotlinx-kotlinx-serialization-protobuf-1.6.3-nativeMain-a1M5Bg.klib │ ├── org.jetbrains.skiko-skiko-0.8.4-commonMain-DbI_Jg.klib │ ├── org.jetbrains.skiko-skiko-0.8.4-darwinMain-1T2ZCw.klib │ ├── org.jetbrains.skiko-skiko-0.8.4-iosMain-1T2ZCw.klib │ ├── org.jetbrains.skiko-skiko-0.8.4-nativeJsMain-DbI_Jg.klib │ └── org.jetbrains.skiko-skiko-0.8.4-nativeMain-DbI_Jg.klib ├── LICENSE ├── README.md ├── build.gradle.kts ├── composeApp ├── build.gradle.kts ├── settings_preferences.preferences_pb └── src │ ├── androidMain │ ├── AndroidManifest.xml │ ├── app_logo.png │ ├── kotlin │ │ ├── Platform.android.kt │ │ ├── com │ │ │ ├── ContextProvider.kt │ │ │ └── aritra │ │ │ │ └── coinify │ │ │ │ ├── Coinify.kt │ │ │ │ └── MainActivity.kt │ │ ├── data │ │ │ └── datastore │ │ │ │ └── DataStorePreferences.android.kt │ │ └── utils │ │ │ └── Utils.android.kt │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── coinify.xml │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── splash.xml │ │ └── strings.xml │ ├── commonMain │ ├── composeResources │ │ ├── drawable │ │ │ └── compose-multiplatform.xml │ │ ├── font │ │ │ ├── poppins_bold.ttf │ │ │ ├── poppins_extrabold.ttf │ │ │ ├── poppins_medium.ttf │ │ │ └── poppins_regular.ttf │ │ └── values │ │ │ └── strings.xml │ └── kotlin │ │ ├── App.kt │ │ ├── Platform.kt │ │ ├── component │ │ ├── ChartImage.kt │ │ ├── CoinChart.kt │ │ ├── CryptoCard.kt │ │ ├── LoadingDialog.kt │ │ ├── SearchBar.kt │ │ ├── SettingItem.kt │ │ ├── StatsCard.kt │ │ └── ThemeSelectionDialog.kt │ │ ├── data │ │ ├── datastore │ │ │ └── DataStorePreferences.kt │ │ └── remote │ │ │ ├── ApiClient.kt │ │ │ └── Resources.kt │ │ ├── di │ │ └── Koin.kt │ │ ├── domain │ │ ├── model │ │ │ ├── crypto │ │ │ │ ├── BTC.kt │ │ │ │ ├── Data.kt │ │ │ │ ├── Listings.kt │ │ │ │ ├── Platform.kt │ │ │ │ ├── Quote.kt │ │ │ │ ├── Status.kt │ │ │ │ └── USD.kt │ │ │ └── news │ │ │ │ ├── Data.kt │ │ │ │ ├── News.kt │ │ │ │ ├── RateLimit.kt │ │ │ │ └── SourceInfo.kt │ │ └── repository │ │ │ ├── CoinifyRepository.kt │ │ │ └── CryptoAPI.kt │ │ ├── navigation │ │ ├── BottomNavScreens.kt │ │ ├── Navigation.kt │ │ └── Screens.kt │ │ ├── presentation │ │ ├── details │ │ │ └── DetailsScreen.kt │ │ ├── home │ │ │ ├── HomeScreen.kt │ │ │ ├── HomeScreenShimmer.kt │ │ │ └── HomeViewModel.kt │ │ ├── news │ │ │ ├── NewsDetailsScreen.kt │ │ │ ├── NewsScreen.kt │ │ │ ├── NewsScreenShimmer.kt │ │ │ └── NewsViewModel.kt │ │ ├── settings │ │ │ ├── SettingsScreen.kt │ │ │ └── SettingsViewModel.kt │ │ └── stats │ │ │ ├── StatisticsScreen.kt │ │ │ └── StatisticsShimmerEffect.kt │ │ ├── ui │ │ ├── Color.kt │ │ ├── Theme.kt │ │ └── Typography.kt │ │ └── utils │ │ ├── Animation.kt │ │ ├── AppPreferences.kt │ │ ├── ApplicationComponent.kt │ │ ├── Constants.kt │ │ ├── CoroutinesComponent.kt │ │ ├── ThemeViewModel.kt │ │ ├── Utils.kt │ │ ├── formatData.kt │ │ └── formatTimeStamp.kt │ ├── desktopMain │ └── kotlin │ │ ├── Platform.jvm.kt │ │ ├── data │ │ └── datastore │ │ │ └── DataStorePreferences.desktop.kt │ │ ├── main.kt │ │ └── utils │ │ └── Utils.desktop.kt │ └── iosMain │ └── kotlin │ ├── MainViewController.kt │ ├── Platform.ios.kt │ ├── data │ └── datastore │ │ └── DataStorePreferences.ios.kt │ └── utils │ └── Utils.ios.kt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── icons ├── coinify_logo.icns ├── coinify_logo.ico └── coinify_logo.png ├── iosApp ├── Configuration │ └── Config.xcconfig ├── iosApp.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── iosApp │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ └── app-icon-1024.png │ ├── Contents.json │ └── coinify.imageset │ │ ├── Contents.json │ │ └── coinify.png │ ├── ContentView.swift │ ├── Info.plist │ ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json │ ├── SplashScreen.storyboard │ └── iOSApp.swift └── settings.gradle.kts /.fleet/receipt.json: -------------------------------------------------------------------------------- 1 | // Project generated by Kotlin Multiplatform Wizard 2 | { 3 | "spec": { 4 | "template_id": "kmt", 5 | "targets": { 6 | "android": { 7 | "ui": [ 8 | "compose" 9 | ] 10 | }, 11 | "ios": { 12 | "ui": [ 13 | "compose" 14 | ] 15 | }, 16 | "desktop": { 17 | "ui": [ 18 | "compose" 19 | ] 20 | } 21 | } 22 | }, 23 | "timestamp": "2024-05-14T13:06:34.075123874Z" 24 | } -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v4 11 | 12 | - name: Set up JDK 17 13 | uses: actions/setup-java@v4 14 | with: 15 | distribution: 'temurin' 16 | java-version: 17 17 | 18 | - name: Build 19 | uses: gradle/gradle-build-action@v2 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | **/build/ 4 | xcuserdata 5 | !src/**/build/ 6 | local.properties 7 | .idea 8 | .DS_Store 9 | captures 10 | .externalNativeBuild 11 | .cxx 12 | *.xcodeproj/* 13 | !*.xcodeproj/project.pbxproj 14 | !*.xcodeproj/xcshareddata/ 15 | !*.xcodeproj/project.xcworkspace/ 16 | !*.xcworkspace/contents.xcworkspacedata 17 | **/xcshareddata/WorkspaceSettings.xcsettings 18 | -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/.composeApp-appleMain.cinteropLibraries: -------------------------------------------------------------------------------- 1 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib 2 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib 3 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.11-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-TE4abA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/.composeApp-appleTest.cinteropLibraries: -------------------------------------------------------------------------------- 1 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib 2 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib 3 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.11-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-TE4abA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/.composeApp-iosMain.cinteropLibraries: -------------------------------------------------------------------------------- 1 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib 2 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib 3 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.11-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-TE4abA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/.composeApp-iosTest.cinteropLibraries: -------------------------------------------------------------------------------- 1 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib 2 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib 3 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.11-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-TE4abA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/.composeApp-nativeMain.cinteropLibraries: -------------------------------------------------------------------------------- 1 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib 2 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib 3 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.11-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-TE4abA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/.composeApp-nativeTest.cinteropLibraries: -------------------------------------------------------------------------------- 1 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib 2 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib 3 | /Users/aritra/StudioProjects/Coinify/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.11-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-TE4abA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.8-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-kaBnRw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/io.ktor-ktor-utils-2.3.8-iosMain-cinterop/io.ktor_ktor-utils-cinterop-threadUtils-kaBnRw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-cinterop/org.jetbrains.compose.ui_ui-uikit-cinterop-utils-DC3XFw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedCInteropMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-cinterop/org.jetbrains.kotlinx_atomicfu-cinterop-interop-yBS35w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.annotation-annotation-1.7.0-commonMain-kNhS6A.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.annotation-annotation-1.7.0-commonMain-kNhS6A.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.annotation-annotation-1.7.0-nonJvmMain-kNhS6A.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.annotation-annotation-1.7.0-nonJvmMain-kNhS6A.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-1.1.1-commonMain-F5wAkA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-1.1.1-commonMain-F5wAkA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-1.1.1-nativeMain-F5wAkA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-1.1.1-nativeMain-F5wAkA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-okio-1.1.1-commonMain-o1WRng.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-okio-1.1.1-commonMain-o1WRng.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-okio-1.1.1-nativeMain-o1WRng.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-core-okio-1.1.1-nativeMain-o1WRng.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-preferences-core-1.1.1-commonMain-4e89wQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-preferences-core-1.1.1-commonMain-4e89wQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-preferences-core-1.1.1-nativeMain-4e89wQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/androidx.datastore-datastore-preferences-core-1.1.1-nativeMain-4e89wQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-2.0.3-commonMain-PhOYsA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-2.0.3-commonMain-PhOYsA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-2.0.3-nativeMain-PhOYsA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-2.0.3-nativeMain-PhOYsA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-core-2.0.3-appleMain-WBU2sg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-core-2.0.3-appleMain-WBU2sg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-core-2.0.3-commonMain-sXpuEA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-core-2.0.3-commonMain-sXpuEA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-core-2.0.3-nativeMain-sXpuEA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-kermit-core-2.0.3-nativeMain-sXpuEA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrency-2.0.6-commonMain-CAw19g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrency-2.0.6-commonMain-CAw19g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrency-2.0.6-darwinMain-oJtMMg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrency-2.0.6-darwinMain-oJtMMg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrency-2.0.6-nativeCommonMain-CAw19g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrency-2.0.6-nativeCommonMain-CAw19g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrent-collections-2.0.6-commonMain-cAetxQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-concurrent-collections-2.0.6-commonMain-cAetxQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-strict-2.0.6-commonMain-0yIOhQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-strict-2.0.6-commonMain-0yIOhQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-strict-2.0.6-nativeCommonMain-0yIOhQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/co.touchlab-stately-strict-2.0.6-nativeCommonMain-0yIOhQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.ionspin.kotlin-bignum-0.3.9-commonMain-VZw5dw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.ionspin.kotlin-bignum-0.3.9-commonMain-VZw5dw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.ionspin.kotlin-bignum-0.3.9-nativeMain-VZw5dw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.ionspin.kotlin-bignum-0.3.9-nativeMain-VZw5dw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-appleMain-BlIr1w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-appleMain-BlIr1w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-commonMain-YgoO1Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-commonMain-YgoO1Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-hashFunctions-YgoO1Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-hashFunctions-YgoO1Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-nativeMain-YgoO1Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-nativeMain-YgoO1Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-nonJvmMain-YgoO1Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-nonJvmMain-YgoO1Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-unixMain-YgoO1Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/com.squareup.okio-okio-3.8.0-unixMain-YgoO1Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-3.0.0-alpha06-commonMain-NwDnKQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-3.0.0-alpha06-commonMain-NwDnKQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-3.0.0-alpha06-nonAndroidMain-NwDnKQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-3.0.0-alpha06-nonAndroidMain-NwDnKQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-compose-3.0.0-alpha06-commonMain-AvZVXw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-compose-3.0.0-alpha06-commonMain-AvZVXw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-compose-core-3.0.0-alpha06-commonMain-ZZAbTA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-compose-core-3.0.0-alpha06-commonMain-ZZAbTA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-compose-core-3.0.0-alpha06-nonAndroidMain-ZZAbTA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-compose-core-3.0.0-alpha06-nonAndroidMain-ZZAbTA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-commonMain-WBYwmA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-commonMain-WBYwmA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nativeMain-rhpzDw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nativeMain-rhpzDw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonAndroidMain-WBYwmA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonAndroidMain-WBYwmA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonJsCommonMain-WBYwmA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonJsCommonMain-WBYwmA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonJvmCommonMain-WBYwmA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-core-3.0.0-alpha06-nonJvmCommonMain-WBYwmA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-core-3.0.0-alpha06-commonMain-6ep4SA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-core-3.0.0-alpha06-commonMain-6ep4SA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-core-3.0.0-alpha06-nonAndroidMain-6ep4SA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-core-3.0.0-alpha06-nonAndroidMain-6ep4SA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-commonMain-owEVuw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-commonMain-owEVuw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-nativeMain-djsvLg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-nativeMain-djsvLg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-nonJvmCommonMain-owEVuw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.coil-kt.coil3-coil-network-ktor-3.0.0-alpha06-nonJvmCommonMain-owEVuw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.github.thechance101-chart-Beta-0.0.5-commonMain-0_IXVA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.github.thechance101-chart-Beta-0.0.5-commonMain-0_IXVA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.github.thechance101-chart-Beta-0.0.5-iosMain-ucKvFg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.github.thechance101-chart-Beta-0.0.5-iosMain-ucKvFg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-annotations-1.3.1-commonMain-hmfsMA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-annotations-1.3.1-commonMain-hmfsMA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-compose-1.2.0-alpha3-commonMain-DO_R0g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-compose-1.2.0-alpha3-commonMain-DO_R0g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-core-3.6.0-alpha3-commonMain-WmP6KA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-core-3.6.0-alpha3-commonMain-WmP6KA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-core-3.6.0-alpha3-nativeMain-WmP6KA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.insert-koin-koin-core-3.6.0-alpha3-nativeMain-WmP6KA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-content-negotiation-2.3.2-commonMain-_3fuHg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-content-negotiation-2.3.2-commonMain-_3fuHg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-content-negotiation-2.3.2-posixMain-_3fuHg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-content-negotiation-2.3.2-posixMain-_3fuHg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-core-2.3.8-commonMain-FU-9lg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-core-2.3.8-commonMain-FU-9lg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-core-2.3.8-posixMain-FU-9lg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-core-2.3.8-posixMain-FU-9lg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-darwin-2.3.2-darwinMain-CnRCQQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-darwin-2.3.2-darwinMain-CnRCQQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-logging-2.3.2-commonMain-g9h6jA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-logging-2.3.2-commonMain-g9h6jA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-logging-2.3.2-posixMain-g9h6jA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-client-logging-2.3.2-posixMain-g9h6jA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-events-2.3.8-commonMain-_htHDg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-events-2.3.8-commonMain-_htHDg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-http-2.3.8-commonMain-QgEQ0Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-http-2.3.8-commonMain-QgEQ0Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-http-2.3.8-posixMain-QgEQ0Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-http-2.3.8-posixMain-QgEQ0Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-io-2.3.8-commonMain-VFYQnA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-io-2.3.8-commonMain-VFYQnA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-io-2.3.8-darwinMain-sbySvA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-io-2.3.8-darwinMain-sbySvA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-io-2.3.8-posixMain-VFYQnA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-io-2.3.8-posixMain-VFYQnA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-2.3.8-commonMain-NxrIfg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-2.3.8-commonMain-NxrIfg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-2.3.2-commonMain-dHKAng.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-2.3.2-commonMain-dHKAng.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-2.3.2-posixMain-dHKAng.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-2.3.2-posixMain-dHKAng.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-json-2.3.2-commonMain-ClEcbA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-json-2.3.2-commonMain-ClEcbA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-json-2.3.2-posixMain-ClEcbA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-serialization-kotlinx-json-2.3.2-posixMain-ClEcbA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-commonMain-jdPpcw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-commonMain-jdPpcw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-darwinMain-kaBnRw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-darwinMain-kaBnRw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-nixMain-jdPpcw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-nixMain-jdPpcw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-posixMain-jdPpcw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-utils-2.3.8-posixMain-jdPpcw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-websocket-serialization-2.3.8-commonMain-8xBQEg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-websocket-serialization-2.3.8-commonMain-8xBQEg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-websockets-2.3.8-commonMain-8-9-_g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-websockets-2.3.8-commonMain-8-9-_g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-websockets-2.3.8-posixMain-8-9-_g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/io.ktor-ktor-websockets-2.3.8-posixMain-8-9-_g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-commonMain-cb_PMQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-commonMain-cb_PMQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-jbMain-cb_PMQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-jbMain-cb_PMQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-nativeMain-cb_PMQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.core-core-bundle-1.0.0-beta01-nativeMain-cb_PMQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-common-2.8.0-commonMain-_oGBew.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-common-2.8.0-commonMain-_oGBew.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-common-2.8.0-nonJvmMain-_oGBew.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-common-2.8.0-nonJvmMain-_oGBew.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-commonMain-Cd-IGw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-commonMain-Cd-IGw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-nativeMain-Cd-IGw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-nativeMain-Cd-IGw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-nonJvmMain-Cd-IGw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-2.8.0-nonJvmMain-Cd-IGw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-compose-2.8.0-commonMain-mvP4Vw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-runtime-compose-2.8.0-commonMain-mvP4Vw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-commonMain-ydSu5Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-commonMain-ydSu5Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-nativeMain-ydSu5Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-nativeMain-ydSu5Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-nonJvmMain-ydSu5Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-2.8.0-nonJvmMain-ydSu5Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-compose-2.8.0-beta01-commonMain-207ecg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-compose-2.8.0-beta01-commonMain-207ecg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-compose-2.8.0-beta01-jbMain-207ecg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-compose-2.8.0-beta01-jbMain-207ecg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-savedstate-2.8.0-beta01-commonMain-KnkPTw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-savedstate-2.8.0-beta01-commonMain-KnkPTw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-savedstate-2.8.0-beta01-jbMain-KnkPTw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.lifecycle-lifecycle-viewmodel-savedstate-2.8.0-beta01-jbMain-KnkPTw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-commonMain-ehBiaA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-commonMain-ehBiaA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-darwinMain-lKvdpQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-darwinMain-lKvdpQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-jbMain-ehBiaA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-jbMain-ehBiaA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-nativeMain-ehBiaA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-common-2.8.0-alpha02-nativeMain-ehBiaA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-commonMain-Ynxpsg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-commonMain-Ynxpsg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-jbMain-Ynxpsg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-jbMain-Ynxpsg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-nativeMain-jw2VUA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-compose-2.8.0-alpha02-nativeMain-jw2VUA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-commonMain-GH9lnw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-commonMain-GH9lnw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-jbMain-GH9lnw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-jbMain-GH9lnw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-nonJvmMain-GH9lnw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.navigation-navigation-runtime-2.8.0-alpha02-nonJvmMain-GH9lnw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.savedstate-savedstate-1.2.0-beta01-commonMain-xMdm-g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.savedstate-savedstate-1.2.0-beta01-commonMain-xMdm-g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.savedstate-savedstate-1.2.0-beta01-nonJvmMain-xMdm-g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.androidx.savedstate-savedstate-1.2.0-beta01-nonJvmMain-xMdm-g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-1.6.10-commonMain-5jNXZw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-1.6.10-commonMain-5jNXZw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-1.6.10-jsNativeMain-5jNXZw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-1.6.10-jsNativeMain-5jNXZw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-1.6.10-nativeMain-tpXTFg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-1.6.10-nativeMain-tpXTFg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-commonMain-jNz1Aw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-commonMain-jNz1Aw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-jbMain-jNz1Aw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-jbMain-jNz1Aw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-jsNativeMain-jNz1Aw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-jsNativeMain-jNz1Aw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-uikitMain-2J6wbg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.animation-animation-core-1.6.10-uikitMain-2J6wbg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.annotation-internal-annotation-1.6.10-commonMain-cNNKSA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.annotation-internal-annotation-1.6.10-commonMain-cNNKSA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.annotation-internal-annotation-1.6.10-nonJvmMain-cNNKSA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.annotation-internal-annotation-1.6.10-nonJvmMain-cNNKSA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.collection-internal-collection-1.6.10-commonMain-hcu3Ug.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.collection-internal-collection-1.6.10-commonMain-hcu3Ug.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.collection-internal-collection-1.6.10-jbMain-hcu3Ug.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.collection-internal-collection-1.6.10-jbMain-hcu3Ug.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.collection-internal-collection-1.6.10-jsNativeMain-hcu3Ug.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.collection-internal-collection-1.6.10-jsNativeMain-hcu3Ug.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-blockingMain-44UCqg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-blockingMain-44UCqg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-commonMain-44UCqg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-commonMain-44UCqg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-iosMain-mlvQUA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-iosMain-mlvQUA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-nativeMain-mlvQUA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-nativeMain-mlvQUA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-skikoMain-44UCqg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-resources-1.6.10-skikoMain-44UCqg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-ui-tooling-preview-1.6.10-commonMain--i3iSw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.components-components-ui-tooling-preview-1.6.10-commonMain--i3iSw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-commonMain-dXXsCQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-commonMain-dXXsCQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-darwinMain-aASdXg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-darwinMain-aASdXg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-jsNativeMain-dXXsCQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-jsNativeMain-dXXsCQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-nativeMain-aASdXg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-nativeMain-aASdXg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-skikoMain-dXXsCQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-skikoMain-dXXsCQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-uikitMain-aASdXg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-1.6.10-uikitMain-aASdXg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-commonMain-89e7lw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-commonMain-89e7lw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-jsNativeMain-89e7lw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-jsNativeMain-89e7lw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-skikoMain-89e7lw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-skikoMain-89e7lw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-uikitMain-BKR0pA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.foundation-foundation-layout-1.6.10-uikitMain-BKR0pA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-commonMain-tGo7Ag.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-commonMain-tGo7Ag.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-jsNativeMain-tGo7Ag.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-jsNativeMain-tGo7Ag.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-nativeMain-33WlwA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-nativeMain-33WlwA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-skikoMain-tGo7Ag.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-1.6.10-skikoMain-tGo7Ag.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-icons-core-1.6.10-commonMain-XjyzjQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-icons-core-1.6.10-commonMain-XjyzjQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-icons-extended-1.6.10-commonMain-qXLT1g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-icons-extended-1.6.10-commonMain-qXLT1g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-ripple-1.6.10-commonMain-8kHg7A.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-ripple-1.6.10-commonMain-8kHg7A.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-ripple-1.6.10-nativeMain-zsMeyQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material-material-ripple-1.6.10-nativeMain-zsMeyQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-commonMain-0hrc0g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-commonMain-0hrc0g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-darwinMain-rFGDeg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-darwinMain-rFGDeg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-jsNativeMain-0hrc0g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-jsNativeMain-0hrc0g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-nativeMain-rFGDeg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-nativeMain-rFGDeg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-skikoMain-0hrc0g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.material3-material3-1.6.10-skikoMain-0hrc0g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-commonMain-CVJWAg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-commonMain-CVJWAg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-jbMain-CVJWAg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-jbMain-CVJWAg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-jsNativeMain-CVJWAg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-jsNativeMain-CVJWAg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-nativeMain-CVJWAg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-nativeMain-CVJWAg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-uikitMain-LSh9lw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-1.6.10-uikitMain-LSh9lw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-saveable-1.6.10-commonMain-pCPplQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.runtime-runtime-saveable-1.6.10-commonMain-pCPplQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-commonMain-Eh674w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-commonMain-Eh674w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-darwinMain-BVAqnw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-darwinMain-BVAqnw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-jsNativeMain-Eh674w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-jsNativeMain-Eh674w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-nativeMain-BVAqnw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-nativeMain-BVAqnw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-skikoMain-Eh674w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-skikoMain-Eh674w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-uikitMain-BVAqnw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-1.6.10-uikitMain-BVAqnw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-geometry-1.6.10-commonMain-zDj2GQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-geometry-1.6.10-commonMain-zDj2GQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-commonMain-jqr5iw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-commonMain-jqr5iw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-jsNativeMain-jqr5iw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-jsNativeMain-jqr5iw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-nativeMain-M9RlEw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-nativeMain-M9RlEw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-skikoExcludingWebMain-jqr5iw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-skikoExcludingWebMain-jqr5iw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-skikoMain-jqr5iw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-graphics-1.6.10-skikoMain-jqr5iw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-commonMain-aUvkxg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-commonMain-aUvkxg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-darwinMain-DK5x5Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-darwinMain-DK5x5Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-jsNativeMain-aUvkxg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-jsNativeMain-aUvkxg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-nativeMain-DK5x5Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-nativeMain-DK5x5Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-skikoMain-aUvkxg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-text-1.6.10-skikoMain-aUvkxg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-DC3XFw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-uikit-1.6.10-uikitMain-DC3XFw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-unit-1.6.10-commonMain-vwDMdg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-unit-1.6.10-commonMain-vwDMdg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-unit-1.6.10-jbMain-vwDMdg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-unit-1.6.10-jbMain-vwDMdg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-unit-1.6.10-jsNativeMain-vwDMdg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-unit-1.6.10-jsNativeMain-vwDMdg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-util-1.6.10-commonMain-LLOBPg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-util-1.6.10-commonMain-LLOBPg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-util-1.6.10-uikitMain-4Hpl6Q.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.compose.ui-ui-util-1.6.10-uikitMain-4Hpl6Q.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlin-kotlin-stdlib-2.0.0-commonMain-2bbUHA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlin-kotlin-stdlib-2.0.0-commonMain-2bbUHA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-commonMain-yBS35w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-commonMain-yBS35w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-yBS35w.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-atomicfu-0.23.2-nativeMain-yBS35w.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-commonMain-UxhG-g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-commonMain-UxhG-g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-concurrentMain-UxhG-g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-concurrentMain-UxhG-g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-nativeDarwinMain-sy5nKg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-nativeDarwinMain-sy5nKg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-nativeMain-UxhG-g.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-coroutines-core-1.8.0-nativeMain-UxhG-g.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-commonMain-iqDvsQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-commonMain-iqDvsQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-darwinMain-FcA7tA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-darwinMain-FcA7tA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-nativeMain-iqDvsQ.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-datetime-0.5.0-nativeMain-iqDvsQ.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-core-1.6.3-commonMain-oyg_tw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-core-1.6.3-commonMain-oyg_tw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-core-1.6.3-nativeMain-oyg_tw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-core-1.6.3-nativeMain-oyg_tw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-json-1.6.3-commonMain-JDnEfA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-json-1.6.3-commonMain-JDnEfA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-json-1.6.3-nativeMain-JDnEfA.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-json-1.6.3-nativeMain-JDnEfA.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-protobuf-1.6.3-commonMain-a1M5Bg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-protobuf-1.6.3-commonMain-a1M5Bg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-protobuf-1.6.3-nativeMain-a1M5Bg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.kotlinx-kotlinx-serialization-protobuf-1.6.3-nativeMain-a1M5Bg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-commonMain-DbI_Jg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-commonMain-DbI_Jg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-darwinMain-1T2ZCw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-darwinMain-1T2ZCw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-iosMain-1T2ZCw.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-iosMain-1T2ZCw.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-nativeJsMain-DbI_Jg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-nativeJsMain-DbI_Jg.klib -------------------------------------------------------------------------------- /.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-nativeMain-DbI_Jg.klib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/.kotlin/metadata/kotlinTransformedMetadataLibraries/org.jetbrains.skiko-skiko-0.8.4-nativeMain-DbI_Jg.klib -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Aritra Das 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 | # Coinify 7 | 8 | [![Build](https://github.com/aritra-tech/Coinify/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/aritra-tech/Coinify/actions/workflows/build.yml) 9 | 10 | Coinify is a multiplatform app built by using Kotlin and Compose Multiplatform that provides real-time cryptocurrency data using the [CoinMarketCap](https://coinmarketcap.com/) API. It allows you to search for cryptocurrency data seamlessly across desktops (Windows, macOS), Android, and iOS. 11 | 12 | ## Built with 🛠️ 13 | 14 | - [Kotlin Multiplatform](https://kotlinlang.org/lp/multiplatform/) 15 | - [KTOR](https://ktor.io/) 16 | - [Koin](https://insert-koin.io/) 17 | - [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform/) 18 | - [Navigation](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-navigation-routing.html) 19 | - [ViewModel](https://www.jetbrains.com/help/kotlin-multiplatform-dev/whats-new-compose-eap.html#lifecycle-library) 20 | - [KotlinX Serialization](https://kotlinlang.org/docs/serialization.html) 21 | - [Coroutines](https://discuss.kotlinlang.org/t/coroutines-with-multiplatform-projects/18006) 22 | - [Kermit](https://github.com/touchlab/Kermit) 23 | - [AAY-chart](https://github.com/TheChance101/AAY-chart) 24 | - [BuildKonfig](https://github.com/yshrsmz/BuildKonfig) 25 | 26 | ## Recording: 27 | 28 | https://github.com/aritra-tech/Coinify/assets/80090908/41bb2392-f8e0-43c0-869b-8924c82c6a81 29 | 30 | ## Development 🛠️ 31 | 32 | ### Pre-requisites 33 | 34 | - Java JDK 17+ 35 | - Latest stable version of Android Studio IDE 36 | - Latest XCode (_for iOS_) 37 | - CoinMarketCap API Key (_Get it from [here](https://coinmarketcap.com/api/)_) 38 | 39 | ### Setup 40 | 41 | - Clone this repository. 42 | - Open in the _latest version_ of Android Studio. 43 | - Place your CoinMarketCap API key in `local.properties` file as `API_KEY` property. 44 | 45 | Example: 46 | 47 | ```properties 48 | API_KEY=YOUR_API_KEY 49 | ``` 50 | 51 | ### Understanding the Code Structure: 52 | - commonMain: Contains platform-agnostic code, including data models, network logic, and core business logic. 53 | - androidMain: Specific code for the Android platform, such as UI components using Compose. 54 | - desktopMain: Specific code for desktop platforms (Windows and macOS), likely using Compose for desktop as well. 55 | - iosMain: Specific code for the iOS platform, potentially using Compose for iOS (still under development). 56 | 57 | ## License 58 | 59 | ``` 60 | MIT License 61 | 62 | Copyright (c) 2024 Aritra Das 63 | 64 | Permission is hereby granted, free of charge, to any person obtaining a copy 65 | of this software and associated documentation files (the "Software"), to deal 66 | in the Software without restriction, including without limitation the rights 67 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 68 | copies of the Software, and to permit persons to whom the Software is 69 | furnished to do so, subject to the following conditions: 70 | 71 | The above copyright notice and this permission notice shall be included in all 72 | copies or substantial portions of the Software. 73 | 74 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 75 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 76 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 77 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 78 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 79 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 80 | SOFTWARE. 81 | ``` 82 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | // this is necessary to avoid the plugins to be loaded multiple times 3 | // in each subproject's classloader 4 | alias(libs.plugins.androidApplication) apply false 5 | alias(libs.plugins.androidLibrary) apply false 6 | alias(libs.plugins.jetbrainsCompose) apply false 7 | alias(libs.plugins.kotlinMultiplatform) apply false 8 | } -------------------------------------------------------------------------------- /composeApp/settings_preferences.preferences_pb: -------------------------------------------------------------------------------- 1 | 2 | 3 | AppPreferencesprefsBoolean -------------------------------------------------------------------------------- /composeApp/src/androidMain/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 15 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 31 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /composeApp/src/androidMain/app_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/app_logo.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/Platform.android.kt: -------------------------------------------------------------------------------- 1 | import android.os.Build 2 | 3 | class AndroidPlatform : Platform { 4 | override val name: String = "Android ${Build.VERSION.SDK_INT}" 5 | } 6 | 7 | actual fun getPlatform(): Platform = AndroidPlatform() -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/com/ContextProvider.kt: -------------------------------------------------------------------------------- 1 | package com 2 | 3 | import android.content.Context 4 | import androidx.startup.Initializer 5 | 6 | internal lateinit var applicationContext: Context 7 | private set 8 | 9 | data object ContextProviderInitializer 10 | 11 | class ContextProvider : Initializer { 12 | override fun create(context: Context): ContextProviderInitializer { 13 | applicationContext = context.applicationContext 14 | return ContextProviderInitializer 15 | } 16 | 17 | override fun dependencies(): List>> = emptyList() 18 | 19 | } 20 | -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/com/aritra/coinify/Coinify.kt: -------------------------------------------------------------------------------- 1 | package com.aritra.coinify 2 | 3 | import android.app.Application 4 | import utils.ApplicationComponent 5 | 6 | class Coinify : Application() { 7 | override fun onCreate() { 8 | super.onCreate() 9 | ApplicationComponent.init() 10 | } 11 | } -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/com/aritra/coinify/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.aritra.coinify 2 | 3 | import App 4 | import android.os.Bundle 5 | import androidx.activity.ComponentActivity 6 | import androidx.activity.compose.setContent 7 | import androidx.compose.runtime.Composable 8 | import androidx.compose.ui.tooling.preview.Preview 9 | import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen 10 | 11 | class MainActivity : ComponentActivity() { 12 | override fun onCreate(savedInstanceState: Bundle?) { 13 | super.onCreate(savedInstanceState) 14 | installSplashScreen() 15 | setContent { 16 | App() 17 | } 18 | } 19 | } 20 | 21 | @Preview 22 | @Composable 23 | fun AppAndroidPreview() { 24 | App() 25 | } -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/data/datastore/DataStorePreferences.android.kt: -------------------------------------------------------------------------------- 1 | package data.datastore 2 | 3 | import androidx.datastore.core.DataMigration 4 | import androidx.datastore.core.DataStore 5 | import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler 6 | import androidx.datastore.preferences.core.Preferences 7 | import com.applicationContext 8 | import kotlinx.coroutines.CoroutineScope 9 | import java.io.File 10 | 11 | actual fun dataStorePreferences( 12 | corruptionHandler: ReplaceFileCorruptionHandler?, 13 | coroutineScope: CoroutineScope, 14 | migrations: List> 15 | ): DataStore = createDataStoreWithDefaults( 16 | corruptionHandler = corruptionHandler, 17 | migrations = migrations, 18 | coroutineScope = coroutineScope, 19 | path = { 20 | File(applicationContext.filesDir, "datastore/$SETTINGS_PREFERENCES").path 21 | } 22 | ) -------------------------------------------------------------------------------- /composeApp/src/androidMain/kotlin/utils/Utils.android.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.lifecycle.ViewModel 4 | import org.koin.androidx.viewmodel.dsl.viewModel 5 | import org.koin.core.definition.Definition 6 | import org.koin.core.definition.KoinDefinition 7 | import org.koin.core.module.Module 8 | import org.koin.core.qualifier.Qualifier 9 | 10 | actual inline fun Module.viewModelDefinition( 11 | qualifier: Qualifier?, 12 | noinline definition: Definition, 13 | ): KoinDefinition = viewModel(qualifier = qualifier, definition = definition) -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/androidMain/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/values/splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /composeApp/src/androidMain/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Coinify 3 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/drawable/compose-multiplatform.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 18 | 24 | 30 | 36 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/font/poppins_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/commonMain/composeResources/font/poppins_bold.ttf -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/font/poppins_extrabold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/commonMain/composeResources/font/poppins_extrabold.ttf -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/font/poppins_medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/commonMain/composeResources/font/poppins_medium.ttf -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/font/poppins_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/composeApp/src/commonMain/composeResources/font/poppins_regular.ttf -------------------------------------------------------------------------------- /composeApp/src/commonMain/composeResources/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Coinify 3 | Statistics 4 | Current Price 5 | Market Cap 6 | Volume 24h 7 | Max Supply 8 | Total Supply 9 | Theme 10 | Invite others 11 | Top Movers 12 | Top Losing 13 | Market Trends 14 | Search for coins 15 | Loading... 16 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/App.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.foundation.isSystemInDarkTheme 2 | import androidx.compose.foundation.layout.Box 3 | import androidx.compose.foundation.layout.fillMaxSize 4 | import androidx.compose.runtime.Composable 5 | import androidx.compose.runtime.collectAsState 6 | import androidx.compose.runtime.getValue 7 | import androidx.compose.ui.Modifier 8 | import di.appModule 9 | import navigation.Navigation 10 | import org.jetbrains.compose.ui.tooling.preview.Preview 11 | import org.koin.compose.KoinApplication 12 | import org.koin.compose.koinInject 13 | import ui.CoinifyTheme 14 | import utils.ThemeViewModel 15 | 16 | @Composable 17 | @Preview 18 | fun App() { 19 | 20 | KoinApplication(application = { 21 | modules(appModule) 22 | }) { 23 | val themeViewModel: ThemeViewModel = koinInject() 24 | val isDarkModeEnabled by themeViewModel.currentTheme.collectAsState(isSystemInDarkTheme()) 25 | 26 | CoinifyTheme( 27 | darkTheme = isDarkModeEnabled 28 | ) { 29 | MainContent() 30 | } 31 | } 32 | } 33 | 34 | @Composable 35 | fun MainContent() { 36 | Box(modifier = Modifier.fillMaxSize()) { 37 | Navigation() 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/Platform.kt: -------------------------------------------------------------------------------- 1 | interface Platform { 2 | val name: String 3 | } 4 | 5 | expect fun getPlatform(): Platform -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/ChartImage.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.runtime.Composable 4 | import androidx.compose.ui.Modifier 5 | import androidx.compose.ui.graphics.Color 6 | import androidx.compose.ui.graphics.ColorFilter 7 | import androidx.compose.ui.layout.ContentScale 8 | import coil3.compose.AsyncImage 9 | 10 | @Composable 11 | fun ChartImage( 12 | modifier: Modifier = Modifier, 13 | id: Int, 14 | tintColor: Color 15 | ) { 16 | 17 | AsyncImage( 18 | modifier = modifier, 19 | model = "https://s3.coinmarketcap.com/generated/sparklines/web/7d/2781/$id.svg", 20 | contentDescription = null, 21 | contentScale = ContentScale.FillWidth, 22 | colorFilter = ColorFilter.tint(color = tintColor) 23 | ) 24 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/CoinChart.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.foundation.layout.Arrangement 4 | import androidx.compose.foundation.layout.Column 5 | import androidx.compose.foundation.layout.fillMaxWidth 6 | import androidx.compose.foundation.layout.height 7 | import androidx.compose.runtime.Composable 8 | import androidx.compose.ui.Alignment 9 | import androidx.compose.ui.Modifier 10 | import androidx.compose.ui.graphics.Color 11 | import androidx.compose.ui.text.TextStyle 12 | import androidx.compose.ui.text.font.FontFamily 13 | import androidx.compose.ui.unit.dp 14 | import androidx.compose.ui.unit.sp 15 | import coinify.composeapp.generated.resources.Res 16 | import coinify.composeapp.generated.resources.poppins_regular 17 | import com.aay.compose.baseComponents.model.GridOrientation 18 | import com.aay.compose.baseComponents.model.LegendPosition 19 | import com.aay.compose.lineChart.LineChart 20 | import com.aay.compose.lineChart.model.LineParameters 21 | import com.aay.compose.lineChart.model.LineType 22 | import domain.model.crypto.Data 23 | import org.jetbrains.compose.resources.Font 24 | import kotlin.math.abs 25 | import kotlin.random.Random 26 | 27 | @Composable 28 | fun CoinChart(data: Data, selectedDuration: String) { 29 | val durationMappingData = when(selectedDuration) { 30 | "1HR" -> listOf( 31 | data.quote.USD.percentChange1h, 32 | data.quote.USD.percentChange24h, 33 | data.quote.USD.percentChange7d, 34 | data.quote.USD.percentChange30d, 35 | data.quote.USD.percentChange60d, 36 | data.quote.USD.percentChange90d, 37 | ) 38 | 39 | "1D" -> listOf( 40 | Random.nextDouble(0.0,7.0), 41 | data.quote.USD.percentChange24h, 42 | data.quote.USD.percentChange7d, 43 | data.quote.USD.percentChange30d, 44 | data.quote.USD.percentChange60d, 45 | data.quote.USD.percentChange90d, 46 | ) 47 | 48 | "1W" -> listOf( 49 | Random.nextDouble(0.0,7.0), 50 | Random.nextDouble(0.0,7.0), 51 | data.quote.USD.percentChange7d, 52 | data.quote.USD.percentChange30d, 53 | data.quote.USD.percentChange60d, 54 | data.quote.USD.percentChange90d, 55 | ) 56 | 57 | "1M" -> listOf( 58 | Random.nextDouble(0.0,7.0), 59 | Random.nextDouble(0.0,7.0), 60 | Random.nextDouble(0.0,7.0), 61 | data.quote.USD.percentChange30d, 62 | data.quote.USD.percentChange60d, 63 | data.quote.USD.percentChange90d, 64 | ) 65 | 66 | "2M" -> listOf( 67 | Random.nextDouble(0.0,7.0), 68 | Random.nextDouble(0.0,7.0), 69 | Random.nextDouble(0.0,7.0), 70 | Random.nextDouble(0.0,7.0), 71 | data.quote.USD.percentChange60d, 72 | data.quote.USD.percentChange90d, 73 | ) 74 | 75 | "3M" -> listOf( 76 | Random.nextDouble(0.0,7.0), 77 | Random.nextDouble(0.0,7.0), 78 | Random.nextDouble(0.0,7.0), 79 | Random.nextDouble(0.0,7.0), 80 | Random.nextDouble(0.0,7.0), 81 | data.quote.USD.percentChange90d, 82 | ) 83 | 84 | else -> emptyList() 85 | } 86 | 87 | val durationList = mutableListOf() 88 | durationList.add(data.quote.USD.percentChange1h) 89 | durationList.add(data.quote.USD.percentChange24h) 90 | durationList.add(data.quote.USD.percentChange7d) 91 | durationList.add(data.quote.USD.percentChange30d) 92 | durationList.add(data.quote.USD.percentChange60d) 93 | durationList.add(data.quote.USD.percentChange90d) 94 | val listOfData = durationMappingData.map { abs(it) } 95 | 96 | val testLineParameters: List = listOf( 97 | LineParameters( 98 | label = "Price", 99 | data = listOfData, 100 | lineColor = Color.Green, 101 | lineType = LineType.CURVED_LINE, 102 | lineShadow = false 103 | ) 104 | ) 105 | 106 | Column( 107 | modifier = Modifier.fillMaxWidth(), 108 | horizontalAlignment = Alignment.CenterHorizontally, 109 | verticalArrangement = Arrangement.Center 110 | ) { 111 | LineChart( 112 | modifier = Modifier.fillMaxWidth() 113 | .height(270.dp), 114 | linesParameters = testLineParameters, 115 | isGrid = false, 116 | gridColor = Color.LightGray, 117 | animateChart = true, 118 | showGridWithSpacer = false, 119 | legendPosition = LegendPosition.TOP, 120 | yAxisStyle = TextStyle( 121 | fontSize = 14.sp, 122 | color = Color.Gray, 123 | fontFamily = FontFamily(Font(Res.font.poppins_regular)) 124 | ), 125 | xAxisData = listOf( 126 | "2019", 127 | "2020", 128 | "2021", 129 | "2022", 130 | "2023", 131 | "2024" 132 | ), 133 | xAxisStyle = TextStyle( 134 | fontSize = 14.sp, 135 | color = Color.Gray, 136 | fontFamily = FontFamily(Font(Res.font.poppins_regular)) 137 | ), 138 | yAxisRange = 6, 139 | oneLineChart = false, 140 | gridOrientation = GridOrientation.VERTICAL 141 | ) 142 | } 143 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/CryptoCard.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.clickable 5 | import androidx.compose.foundation.layout.Arrangement 6 | import androidx.compose.foundation.layout.Column 7 | import androidx.compose.foundation.layout.Row 8 | import androidx.compose.foundation.layout.Spacer 9 | import androidx.compose.foundation.layout.fillMaxWidth 10 | import androidx.compose.foundation.layout.padding 11 | import androidx.compose.foundation.layout.size 12 | import androidx.compose.foundation.layout.width 13 | import androidx.compose.foundation.shape.RoundedCornerShape 14 | import androidx.compose.material.icons.Icons 15 | import androidx.compose.material.icons.filled.ArrowDownward 16 | import androidx.compose.material.icons.filled.ArrowUpward 17 | import androidx.compose.material3.Icon 18 | import androidx.compose.material3.MaterialTheme 19 | import androidx.compose.material3.Text 20 | import androidx.compose.runtime.Composable 21 | import androidx.compose.ui.Alignment 22 | import androidx.compose.ui.Modifier 23 | import androidx.compose.ui.draw.clip 24 | import androidx.compose.ui.graphics.Color 25 | import androidx.compose.ui.layout.ContentScale 26 | import androidx.compose.ui.text.TextStyle 27 | import androidx.compose.ui.text.font.FontFamily 28 | import androidx.compose.ui.text.style.TextOverflow 29 | import androidx.compose.ui.unit.dp 30 | import androidx.compose.ui.unit.sp 31 | import coil3.compose.AsyncImage 32 | import coinify.composeapp.generated.resources.Res 33 | import coinify.composeapp.generated.resources.poppins_medium 34 | import coinify.composeapp.generated.resources.poppins_regular 35 | import domain.model.crypto.Data 36 | import kotlinx.serialization.encodeToString 37 | import kotlinx.serialization.json.Json 38 | import org.jetbrains.compose.resources.Font 39 | import kotlin.math.roundToInt 40 | 41 | @Composable 42 | fun CryptoCard( 43 | data: Data, 44 | onClick: (String) -> Unit 45 | ) { 46 | 47 | val percentChange24h = data.quote.USD.percentChange24h 48 | val textColor24h = if (percentChange24h > 0) Color.Green else Color.Red 49 | val jsonData = Json.encodeToString(data) 50 | val icon = if (percentChange24h > 0) { 51 | Icons.Default.ArrowUpward 52 | } else { 53 | Icons.Default.ArrowDownward 54 | } 55 | 56 | val iconColor = if (percentChange24h > 0) { 57 | Color.Green 58 | } else { 59 | Color.Red 60 | } 61 | 62 | Column( 63 | modifier = Modifier.fillMaxWidth() 64 | .clip(RoundedCornerShape(10.dp)) 65 | .background(MaterialTheme.colorScheme.surfaceContainer) 66 | .clickable { onClick(jsonData) } 67 | .padding(16.dp), 68 | horizontalAlignment = Alignment.Start, 69 | verticalArrangement = Arrangement.Center 70 | ) { 71 | Row( 72 | modifier = Modifier.fillMaxWidth(), 73 | horizontalArrangement = Arrangement.Start, 74 | verticalAlignment = Alignment.CenterVertically 75 | ) { 76 | AsyncImage( 77 | modifier = Modifier.size(40.dp), 78 | model = "https://s2.coinmarketcap.com/static/img/coins/64x64/${data.id}.png", 79 | contentDescription = null, 80 | contentScale = ContentScale.Fit 81 | ) 82 | 83 | Spacer(modifier = Modifier.width(14.dp)) 84 | 85 | Column( 86 | horizontalAlignment = Alignment.Start, 87 | verticalArrangement = Arrangement.SpaceBetween 88 | ) { 89 | Text( 90 | text = data.name, 91 | maxLines = 1, 92 | overflow = TextOverflow.Ellipsis, 93 | style = TextStyle( 94 | color = MaterialTheme.colorScheme.onSurface, 95 | fontSize = 14.sp, 96 | fontFamily = FontFamily(Font(Res.font.poppins_medium)) 97 | ) 98 | ) 99 | 100 | Text( 101 | text = data.symbol ?: "", 102 | style = TextStyle( 103 | color = MaterialTheme.colorScheme.onSurface, 104 | fontSize = 12.sp, 105 | fontFamily = FontFamily(Font(Res.font.poppins_regular)) 106 | ) 107 | ) 108 | } 109 | 110 | Spacer(modifier = Modifier.weight(1f)) 111 | 112 | Column( 113 | horizontalAlignment = Alignment.End, 114 | verticalArrangement = Arrangement.Center 115 | ) { 116 | Text( 117 | text = "$" + "${((data.quote.USD.price?.times(100))?.roundToInt())?.div(100.0)}", 118 | style = TextStyle( 119 | color = MaterialTheme.colorScheme.onSurface, 120 | fontSize = 14.sp, 121 | fontFamily = FontFamily(Font(Res.font.poppins_medium)) 122 | ) 123 | ) 124 | 125 | Row { 126 | Text( 127 | text = "${percentChange24h.roundToInt()}%", 128 | color = textColor24h 129 | ) 130 | 131 | Icon( 132 | icon, 133 | contentDescription = "Back button", 134 | tint = iconColor 135 | ) 136 | } 137 | 138 | } 139 | 140 | } 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/LoadingDialog.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.foundation.layout.Column 4 | import androidx.compose.foundation.layout.Spacer 5 | import androidx.compose.foundation.layout.fillMaxWidth 6 | import androidx.compose.foundation.layout.padding 7 | import androidx.compose.foundation.layout.wrapContentHeight 8 | import androidx.compose.material3.AlertDialogDefaults 9 | import androidx.compose.material3.BasicAlertDialog 10 | import androidx.compose.material3.CircularProgressIndicator 11 | import androidx.compose.material3.ExperimentalMaterial3Api 12 | import androidx.compose.material3.MaterialTheme 13 | import androidx.compose.material3.Surface 14 | import androidx.compose.material3.Text 15 | import androidx.compose.runtime.Composable 16 | import androidx.compose.ui.Alignment 17 | import androidx.compose.ui.Modifier 18 | import androidx.compose.ui.text.TextStyle 19 | import androidx.compose.ui.unit.dp 20 | import androidx.compose.ui.unit.sp 21 | import coinify.composeapp.generated.resources.Res 22 | import coinify.composeapp.generated.resources.loading 23 | import org.jetbrains.compose.resources.stringResource 24 | 25 | @OptIn(ExperimentalMaterial3Api::class) 26 | @Composable 27 | fun LoadingDialog() { 28 | BasicAlertDialog( 29 | onDismissRequest = { }, 30 | ) { 31 | Surface( 32 | modifier = Modifier 33 | .fillMaxWidth() 34 | .padding(horizontal = 18.dp) 35 | .wrapContentHeight(), 36 | shape = MaterialTheme.shapes.large, 37 | tonalElevation = AlertDialogDefaults.TonalElevation, 38 | ) { 39 | Column( 40 | modifier = Modifier.padding(vertical = 28.dp, horizontal = 16.dp), 41 | horizontalAlignment = Alignment.CenterHorizontally 42 | ) { 43 | Text( 44 | text = stringResource(Res.string.loading), 45 | style = TextStyle(color = MaterialTheme.colorScheme.onSecondaryContainer, fontSize = 20.sp) 46 | ) 47 | Spacer(modifier = Modifier.padding(12.dp)) 48 | CircularProgressIndicator() 49 | } 50 | } 51 | } 52 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/SearchBar.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.animation.AnimatedVisibility 4 | import androidx.compose.foundation.layout.Box 5 | import androidx.compose.foundation.layout.fillMaxWidth 6 | import androidx.compose.foundation.shape.CircleShape 7 | import androidx.compose.foundation.text.KeyboardActions 8 | import androidx.compose.foundation.text.KeyboardOptions 9 | import androidx.compose.material.icons.Icons 10 | import androidx.compose.material.icons.automirrored.filled.Send 11 | import androidx.compose.material.icons.filled.Search 12 | import androidx.compose.material3.Icon 13 | import androidx.compose.material3.IconButton 14 | import androidx.compose.material3.MaterialTheme 15 | import androidx.compose.material3.Text 16 | import androidx.compose.material3.TextField 17 | import androidx.compose.material3.TextFieldDefaults 18 | import androidx.compose.runtime.Composable 19 | import androidx.compose.ui.Modifier 20 | import androidx.compose.ui.draw.clip 21 | import androidx.compose.ui.graphics.Color 22 | import androidx.compose.ui.platform.LocalSoftwareKeyboardController 23 | import androidx.compose.ui.text.TextStyle 24 | import androidx.compose.ui.text.input.ImeAction 25 | import coinify.composeapp.generated.resources.Res 26 | import coinify.composeapp.generated.resources.search_for_coins 27 | import org.jetbrains.compose.resources.stringResource 28 | 29 | @Composable 30 | fun SearchBar( 31 | search: String, 32 | modifier: Modifier = Modifier, 33 | onValueChange: (String) -> Unit, 34 | onSearchClick: () -> Unit 35 | ) { 36 | 37 | val keyboardController = LocalSoftwareKeyboardController.current 38 | 39 | Box( 40 | modifier = modifier 41 | .fillMaxWidth() 42 | .clip(CircleShape) 43 | 44 | ) { 45 | TextField( 46 | modifier = Modifier.fillMaxWidth(), 47 | value = search, 48 | onValueChange = onValueChange, 49 | colors = TextFieldDefaults.colors( 50 | unfocusedContainerColor = MaterialTheme.colorScheme.surfaceContainer, 51 | unfocusedTextColor = MaterialTheme.colorScheme.onSecondaryContainer, 52 | focusedContainerColor = MaterialTheme.colorScheme.surfaceContainer, 53 | focusedTextColor = MaterialTheme.colorScheme.onSecondaryContainer, 54 | focusedIndicatorColor = Color.Transparent, 55 | unfocusedIndicatorColor = Color.Transparent, 56 | disabledIndicatorColor = Color.Transparent 57 | ), 58 | singleLine = true, 59 | leadingIcon = { Icon(imageVector = Icons.Default.Search, contentDescription = "") }, 60 | trailingIcon = { 61 | AnimatedVisibility(search.isNotEmpty()) { 62 | IconButton(onClick = { 63 | if (search.isNotEmpty()) { 64 | onSearchClick() 65 | } 66 | }) { 67 | Icon( 68 | imageVector = Icons.AutoMirrored.Filled.Send, 69 | contentDescription = "Search", 70 | tint = MaterialTheme.colorScheme.onSecondaryContainer 71 | ) 72 | } 73 | } 74 | }, 75 | keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), 76 | keyboardActions = KeyboardActions( 77 | onSearch = { 78 | if (search.isNotEmpty()) { 79 | keyboardController?.hide() 80 | onSearchClick() 81 | } 82 | } 83 | ), 84 | placeholder = { 85 | Text( 86 | text = stringResource(Res.string.search_for_coins), 87 | style = TextStyle(color = MaterialTheme.colorScheme.onSecondaryContainer) 88 | ) 89 | } 90 | ) 91 | } 92 | 93 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/SettingItem.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.foundation.Image 4 | import androidx.compose.foundation.clickable 5 | import androidx.compose.foundation.layout.Arrangement 6 | import androidx.compose.foundation.layout.Row 7 | import androidx.compose.foundation.layout.fillMaxWidth 8 | import androidx.compose.foundation.layout.padding 9 | import androidx.compose.foundation.layout.size 10 | import androidx.compose.material.Text 11 | import androidx.compose.material3.MaterialTheme 12 | import androidx.compose.runtime.Composable 13 | import androidx.compose.ui.Alignment 14 | import androidx.compose.ui.Modifier 15 | import androidx.compose.ui.graphics.Color 16 | import androidx.compose.ui.graphics.ColorFilter 17 | import androidx.compose.ui.graphics.vector.ImageVector 18 | import androidx.compose.ui.text.TextStyle 19 | import androidx.compose.ui.text.font.FontWeight 20 | import androidx.compose.ui.unit.dp 21 | import androidx.compose.ui.unit.sp 22 | 23 | @Composable 24 | fun SettingItem( 25 | onClick: () -> Unit, 26 | imageVector: ImageVector, 27 | itemName: String, 28 | itemColor: Color = MaterialTheme.colorScheme.onSurface 29 | ) { 30 | 31 | Row( 32 | modifier = Modifier 33 | .fillMaxWidth() 34 | .clickable { onClick() } 35 | .padding(16.dp), 36 | horizontalArrangement = Arrangement.spacedBy(16.dp, Alignment.Start), 37 | verticalAlignment = Alignment.CenterVertically, 38 | ) { 39 | Image( 40 | modifier = Modifier.size(24.dp), 41 | imageVector = imageVector, 42 | contentDescription = null, 43 | colorFilter = ColorFilter.tint(color = itemColor) 44 | ) 45 | Text( 46 | text = itemName, 47 | style = TextStyle( 48 | color = itemColor, 49 | fontSize = 16.sp, 50 | fontWeight = FontWeight.Normal 51 | ) 52 | ) 53 | } 54 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/StatsCard.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.clickable 5 | import androidx.compose.foundation.layout.Arrangement 6 | import androidx.compose.foundation.layout.Column 7 | import androidx.compose.foundation.layout.Row 8 | import androidx.compose.foundation.layout.Spacer 9 | import androidx.compose.foundation.layout.fillMaxWidth 10 | import androidx.compose.foundation.layout.height 11 | import androidx.compose.foundation.layout.padding 12 | import androidx.compose.foundation.layout.size 13 | import androidx.compose.foundation.layout.width 14 | import androidx.compose.foundation.shape.RoundedCornerShape 15 | import androidx.compose.material.icons.Icons 16 | import androidx.compose.material.icons.filled.ArrowDownward 17 | import androidx.compose.material.icons.filled.ArrowUpward 18 | import androidx.compose.material3.Icon 19 | import androidx.compose.material3.MaterialTheme 20 | import androidx.compose.material3.Text 21 | import androidx.compose.runtime.Composable 22 | import androidx.compose.runtime.remember 23 | import androidx.compose.ui.Alignment 24 | import androidx.compose.ui.Modifier 25 | import androidx.compose.ui.draw.clip 26 | import androidx.compose.ui.graphics.Color 27 | import androidx.compose.ui.text.font.FontFamily 28 | import androidx.compose.ui.unit.dp 29 | import coinify.composeapp.generated.resources.Res 30 | import coinify.composeapp.generated.resources.poppins_medium 31 | import coinify.composeapp.generated.resources.poppins_regular 32 | import domain.model.crypto.Data 33 | import kotlinx.serialization.encodeToString 34 | import kotlinx.serialization.json.Json 35 | import org.jetbrains.compose.resources.Font 36 | import kotlin.math.roundToInt 37 | 38 | @Composable 39 | fun StatsCard( 40 | data: Data, 41 | onClick: (String) -> Unit 42 | ) { 43 | val encodedData = remember(data) { Json.encodeToString(data) } 44 | val percentage24h = data.quote.USD.percentChange24h 45 | val textColor24h = if (percentage24h > 0) Color.Green else Color.Red 46 | 47 | Column( 48 | modifier = Modifier 49 | .width(200.dp) 50 | .height(130.dp) 51 | .clip(RoundedCornerShape(10.dp)) 52 | .background(MaterialTheme.colorScheme.surfaceContainer) 53 | .clickable { onClick(encodedData) } 54 | .padding(16.dp), 55 | horizontalAlignment = Alignment.Start, 56 | verticalArrangement = Arrangement.SpaceBetween 57 | ) { 58 | 59 | Column( 60 | horizontalAlignment = Alignment.Start 61 | ) { 62 | Row( 63 | modifier = Modifier.fillMaxWidth(), 64 | horizontalArrangement = Arrangement.SpaceBetween 65 | ) { 66 | Text( 67 | text = data.name, 68 | style = MaterialTheme.typography.bodyMedium.copy( 69 | fontFamily = FontFamily(Font(Res.font.poppins_medium)) 70 | ) 71 | ) 72 | 73 | Spacer(modifier = Modifier.weight(1f)) 74 | 75 | val formattedPrice = data.quote.USD.price?.times(100)?.roundToInt()?.div(100.0) 76 | Text( 77 | text = "$ $formattedPrice", 78 | style = MaterialTheme.typography.bodyMedium.copy( 79 | fontFamily = FontFamily(Font(Res.font.poppins_regular)) 80 | ) 81 | ) 82 | } 83 | 84 | Text( 85 | text = "${data.symbol}", 86 | style = MaterialTheme.typography.bodySmall.copy( 87 | fontFamily = FontFamily(Font(Res.font.poppins_regular)) 88 | ) 89 | ) 90 | } 91 | 92 | Row( 93 | modifier = Modifier.fillMaxWidth(), 94 | verticalAlignment = Alignment.CenterVertically, 95 | horizontalArrangement = Arrangement.End 96 | ) { 97 | Icon( 98 | imageVector = if (percentage24h > 0) Icons.Default.ArrowUpward else Icons.Default.ArrowDownward, 99 | contentDescription = if (percentage24h > 0) "Gain" else "Loss", 100 | tint = textColor24h, 101 | modifier = Modifier.size(20.dp) 102 | ) 103 | Text( 104 | text = "${percentage24h.roundToInt()}%", 105 | color = textColor24h, 106 | style = MaterialTheme.typography.bodySmall.copy( 107 | fontFamily = FontFamily(Font(Res.font.poppins_medium)) 108 | ) 109 | ) 110 | } 111 | } 112 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/component/ThemeSelectionDialog.kt: -------------------------------------------------------------------------------- 1 | package component 2 | 3 | import androidx.compose.foundation.layout.Arrangement 4 | import androidx.compose.foundation.layout.Column 5 | import androidx.compose.foundation.layout.Row 6 | import androidx.compose.foundation.layout.Spacer 7 | import androidx.compose.foundation.layout.fillMaxWidth 8 | import androidx.compose.foundation.layout.height 9 | import androidx.compose.foundation.layout.padding 10 | import androidx.compose.foundation.layout.width 11 | import androidx.compose.foundation.layout.wrapContentHeight 12 | import androidx.compose.foundation.layout.wrapContentWidth 13 | import androidx.compose.material3.AlertDialogDefaults 14 | import androidx.compose.material3.BasicAlertDialog 15 | import androidx.compose.material3.ExperimentalMaterial3Api 16 | import androidx.compose.material3.MaterialTheme 17 | import androidx.compose.material3.RadioButton 18 | import androidx.compose.material3.RadioButtonDefaults 19 | import androidx.compose.material3.Surface 20 | import androidx.compose.material3.Text 21 | import androidx.compose.material3.TextButton 22 | import androidx.compose.runtime.Composable 23 | import androidx.compose.runtime.getValue 24 | import androidx.compose.runtime.mutableStateOf 25 | import androidx.compose.runtime.remember 26 | import androidx.compose.runtime.setValue 27 | import androidx.compose.ui.Alignment 28 | import androidx.compose.ui.Modifier 29 | import androidx.compose.ui.text.TextStyle 30 | import androidx.compose.ui.unit.dp 31 | import androidx.compose.ui.unit.sp 32 | import utils.onClick 33 | 34 | @OptIn(ExperimentalMaterial3Api::class) 35 | @Composable 36 | fun ThemeSelectionDialog( 37 | onThemeChange: (Theme) -> Unit, 38 | onDismissRequest: () -> Unit, 39 | currentTheme: Theme 40 | ) { 41 | 42 | var currentSelectedTheme by remember { mutableStateOf(currentTheme) } 43 | 44 | BasicAlertDialog( 45 | onDismissRequest = onDismissRequest, 46 | content = { 47 | Surface( 48 | modifier = Modifier 49 | .wrapContentWidth() 50 | .wrapContentHeight(), 51 | shape = MaterialTheme.shapes.large, 52 | tonalElevation = AlertDialogDefaults.TonalElevation 53 | ) { 54 | Column(modifier = Modifier.padding(16.dp)) { 55 | 56 | Text( 57 | text = "Choose a theme", 58 | style = TextStyle(fontSize = 20.sp), 59 | modifier = Modifier.padding(8.dp) 60 | ) 61 | 62 | Row( 63 | modifier = Modifier.fillMaxWidth().onClick { currentSelectedTheme = Theme.Light }, 64 | horizontalArrangement = Arrangement.Start, 65 | verticalAlignment = Alignment.CenterVertically 66 | ) { 67 | RadioButton( 68 | selected = currentSelectedTheme == Theme.Light, 69 | onClick = { currentSelectedTheme = Theme.Light}, 70 | colors = RadioButtonDefaults.colors( 71 | selectedColor = MaterialTheme.colorScheme.primary 72 | ) 73 | ) 74 | Text(text = "Light Mode") 75 | } 76 | 77 | Row( 78 | modifier = Modifier.fillMaxWidth().onClick { currentSelectedTheme = Theme.Dark }, 79 | horizontalArrangement = Arrangement.Start, 80 | verticalAlignment = Alignment.CenterVertically 81 | ) { 82 | RadioButton( 83 | selected = currentSelectedTheme == Theme.Dark, 84 | onClick = { currentSelectedTheme = Theme.Dark }, 85 | colors = RadioButtonDefaults.colors( 86 | selectedColor = MaterialTheme.colorScheme.primary 87 | ) 88 | ) 89 | Text(text = "Dark Mode") 90 | } 91 | 92 | Spacer(modifier = Modifier.height(24.dp)) 93 | 94 | Row( 95 | modifier = Modifier.fillMaxWidth(), 96 | horizontalArrangement = Arrangement.End 97 | ) { 98 | TextButton(onClick = onDismissRequest) { 99 | Text(text = "Cancel") 100 | } 101 | Spacer(modifier = Modifier.width(16.dp)) 102 | TextButton(onClick = { onThemeChange(currentSelectedTheme) }) { 103 | Text(text = "Apply") 104 | } 105 | } 106 | } 107 | } 108 | } 109 | ) 110 | } 111 | 112 | enum class Theme { 113 | Light, Dark 114 | } 115 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/data/datastore/DataStorePreferences.kt: -------------------------------------------------------------------------------- 1 | package data.datastore 2 | 3 | import androidx.datastore.core.DataMigration 4 | import androidx.datastore.core.DataStore 5 | import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler 6 | import androidx.datastore.preferences.core.PreferenceDataStoreFactory 7 | import androidx.datastore.preferences.core.Preferences 8 | import kotlinx.coroutines.CoroutineScope 9 | import kotlinx.coroutines.Dispatchers 10 | import kotlinx.coroutines.IO 11 | import kotlinx.coroutines.SupervisorJob 12 | import okio.Path.Companion.toPath 13 | 14 | expect fun dataStorePreferences( 15 | corruptionHandler: ReplaceFileCorruptionHandler?, 16 | coroutineScope: CoroutineScope, 17 | migrations: List>, 18 | ): DataStore 19 | 20 | internal const val SETTINGS_PREFERENCES = "settings_preferences.preferences_pb" 21 | 22 | internal fun createDataStoreWithDefaults( 23 | corruptionHandler: ReplaceFileCorruptionHandler? = null, 24 | coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO + SupervisorJob()), 25 | migrations: List> = emptyList(), 26 | path: () -> String, 27 | ) = PreferenceDataStoreFactory 28 | .createWithPath( 29 | corruptionHandler = corruptionHandler, 30 | scope = coroutineScope, 31 | migrations = migrations, 32 | produceFile = { 33 | path().toPath() 34 | } 35 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/data/remote/ApiClient.kt: -------------------------------------------------------------------------------- 1 | package data.remote 2 | 3 | import domain.model.crypto.Listings 4 | import domain.model.news.News 5 | import io.ktor.client.HttpClient 6 | import io.ktor.client.call.body 7 | import io.ktor.client.request.get 8 | import utils.Constants.BASE_URL 9 | import utils.Constants.NEWS_URL 10 | 11 | class ApiClient(private val client: HttpClient) { 12 | 13 | suspend fun getListings(): Listings { 14 | return client.get(BASE_URL + "cryptocurrency/listings/latest").body() 15 | } 16 | 17 | suspend fun getAllNews(): News { 18 | return client.get(NEWS_URL + "v2/news/?lang=EN").body() 19 | } 20 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/data/remote/Resources.kt: -------------------------------------------------------------------------------- 1 | package data.remote 2 | 3 | sealed class Resources { 4 | data class SUCCESS(val response: T) : Resources() 5 | data class ERROR(val message: String): Resources() 6 | object LOADING: Resources() 7 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/di/Koin.kt: -------------------------------------------------------------------------------- 1 | package di 2 | 3 | import com.aritra.coinify.BuildKonfig.API_KEY 4 | import data.remote.ApiClient 5 | import domain.repository.CoinifyRepository 6 | import io.ktor.client.HttpClient 7 | import io.ktor.client.plugins.HttpTimeout 8 | import io.ktor.client.plugins.contentnegotiation.ContentNegotiation 9 | import io.ktor.client.plugins.defaultRequest 10 | import io.ktor.client.plugins.logging.LogLevel 11 | import io.ktor.client.plugins.logging.Logger 12 | import io.ktor.client.plugins.logging.Logging 13 | import io.ktor.client.request.headers 14 | import io.ktor.http.HttpHeaders 15 | import io.ktor.serialization.kotlinx.json.json 16 | import kotlinx.serialization.ExperimentalSerializationApi 17 | import kotlinx.serialization.json.Json 18 | import org.koin.dsl.module 19 | import presentation.home.HomeViewModel 20 | import presentation.news.NewsViewModel 21 | import presentation.settings.SettingsViewModel 22 | import utils.Constants.REQUEST_TIME_OUT 23 | import utils.ThemeViewModel 24 | import utils.coreComponent 25 | import utils.viewModelDefinition 26 | 27 | @OptIn(ExperimentalSerializationApi::class) 28 | val appModule = module { 29 | single { 30 | HttpClient { 31 | install(ContentNegotiation) { 32 | json( 33 | json = Json { 34 | prettyPrint = true 35 | isLenient = false 36 | ignoreUnknownKeys = true 37 | coerceInputValues = true 38 | explicitNulls = true 39 | } 40 | ) 41 | } 42 | install(Logging) { 43 | level = LogLevel.ALL 44 | logger = object : Logger { 45 | override fun log(message: String) { 46 | println(message) 47 | } 48 | } 49 | // filter { filter-> filter.url.host.contains("coinmarketcap.com") } 50 | // sanitizeHeader { header-> header == HttpHeaders.Authorization } 51 | } 52 | install(HttpTimeout) { 53 | requestTimeoutMillis = REQUEST_TIME_OUT 54 | connectTimeoutMillis = REQUEST_TIME_OUT 55 | socketTimeoutMillis = REQUEST_TIME_OUT 56 | } 57 | defaultRequest { 58 | headers { 59 | append("X-CMC_PRO_API_KEY", API_KEY) 60 | } 61 | } 62 | } 63 | } 64 | single { CoinifyRepository(get()) } 65 | single { ApiClient(get()) } 66 | single { coreComponent.appPreferences } 67 | 68 | viewModelDefinition { HomeViewModel(get()) } 69 | viewModelDefinition { SettingsViewModel(get()) } 70 | viewModelDefinition { ThemeViewModel(get()) } 71 | viewModelDefinition { NewsViewModel(get()) } 72 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/BTC.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class BTC( 8 | @SerialName("price") val price: Double? = null, 9 | @SerialName("volume_24h") val volume24h: Double? = null, 10 | @SerialName("volume_change_24h") val volumeChange24h: Double? = null, 11 | @SerialName("percent_change_1h") val percentChange1h: Double? = null, 12 | @SerialName("percent_change_24h") val percentChange24h: Double? = null, 13 | @SerialName("percent_change_7d") val percentChange7d: Double? = null, 14 | @SerialName("market_cap") val marketCap: Double? = null, 15 | @SerialName("market_cap_dominance") val marketCapDominance: Double? = null, 16 | @SerialName("fully_diluted_market_cap") val fullyDilutedMarketCap: Double? = null, 17 | @SerialName("last_updated") val lastUpdated: String? = null 18 | ) 19 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/Data.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class Data( 8 | @SerialName("id") val id: Int, 9 | @SerialName("name") val name: String, 10 | @SerialName("symbol") val symbol: String? = null, 11 | @SerialName("slug") val slug: String? = null, 12 | @SerialName("cmc_rank") val cmcRank: Int? = null, 13 | @SerialName("num_market_pairs") val numMarketPairs: Int? = null, 14 | @SerialName("circulating_supply") val circulatingSupply: Double? = null, 15 | @SerialName("total_supply") val totalSupply: Double? = null, 16 | @SerialName("max_supply") val maxSupply: Double = 0.0, 17 | @SerialName("infinite_supply") val infiniteSupply: Boolean? = null, 18 | @SerialName("last_updated") val lastUpdated: String? = null, 19 | @SerialName("date_added") val dateAdded: String? = null, 20 | @SerialName("tags") val tags: List = listOf(), 21 | @SerialName("platform") val platform: Platform? = null, 22 | @SerialName("self_reported_circulating_supply") val selfReportedCirculatingSupply: Double? = null, 23 | @SerialName("self_reported_market_cap") val selfReportedMarketCap: Double? = null, 24 | @SerialName("quote") val quote: Quote = Quote() 25 | ) 26 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/Listings.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class Listings( 8 | @SerialName("data") 9 | val data: List = listOf(), 10 | @SerialName("status") 11 | val status: Status = Status() 12 | ) 13 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/Platform.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class Platform( 8 | @SerialName("id") val id: Int? = null, 9 | @SerialName("name") val name: String? = null, 10 | @SerialName("symbol") val symbol: String? = null, 11 | @SerialName("slug") val slug: String? = null, 12 | @SerialName("token_address") val tokenAddress: String? = null 13 | ) 14 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/Quote.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | import kotlinx.serialization.SerialName 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Quote( 7 | @SerialName("USD") val USD: USD = USD(), 8 | @SerialName("BTC") val BTC: BTC = BTC() 9 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/Status.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | import kotlinx.serialization.SerialName 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class Status( 7 | @SerialName("timestamp") val timestamp: String? = null, 8 | @SerialName("error_code") val errorCode: Int? = null, 9 | @SerialName("error_message") val errorMessage: String? = null, 10 | @SerialName("elapsed") val elapsed: Int? = null, 11 | @SerialName("credit_count") val creditCount: Int? = null 12 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/crypto/USD.kt: -------------------------------------------------------------------------------- 1 | package domain.model.crypto 2 | import kotlinx.serialization.SerialName 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | data class USD( 7 | @SerialName("price") val price: Double? = null, 8 | @SerialName("volume_24h") val volume24h: Double? = null, 9 | @SerialName("volume_change_24h") val volumeChange24h: Double? = null, 10 | @SerialName("percent_change_1h") val percentChange1h: Double = 0.0, 11 | @SerialName("percent_change_24h") val percentChange24h: Double = 0.0, 12 | @SerialName("percent_change_7d") val percentChange7d: Double = 0.0, 13 | @SerialName("percent_change_30d") val percentChange30d: Double = 0.0, 14 | @SerialName("percent_change_60d") val percentChange60d: Double = 0.0, 15 | @SerialName("percent_change_90d") val percentChange90d: Double = 0.0, 16 | @SerialName("market_cap") val marketCap: Double? = null, 17 | @SerialName("market_cap_dominance") val marketCapDominance: Double? = null, 18 | @SerialName("fully_diluted_market_cap") val fullyDilutedMarketCap: Double? = null, 19 | @SerialName("last_updated") val lastUpdated: String? = null 20 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/news/Data.kt: -------------------------------------------------------------------------------- 1 | package domain.model.news 2 | 3 | 4 | import kotlinx.serialization.SerialName 5 | import kotlinx.serialization.Serializable 6 | 7 | @Serializable 8 | data class Data( 9 | @SerialName("body") 10 | val body: String = "", 11 | @SerialName("categories") 12 | val categories: String = "", 13 | @SerialName("downvotes") 14 | val downvotes: String = "", 15 | @SerialName("guid") 16 | val guid: String = "", 17 | @SerialName("id") 18 | val id: String = "", 19 | @SerialName("imageurl") 20 | val imageurl: String = "", 21 | @SerialName("lang") 22 | val lang: String = "", 23 | @SerialName("published_on") 24 | val publishedOn: Int = 0, 25 | @SerialName("source") 26 | val source: String = "", 27 | @SerialName("source_info") 28 | val sourceInfo: SourceInfo = SourceInfo(), 29 | @SerialName("tags") 30 | val tags: String = "", 31 | @SerialName("title") 32 | val title: String = "", 33 | @SerialName("upvotes") 34 | val upvotes: String = "", 35 | @SerialName("url") 36 | val url: String = "" 37 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/news/News.kt: -------------------------------------------------------------------------------- 1 | package domain.model.news 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class News ( 8 | @SerialName("Data") 9 | val `data`: List = listOf(), 10 | @SerialName("HasWarning") 11 | val hasWarning: Boolean = false, 12 | @SerialName("Message") 13 | val message: String = "", 14 | @SerialName("Promoted") 15 | val promoted: List = listOf(), 16 | @SerialName("RateLimit") 17 | val rateLimit: RateLimit = RateLimit(), 18 | @SerialName("Type") 19 | val type: Int = 0 20 | ) 21 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/news/RateLimit.kt: -------------------------------------------------------------------------------- 1 | package domain.model.news 2 | 3 | import kotlinx.serialization.Serializable 4 | 5 | @Serializable 6 | class RateLimit 7 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/model/news/SourceInfo.kt: -------------------------------------------------------------------------------- 1 | package domain.model.news 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class SourceInfo ( 8 | @SerialName("img") 9 | val img: String = "", 10 | @SerialName("lang") 11 | val lang: String = "", 12 | @SerialName("name") 13 | val name: String = "" 14 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/repository/CoinifyRepository.kt: -------------------------------------------------------------------------------- 1 | package domain.repository 2 | 3 | import data.remote.ApiClient 4 | import domain.model.crypto.Listings 5 | import domain.model.news.News 6 | 7 | class CoinifyRepository( 8 | private val apiClient: ApiClient 9 | ): CryptoAPI { 10 | 11 | override suspend fun getListing(): Listings { 12 | return apiClient.getListings() 13 | } 14 | 15 | override suspend fun getAllNews(): News { 16 | return apiClient.getAllNews() 17 | } 18 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/domain/repository/CryptoAPI.kt: -------------------------------------------------------------------------------- 1 | package domain.repository 2 | 3 | import domain.model.crypto.Listings 4 | import domain.model.news.News 5 | 6 | interface CryptoAPI { 7 | suspend fun getListing(): Listings 8 | suspend fun getAllNews(): News 9 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/navigation/BottomNavScreens.kt: -------------------------------------------------------------------------------- 1 | package navigation 2 | 3 | import androidx.compose.material.icons.Icons 4 | import androidx.compose.material.icons.filled.Home 5 | import androidx.compose.material.icons.filled.Newspaper 6 | import androidx.compose.material.icons.filled.Settings 7 | import androidx.compose.material.icons.outlined.StackedLineChart 8 | import androidx.compose.ui.graphics.vector.ImageVector 9 | 10 | sealed class BottomNavScreens(val route: String, val icon: ImageVector, val title: String) { 11 | data object Home: BottomNavScreens(Screens.Home.route, Icons.Default.Home,"Home") 12 | data object Statistics: BottomNavScreens(Screens.Statistics.route, Icons.Outlined.StackedLineChart, "Statistics") 13 | data object Settings: BottomNavScreens(Screens.Settings.route, Icons.Default.Settings, "Settings") 14 | data object News: BottomNavScreens(Screens.News.route, Icons.Default.Newspaper, "News") 15 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/navigation/Screens.kt: -------------------------------------------------------------------------------- 1 | package navigation 2 | 3 | sealed class Screens(val route: String) { 4 | data object Home : Screens("home_screen") 5 | data object Details : Screens("details_screen") 6 | data object News: Screens("news_screens") 7 | data object NewsDetails: Screens("news_details_screen") 8 | data object Settings : Screens("settings_screen") 9 | data object Statistics : Screens("stats_screen") 10 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/home/HomeScreenShimmer.kt: -------------------------------------------------------------------------------- 1 | package presentation.home 2 | 3 | import androidx.compose.animation.core.* 4 | import androidx.compose.foundation.background 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.shape.CircleShape 7 | import androidx.compose.foundation.shape.RoundedCornerShape 8 | import androidx.compose.material3.MaterialTheme 9 | import androidx.compose.runtime.Composable 10 | import androidx.compose.ui.Alignment 11 | import androidx.compose.ui.Modifier 12 | import androidx.compose.ui.draw.clip 13 | import androidx.compose.ui.geometry.Offset 14 | import androidx.compose.ui.graphics.Brush 15 | import androidx.compose.ui.graphics.Color 16 | import androidx.compose.ui.unit.dp 17 | import org.jetbrains.compose.ui.tooling.preview.Preview 18 | 19 | @Preview 20 | @Composable 21 | fun HomeScreenShimmer() { 22 | val shimmerColors = listOf( 23 | Color.LightGray.copy(alpha = 0.6f), 24 | Color.LightGray.copy(alpha = 0.2f), 25 | Color.LightGray.copy(alpha = 0.6f), 26 | ) 27 | 28 | val transition = rememberInfiniteTransition() 29 | val translateAnim = transition.animateFloat( 30 | initialValue = 0f, 31 | targetValue = 1000f, 32 | animationSpec = infiniteRepeatable( 33 | animation = tween(durationMillis = 1200, easing = FastOutSlowInEasing), 34 | repeatMode = RepeatMode.Restart 35 | ) 36 | ) 37 | 38 | val brush = Brush.linearGradient( 39 | colors = shimmerColors, 40 | start = Offset.Zero, 41 | end = Offset(x = translateAnim.value, y = translateAnim.value) 42 | ) 43 | 44 | Column( 45 | modifier = Modifier 46 | .fillMaxWidth() 47 | .clip(RoundedCornerShape(10.dp)) 48 | .background(MaterialTheme.colorScheme.surfaceContainer) 49 | .padding(16.dp) 50 | ) { 51 | Row( 52 | modifier = Modifier.fillMaxWidth(), 53 | horizontalArrangement = Arrangement.Start 54 | ) { 55 | Spacer( 56 | modifier = Modifier 57 | .size(40.dp) 58 | .clip(CircleShape) 59 | .background(brush) 60 | ) 61 | Spacer(modifier = Modifier.width(14.dp)) 62 | Column { 63 | Spacer( 64 | modifier = Modifier 65 | .height(14.dp) 66 | .width(100.dp) 67 | .clip(RoundedCornerShape(4.dp)) 68 | .background(brush) 69 | ) 70 | Spacer(modifier = Modifier.height(8.dp)) 71 | Spacer( 72 | modifier = Modifier 73 | .height(12.dp) 74 | .width(60.dp) 75 | .clip(RoundedCornerShape(4.dp)) 76 | .background(brush) 77 | ) 78 | } 79 | Spacer(modifier = Modifier.weight(1f)) 80 | Column(horizontalAlignment = Alignment.End) { 81 | Spacer( 82 | modifier = Modifier 83 | .height(14.dp) 84 | .width(80.dp) 85 | .clip(RoundedCornerShape(4.dp)) 86 | .background(brush) 87 | ) 88 | Spacer(modifier = Modifier.height(8.dp)) 89 | Spacer( 90 | modifier = Modifier 91 | .height(12.dp) 92 | .width(60.dp) 93 | .clip(RoundedCornerShape(4.dp)) 94 | .background(brush) 95 | ) 96 | } 97 | } 98 | } 99 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/home/HomeViewModel.kt: -------------------------------------------------------------------------------- 1 | package presentation.home 2 | 3 | import androidx.lifecycle.ViewModel 4 | import androidx.lifecycle.viewModelScope 5 | import data.remote.Resources 6 | import domain.model.crypto.Data 7 | import domain.model.crypto.Listings 8 | import domain.repository.CoinifyRepository 9 | import kotlinx.coroutines.Dispatchers 10 | import kotlinx.coroutines.IO 11 | import kotlinx.coroutines.flow.MutableStateFlow 12 | import kotlinx.coroutines.flow.StateFlow 13 | import kotlinx.coroutines.flow.asStateFlow 14 | import kotlinx.coroutines.launch 15 | 16 | class HomeViewModel( 17 | private val repository: CoinifyRepository 18 | ): ViewModel() { 19 | 20 | private val _isLoading = MutableStateFlow(true) 21 | val isLoading: StateFlow = _isLoading.asStateFlow() 22 | 23 | private val _latestListing = MutableStateFlow>(Resources.LOADING) 24 | var latestListing: StateFlow> = _latestListing.asStateFlow() 25 | 26 | private val _searchQuery = MutableStateFlow("") 27 | val searchQuery: StateFlow = _searchQuery.asStateFlow() 28 | 29 | private val _filteredListing = MutableStateFlow>(emptyList()) 30 | val filteredListing: StateFlow> = _filteredListing.asStateFlow() 31 | 32 | fun getLatestListing() { 33 | viewModelScope.launch(Dispatchers.IO) { 34 | _isLoading.value = true 35 | _latestListing.value = Resources.LOADING 36 | try { 37 | val response = repository.getListing() 38 | _latestListing.value = Resources.SUCCESS(response) 39 | filterData(response.data, "") 40 | } catch (e: Exception) { 41 | _latestListing.value = Resources.ERROR(e.message.toString()) 42 | } finally { 43 | _isLoading.value = false 44 | } 45 | } 46 | } 47 | 48 | private fun filterData(data: List, query: String) { 49 | _filteredListing.value = data.filter { item -> 50 | item.name.contains(query, ignoreCase = true) 51 | } 52 | } 53 | 54 | fun updateSearchData(query: String) { 55 | _searchQuery.value = query 56 | _latestListing.value.let { resources -> 57 | if (resources is Resources.SUCCESS) { 58 | filterData(resources.response.data, query) 59 | } 60 | } 61 | } 62 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/news/NewsScreenShimmer.kt: -------------------------------------------------------------------------------- 1 | package presentation.news 2 | 3 | import androidx.compose.animation.core.* 4 | import androidx.compose.foundation.background 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.shape.CircleShape 7 | import androidx.compose.foundation.shape.RoundedCornerShape 8 | import androidx.compose.material3.Card 9 | import androidx.compose.material3.CardDefaults 10 | import androidx.compose.material3.MaterialTheme 11 | import androidx.compose.runtime.Composable 12 | import androidx.compose.ui.Alignment 13 | import androidx.compose.ui.Modifier 14 | import androidx.compose.ui.draw.clip 15 | import androidx.compose.ui.geometry.Offset 16 | import androidx.compose.ui.graphics.Brush 17 | import androidx.compose.ui.graphics.Color 18 | import androidx.compose.ui.unit.dp 19 | 20 | @Composable 21 | fun NewsScreenShimmer() { 22 | val shimmerColors = listOf( 23 | Color.LightGray.copy(alpha = 0.6f), 24 | Color.LightGray.copy(alpha = 0.2f), 25 | Color.LightGray.copy(alpha = 0.6f), 26 | ) 27 | 28 | val transition = rememberInfiniteTransition() 29 | val translateAnim = transition.animateFloat( 30 | initialValue = 0f, 31 | targetValue = 1000f, 32 | animationSpec = infiniteRepeatable( 33 | animation = tween(durationMillis = 1200, easing = FastOutSlowInEasing), 34 | repeatMode = RepeatMode.Restart 35 | ) 36 | ) 37 | 38 | val brush = Brush.linearGradient( 39 | colors = shimmerColors, 40 | start = Offset.Zero, 41 | end = Offset(x = translateAnim.value, y = translateAnim.value) 42 | ) 43 | 44 | Card( 45 | modifier = Modifier 46 | .fillMaxWidth() 47 | .padding(8.dp), 48 | shape = RoundedCornerShape(16.dp), 49 | colors = CardDefaults.cardColors( 50 | containerColor = MaterialTheme.colorScheme.surfaceContainer 51 | ) 52 | ) { 53 | Column(modifier = Modifier.padding(16.dp)) { 54 | Spacer( 55 | modifier = Modifier 56 | .height(200.dp) 57 | .fillMaxWidth() 58 | .clip(RoundedCornerShape(16.dp)) 59 | .background(brush) 60 | ) 61 | 62 | Spacer(modifier = Modifier.height(8.dp)) 63 | 64 | repeat(3) { 65 | Spacer( 66 | modifier = Modifier 67 | .fillMaxWidth() 68 | .height(10.dp) 69 | .background(brush) 70 | ) 71 | Spacer(modifier = Modifier.height(4.dp)) 72 | } 73 | 74 | Spacer(modifier = Modifier.height(8.dp)) 75 | 76 | Row( 77 | verticalAlignment = Alignment.CenterVertically, 78 | horizontalArrangement = Arrangement.SpaceBetween 79 | ) { 80 | Row(verticalAlignment = Alignment.CenterVertically) { 81 | Spacer( 82 | modifier = Modifier 83 | .size(24.dp) 84 | .clip(CircleShape) 85 | .background(brush) 86 | ) 87 | 88 | Spacer(modifier = Modifier.width(8.dp)) 89 | 90 | Spacer( 91 | modifier = Modifier 92 | .width(80.dp) 93 | .height(10.dp) 94 | .background(brush) 95 | ) 96 | } 97 | 98 | Spacer(modifier = Modifier.weight(1f)) 99 | 100 | Spacer( 101 | modifier = Modifier 102 | .width(120.dp) 103 | .height(10.dp) 104 | .background(brush) 105 | ) 106 | } 107 | } 108 | } 109 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/news/NewsViewModel.kt: -------------------------------------------------------------------------------- 1 | package presentation.news 2 | 3 | import androidx.lifecycle.ViewModel 4 | import androidx.lifecycle.viewModelScope 5 | import data.remote.Resources 6 | import domain.model.news.News 7 | import domain.repository.CoinifyRepository 8 | import kotlinx.coroutines.flow.MutableStateFlow 9 | import kotlinx.coroutines.flow.StateFlow 10 | import kotlinx.coroutines.flow.asStateFlow 11 | import kotlinx.coroutines.launch 12 | 13 | class NewsViewModel( 14 | private val repository: CoinifyRepository 15 | ): ViewModel() { 16 | 17 | private val _isLoading = MutableStateFlow(true) 18 | val isLoading: StateFlow = _isLoading.asStateFlow() 19 | 20 | private val _allNews = MutableStateFlow>(Resources.LOADING) 21 | var allNews: StateFlow> = _allNews.asStateFlow() 22 | 23 | fun getAllNews() { 24 | viewModelScope.launch { 25 | _isLoading.value = true 26 | _allNews.value = Resources.LOADING 27 | try { 28 | val response = repository.getAllNews() 29 | _allNews.value = Resources.SUCCESS(response) 30 | } catch (e: Exception) { 31 | _allNews.value = Resources.ERROR(e.message.toString()) 32 | } finally { 33 | _isLoading.value = false 34 | } 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/settings/SettingsScreen.kt: -------------------------------------------------------------------------------- 1 | package presentation.settings 2 | 3 | import androidx.compose.foundation.background 4 | import androidx.compose.foundation.isSystemInDarkTheme 5 | import androidx.compose.foundation.layout.Box 6 | import androidx.compose.foundation.layout.fillMaxSize 7 | import androidx.compose.foundation.layout.padding 8 | import androidx.compose.foundation.lazy.LazyColumn 9 | import androidx.compose.material.Scaffold 10 | import androidx.compose.material.icons.Icons 11 | import androidx.compose.material.icons.outlined.DarkMode 12 | import androidx.compose.material.icons.outlined.LightMode 13 | import androidx.compose.material.icons.outlined.PeopleAlt 14 | import androidx.compose.material3.ExperimentalMaterial3Api 15 | import androidx.compose.material3.MaterialTheme 16 | import androidx.compose.material3.Text 17 | import androidx.compose.material3.TopAppBar 18 | import androidx.compose.material3.TopAppBarDefaults 19 | import androidx.compose.runtime.Composable 20 | import androidx.compose.runtime.collectAsState 21 | import androidx.compose.runtime.getValue 22 | import androidx.compose.runtime.mutableStateOf 23 | import androidx.compose.runtime.remember 24 | import androidx.compose.runtime.setValue 25 | import androidx.compose.ui.Modifier 26 | import androidx.compose.ui.platform.LocalUriHandler 27 | import androidx.compose.ui.text.TextStyle 28 | import androidx.compose.ui.text.font.FontWeight 29 | import androidx.compose.ui.unit.dp 30 | import androidx.compose.ui.unit.sp 31 | import coinify.composeapp.generated.resources.Res 32 | import coinify.composeapp.generated.resources.invite_others 33 | import coinify.composeapp.generated.resources.theme 34 | import component.SettingItem 35 | import component.Theme 36 | import component.ThemeSelectionDialog 37 | import org.jetbrains.compose.resources.stringResource 38 | import org.koin.compose.koinInject 39 | import utils.Constants.APP_REPO 40 | 41 | @OptIn(ExperimentalMaterial3Api::class) 42 | @Composable 43 | fun SettingsScreen( 44 | modifier: Modifier = Modifier, 45 | settingsViewModel: SettingsViewModel = koinInject() 46 | ) { 47 | 48 | val uriHandler = LocalUriHandler.current 49 | var showThemeDialog by remember { mutableStateOf(false) } 50 | val isDarkModeEnabled by settingsViewModel.isDarkModeEnabled.collectAsState() 51 | 52 | when { 53 | 54 | showThemeDialog -> { 55 | ThemeSelectionDialog( 56 | onThemeChange = { theme -> 57 | when (theme) { 58 | Theme.Light -> settingsViewModel.changeDarkMode(false) 59 | Theme.Dark -> settingsViewModel.changeDarkMode(true) 60 | } 61 | showThemeDialog = false 62 | }, 63 | onDismissRequest = { showThemeDialog = false }, 64 | currentTheme = if (isDarkModeEnabled) Theme.Dark else Theme.Light 65 | ) 66 | } 67 | } 68 | 69 | Scaffold( 70 | topBar = { 71 | TopAppBar( 72 | title = { Text("Settings") }, 73 | colors = TopAppBarDefaults.topAppBarColors(containerColor = MaterialTheme.colorScheme.background), 74 | ) 75 | } 76 | ) { paddingValues -> 77 | 78 | Box( 79 | modifier = modifier.fillMaxSize() 80 | .background(MaterialTheme.colorScheme.background) 81 | .padding(paddingValues) 82 | ) { 83 | 84 | LazyColumn { 85 | item { 86 | Box(modifier = Modifier.padding(16.dp)) { 87 | Text( 88 | text = "General", 89 | style = TextStyle( 90 | color = MaterialTheme.colorScheme.onSurface, 91 | fontSize = 14.sp, 92 | fontWeight = FontWeight.Bold 93 | ) 94 | ) 95 | } 96 | } 97 | 98 | item { 99 | SettingItem( 100 | onClick = { 101 | showThemeDialog = true 102 | }, 103 | imageVector = if (isSystemInDarkTheme()) Icons.Outlined.DarkMode else Icons.Outlined.LightMode, 104 | itemName = stringResource(Res.string.theme) 105 | ) 106 | } 107 | item { 108 | SettingItem( 109 | onClick = { 110 | uriHandler.openUri(APP_REPO) 111 | }, 112 | imageVector = Icons.Outlined.PeopleAlt, 113 | itemName = stringResource(Res.string.invite_others) 114 | ) 115 | } 116 | } 117 | } 118 | } 119 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/settings/SettingsViewModel.kt: -------------------------------------------------------------------------------- 1 | package presentation.settings 2 | 3 | import androidx.lifecycle.ViewModel 4 | import androidx.lifecycle.viewModelScope 5 | import kotlinx.coroutines.Dispatchers 6 | import kotlinx.coroutines.IO 7 | import kotlinx.coroutines.flow.MutableStateFlow 8 | import kotlinx.coroutines.flow.asStateFlow 9 | import kotlinx.coroutines.launch 10 | import utils.AppPreferences 11 | 12 | class SettingsViewModel( 13 | private val appPreferences: AppPreferences 14 | ): ViewModel() { 15 | 16 | private val _isDarkModeEnabled = MutableStateFlow(false) 17 | val isDarkModeEnabled = _isDarkModeEnabled.asStateFlow() 18 | 19 | init { 20 | isDarkModeEnabled() 21 | } 22 | 23 | private fun isDarkModeEnabled() = viewModelScope.launch(Dispatchers.IO) { 24 | _isDarkModeEnabled.value = appPreferences.isDarkModeEnabled() 25 | } 26 | 27 | fun changeDarkMode(isEnabled: Boolean) = viewModelScope.launch(Dispatchers.IO) { 28 | appPreferences.changeDarkMode(isEnabled) 29 | _isDarkModeEnabled.value = isEnabled 30 | } 31 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/presentation/stats/StatisticsShimmerEffect.kt: -------------------------------------------------------------------------------- 1 | package presentation.stats 2 | 3 | import androidx.compose.animation.core.* 4 | import androidx.compose.foundation.background 5 | import androidx.compose.foundation.layout.* 6 | import androidx.compose.foundation.shape.RoundedCornerShape 7 | import androidx.compose.runtime.Composable 8 | import androidx.compose.ui.Modifier 9 | import androidx.compose.ui.draw.clip 10 | import androidx.compose.ui.geometry.Offset 11 | import androidx.compose.ui.graphics.Brush 12 | import androidx.compose.ui.graphics.Color 13 | import androidx.compose.ui.unit.dp 14 | 15 | @Composable 16 | fun StatisticsShimmerEffect() { 17 | val shimmerColors = listOf( 18 | Color.LightGray.copy(alpha = 0.6f), 19 | Color.LightGray.copy(alpha = 0.2f), 20 | Color.LightGray.copy(alpha = 0.6f), 21 | ) 22 | 23 | val transition = rememberInfiniteTransition() 24 | val translateAnim = transition.animateFloat( 25 | initialValue = 0f, 26 | targetValue = 1000f, 27 | animationSpec = infiniteRepeatable( 28 | animation = tween(durationMillis = 1200, easing = FastOutSlowInEasing), 29 | repeatMode = RepeatMode.Restart 30 | ) 31 | ) 32 | 33 | val brush = Brush.linearGradient( 34 | colors = shimmerColors, 35 | start = Offset.Zero, 36 | end = Offset(x = translateAnim.value, y = translateAnim.value) 37 | ) 38 | 39 | Column(modifier = Modifier.fillMaxSize()) { 40 | // Shimmer effect for market trends 41 | Spacer(modifier = Modifier.height(24.dp)) 42 | Box( 43 | modifier = Modifier 44 | .fillMaxWidth() 45 | .height(100.dp) 46 | .padding(16.dp) 47 | .clip(RoundedCornerShape(16.dp)) 48 | .background(brush) 49 | ) 50 | 51 | // Shimmer effect for top movers 52 | Spacer(modifier = Modifier.height(24.dp)) 53 | Row( 54 | modifier = Modifier.fillMaxWidth(), 55 | horizontalArrangement = Arrangement.spacedBy(12.dp) 56 | ) { 57 | repeat(3) { 58 | Box( 59 | modifier = Modifier 60 | .width(120.dp) 61 | .height(80.dp) 62 | .clip(RoundedCornerShape(8.dp)) 63 | .background(brush) 64 | ) 65 | } 66 | } 67 | 68 | // Shimmer effect for top losing 69 | Spacer(modifier = Modifier.height(24.dp)) 70 | Row( 71 | modifier = Modifier.fillMaxWidth(), 72 | horizontalArrangement = Arrangement.spacedBy(12.dp) 73 | ) { 74 | repeat(3) { 75 | Box( 76 | modifier = Modifier 77 | .width(120.dp) 78 | .height(80.dp) 79 | .clip(RoundedCornerShape(8.dp)) 80 | .background(brush) 81 | ) 82 | } 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/ui/Typography.kt: -------------------------------------------------------------------------------- 1 | package ui 2 | 3 | import androidx.compose.ui.text.font.Font 4 | import androidx.compose.ui.text.font.FontFamily 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/Animation.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.compose.animation.core.tween 4 | import androidx.compose.animation.fadeIn 5 | import androidx.compose.animation.fadeOut 6 | import androidx.compose.animation.scaleIn 7 | 8 | val FadeIn = fadeIn(animationSpec = tween(220, delayMillis = 90)) + 9 | scaleIn( 10 | initialScale = 0.92f, 11 | animationSpec = tween(220, delayMillis = 90) 12 | ) 13 | 14 | val FadeOut = fadeOut(animationSpec = tween(90)) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/AppPreferences.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.datastore.core.DataStore 4 | import androidx.datastore.preferences.core.Preferences 5 | import androidx.datastore.preferences.core.booleanPreferencesKey 6 | import androidx.datastore.preferences.core.edit 7 | import kotlinx.coroutines.flow.Flow 8 | import kotlinx.coroutines.flow.first 9 | import kotlinx.coroutines.flow.map 10 | 11 | interface AppPreferences { 12 | 13 | suspend fun isDarkModeEnabled(): Boolean 14 | suspend fun changeDarkMode(isEnabled: Boolean) : Preferences 15 | 16 | val onDarkModeChange: Flow 17 | } 18 | 19 | internal class AppPreferencesImpl( 20 | private val dataStore: DataStore 21 | ): AppPreferences { 22 | 23 | private companion object { 24 | private const val PREFS_TAG_KEY = "AppPreferences" 25 | private const val IS_DARK_MODE_ENABLED = "prefsBoolean" 26 | } 27 | 28 | private val darkModeKey = booleanPreferencesKey("$PREFS_TAG_KEY$IS_DARK_MODE_ENABLED") 29 | 30 | override suspend fun isDarkModeEnabled() = dataStore.data.map { preferences -> 31 | preferences[darkModeKey] ?: false 32 | }.first() 33 | 34 | override suspend fun changeDarkMode(isEnabled : Boolean) = dataStore.edit { preferences -> 35 | preferences[darkModeKey] = isEnabled 36 | } 37 | 38 | override val onDarkModeChange: Flow 39 | get() = dataStore.data.map { preferences -> 40 | preferences[darkModeKey] ?: false 41 | } 42 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/ApplicationComponent.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | object ApplicationComponent { 4 | private var _coreComponent: CoreComponent? = null 5 | val coreComponent 6 | get() = _coreComponent 7 | ?: throw IllegalStateException("Make sure to call ApplicationComponent.init()") 8 | 9 | fun init() { 10 | _coreComponent = CoreComponentImpl() 11 | } 12 | } 13 | 14 | val coreComponent get() = ApplicationComponent.coreComponent -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/Constants.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | object Constants { 4 | const val BASE_URL = "https://pro-api.coinmarketcap.com/v1/" 5 | const val REQUEST_TIME_OUT: Long = 10000 6 | const val APP_REPO = "https://github.com/aritra-tech/Coinify" 7 | const val NEWS_URL = "https://min-api.cryptocompare.com/data/" 8 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/CoroutinesComponent.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.datastore.core.DataStore 4 | import androidx.datastore.preferences.core.Preferences 5 | import data.datastore.dataStorePreferences 6 | import kotlinx.coroutines.CoroutineDispatcher 7 | import kotlinx.coroutines.CoroutineScope 8 | import kotlinx.coroutines.Dispatchers 9 | import kotlinx.coroutines.IO 10 | import kotlinx.coroutines.SupervisorJob 11 | import kotlinx.coroutines.plus 12 | 13 | interface CoroutinesComponent { 14 | val mainImmediateDispatcher: CoroutineDispatcher 15 | val applicationScope: CoroutineScope 16 | } 17 | 18 | internal class CoroutinesComponentImpl private constructor() : CoroutinesComponent { 19 | 20 | companion object { 21 | fun create(): CoroutinesComponent = CoroutinesComponentImpl() 22 | } 23 | 24 | override val mainImmediateDispatcher: CoroutineDispatcher = Dispatchers.Main.immediate 25 | override val applicationScope: CoroutineScope 26 | get() = CoroutineScope( 27 | SupervisorJob() + mainImmediateDispatcher, 28 | ) 29 | } 30 | 31 | interface CoreComponent : CoroutinesComponent { 32 | val appPreferences: AppPreferences 33 | } 34 | 35 | internal class CoreComponentImpl internal constructor() : CoreComponent, 36 | CoroutinesComponent by CoroutinesComponentImpl.create() { 37 | 38 | private val dataStore: DataStore = dataStorePreferences( 39 | corruptionHandler = null, 40 | coroutineScope = applicationScope + Dispatchers.IO, 41 | migrations = emptyList() 42 | ) 43 | 44 | override val appPreferences : AppPreferences = AppPreferencesImpl(dataStore) 45 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/ThemeViewModel.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.lifecycle.ViewModel 4 | import androidx.lifecycle.viewModelScope 5 | import kotlinx.coroutines.Dispatchers 6 | import kotlinx.coroutines.IO 7 | import kotlinx.coroutines.flow.MutableStateFlow 8 | import kotlinx.coroutines.flow.asStateFlow 9 | import kotlinx.coroutines.flow.collectLatest 10 | import kotlinx.coroutines.launch 11 | 12 | class ThemeViewModel( 13 | private val applicationPreferences: AppPreferences 14 | ): ViewModel() { 15 | 16 | private val _currentTheme = MutableStateFlow(false) 17 | val currentTheme = _currentTheme.asStateFlow() 18 | 19 | init { 20 | getTheme() 21 | } 22 | 23 | private fun getTheme() = viewModelScope.launch(Dispatchers.IO) { 24 | applicationPreferences.onDarkModeChange.collectLatest { 25 | _currentTheme.value = it 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/Utils.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.compose.foundation.clickable 4 | import androidx.compose.foundation.interaction.MutableInteractionSource 5 | import androidx.compose.ui.Modifier 6 | import androidx.compose.ui.composed 7 | import androidx.lifecycle.ViewModel 8 | import org.koin.core.definition.Definition 9 | import org.koin.core.definition.KoinDefinition 10 | import org.koin.core.module.Module 11 | import org.koin.core.qualifier.Qualifier 12 | 13 | expect inline fun Module.viewModelDefinition( 14 | qualifier: Qualifier? = null, 15 | noinline definition: Definition 16 | ): KoinDefinition 17 | 18 | fun Modifier.onClick( 19 | interactionSource: MutableInteractionSource = MutableInteractionSource(), 20 | onClick: () -> Unit 21 | ) = composed( 22 | factory = { 23 | this.then( 24 | Modifier.clickable( 25 | interactionSource = interactionSource, 26 | indication = null, 27 | onClick = { onClick() } 28 | ) 29 | ) 30 | } 31 | ) -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/formatData.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import com.ionspin.kotlin.bignum.decimal.toBigDecimal 4 | 5 | fun formatData(marketCap: Double): String { 6 | val suffixes = listOf("", "K", "M", "B", "T") 7 | var value = marketCap.toBigDecimal() 8 | var index = 0 9 | 10 | while (value >= 1000.toBigDecimal() && index < suffixes.size - 1) { 11 | value /= 1000.toBigDecimal() 12 | index++ 13 | } 14 | return "${value.toPlainString().take(5)}${suffixes[index]}" 15 | } 16 | -------------------------------------------------------------------------------- /composeApp/src/commonMain/kotlin/utils/formatTimeStamp.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import kotlinx.datetime.Instant 4 | import kotlinx.datetime.TimeZone 5 | import kotlinx.datetime.toLocalDateTime 6 | 7 | fun formatTimeStamp(timestamp: Long): String { 8 | val instant = Instant.fromEpochSeconds(timestamp) 9 | val localDateTime = instant.toLocalDateTime(TimeZone.currentSystemDefault()) 10 | 11 | val day = localDateTime.date.dayOfMonth.toString().padStart(2, '0') 12 | val month = localDateTime.date.month.name.lowercase().replaceFirstChar { it.uppercase() } 13 | val year = localDateTime.date.year.toString() 14 | 15 | return "$day $month $year" 16 | } -------------------------------------------------------------------------------- /composeApp/src/desktopMain/kotlin/Platform.jvm.kt: -------------------------------------------------------------------------------- 1 | class JVMPlatform: Platform { 2 | override val name: String = "Java ${System.getProperty("java.version")}" 3 | } 4 | 5 | actual fun getPlatform(): Platform = JVMPlatform() -------------------------------------------------------------------------------- /composeApp/src/desktopMain/kotlin/data/datastore/DataStorePreferences.desktop.kt: -------------------------------------------------------------------------------- 1 | package data.datastore 2 | 3 | import androidx.datastore.core.DataMigration 4 | import androidx.datastore.core.DataStore 5 | import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler 6 | import androidx.datastore.preferences.core.Preferences 7 | import kotlinx.coroutines.CoroutineScope 8 | 9 | actual fun dataStorePreferences( 10 | corruptionHandler: ReplaceFileCorruptionHandler?, 11 | coroutineScope: CoroutineScope, 12 | migrations: List> 13 | ): DataStore = 14 | createDataStoreWithDefaults( 15 | corruptionHandler = corruptionHandler, 16 | migrations = migrations, 17 | coroutineScope = coroutineScope, 18 | path = { SETTINGS_PREFERENCES } 19 | ) -------------------------------------------------------------------------------- /composeApp/src/desktopMain/kotlin/main.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.ui.window.Window 2 | import androidx.compose.ui.window.application 3 | import utils.ApplicationComponent 4 | 5 | fun main() = application { 6 | 7 | ApplicationComponent.init() 8 | 9 | Window( 10 | onCloseRequest = ::exitApplication, 11 | title = "Coinify", 12 | ) { 13 | App() 14 | } 15 | } -------------------------------------------------------------------------------- /composeApp/src/desktopMain/kotlin/utils/Utils.desktop.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.lifecycle.ViewModel 4 | import org.koin.core.definition.Definition 5 | import org.koin.core.definition.KoinDefinition 6 | import org.koin.core.module.Module 7 | import org.koin.core.qualifier.Qualifier 8 | actual inline fun Module.viewModelDefinition( 9 | qualifier: Qualifier?, 10 | noinline definition: Definition, 11 | ): KoinDefinition = factory(qualifier = qualifier, definition = definition) 12 | -------------------------------------------------------------------------------- /composeApp/src/iosMain/kotlin/MainViewController.kt: -------------------------------------------------------------------------------- 1 | import androidx.compose.ui.window.ComposeUIViewController 2 | import utils.ApplicationComponent 3 | 4 | fun MainViewController() = ComposeUIViewController { App() } 5 | 6 | fun initializer() { 7 | ApplicationComponent.init() 8 | } -------------------------------------------------------------------------------- /composeApp/src/iosMain/kotlin/Platform.ios.kt: -------------------------------------------------------------------------------- 1 | import platform.UIKit.UIDevice 2 | 3 | class IOSPlatform: Platform { 4 | override val name: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion 5 | } 6 | 7 | actual fun getPlatform(): Platform = IOSPlatform() -------------------------------------------------------------------------------- /composeApp/src/iosMain/kotlin/data/datastore/DataStorePreferences.ios.kt: -------------------------------------------------------------------------------- 1 | package data.datastore 2 | 3 | import androidx.datastore.core.DataMigration 4 | import androidx.datastore.core.DataStore 5 | import androidx.datastore.core.handlers.ReplaceFileCorruptionHandler 6 | import androidx.datastore.preferences.core.Preferences 7 | import kotlinx.cinterop.ExperimentalForeignApi 8 | import kotlinx.coroutines.CoroutineScope 9 | import platform.Foundation.NSDocumentDirectory 10 | import platform.Foundation.NSFileManager 11 | import platform.Foundation.NSURL 12 | import platform.Foundation.NSUserDomainMask 13 | 14 | @OptIn(ExperimentalForeignApi::class) 15 | actual fun dataStorePreferences( 16 | corruptionHandler: ReplaceFileCorruptionHandler?, 17 | coroutineScope: CoroutineScope, 18 | migrations: List> 19 | ): DataStore = createDataStoreWithDefaults( 20 | corruptionHandler = corruptionHandler, 21 | migrations = migrations, 22 | coroutineScope = coroutineScope, 23 | path = { 24 | val documentDirectory: NSURL? = NSFileManager.defaultManager.URLForDirectory( 25 | directory = NSDocumentDirectory, 26 | inDomain = NSUserDomainMask, 27 | appropriateForURL = null, 28 | create = false, 29 | error = null, 30 | ) 31 | (requireNotNull(documentDirectory).path + "/$SETTINGS_PREFERENCES") 32 | } 33 | ) -------------------------------------------------------------------------------- /composeApp/src/iosMain/kotlin/utils/Utils.ios.kt: -------------------------------------------------------------------------------- 1 | package utils 2 | 3 | import androidx.lifecycle.ViewModel 4 | import org.koin.core.definition.Definition 5 | import org.koin.core.definition.KoinDefinition 6 | import org.koin.core.module.Module 7 | import org.koin.core.qualifier.Qualifier 8 | 9 | actual inline fun Module.viewModelDefinition( 10 | qualifier: Qualifier?, 11 | noinline definition: Definition, 12 | ): KoinDefinition = factory(qualifier = qualifier, definition = definition) 13 | 14 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | 3 | #Gradle 4 | org.gradle.jvmargs=-Xmx2048M -Dfile.encoding=UTF-8 -Dkotlin.daemon.jvm.options\="-Xmx2048M" 5 | 6 | #Android 7 | android.nonTransitiveRClass=true 8 | android.useAndroidX=true 9 | 10 | #MPP 11 | kotlin.mpp.androidSourceSetLayoutVersion=2 12 | kotlin.mpp.enableCInteropCommonization=true 13 | # App 14 | version.name=1.1.0 -------------------------------------------------------------------------------- /gradle/libs.versions.toml: -------------------------------------------------------------------------------- 1 | [versions] 2 | agp = "8.2.2" 3 | android-compileSdk = "34" 4 | android-minSdk = "24" 5 | android-targetSdk = "34" 6 | androidx-activityCompose = "1.9.0" 7 | androidx-appcompat = "1.6.1" 8 | androidx-constraintlayout = "2.1.4" 9 | androidx-core-ktx = "1.13.0" 10 | androidx-lifecycle = "2.8.0-beta01" 11 | androidx-navigation = "2.8.0-alpha02" 12 | androidx-espresso-core = "3.5.1" 13 | androidx-material = "1.11.0" 14 | androidx-data-store = "1.1.1" 15 | bignum = "0.3.9" 16 | chart = "Beta-0.0.5" 17 | coroutines = "1.8.0" 18 | kotlinx-serialization = "1.6.3" 19 | androidx-test-junit = "1.1.5" 20 | compose = "1.6.8" 21 | compose-plugin = "1.6.10" 22 | junit = "4.13.2" 23 | kotlin = "1.9.23" 24 | kermit = "2.0.3" 25 | ktor = "2.3.11" 26 | ktorClientAndroid = "2.3.11" 27 | koin = "3.6.0-alpha3" 28 | koin-compose = "1.2.0-alpha3" 29 | koin-annotation = "1.3.1" 30 | coil3 = "3.0.0-alpha06" 31 | buildkonfig = "0.15.1" 32 | startupRuntime = "1.1.1" 33 | kotlinx-datetime = "0.6.0" 34 | core-splashscreen = "1.0.1" 35 | 36 | [libraries] 37 | bignum = { module = "com.ionspin.kotlin:bignum", version.ref = "bignum" } 38 | chart = { module = "io.github.thechance101:chart", version.ref = "chart" } 39 | kotlin-coroutines = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" } 40 | kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "coroutines" } 41 | kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "coroutines" } 42 | kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" } 43 | kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" } 44 | androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } 45 | 46 | androidx-data-store-core = { module = "androidx.datastore:datastore-preferences-core", version.ref = "androidx-data-store" } 47 | androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } 48 | androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidx-navigation" } 49 | compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } 50 | compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } 51 | 52 | kermit = { module = "co.touchlab:kermit", version.ref = "kermit" } 53 | 54 | koin-android = { module = "io.insert-koin:koin-android", version.ref = "koin" } 55 | koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } 56 | koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin-compose"} 57 | koin-annotation = {module = "io.insert-koin:koin-annotations", version.ref = "koin-annotation"} 58 | 59 | ktor-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } 60 | ktor-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } 61 | ktor-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor"} 62 | ktor-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor"} 63 | ktor-client-darwin = { module = "io.ktor:ktor-client-darwin", version.ref = "ktor" } 64 | ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } 65 | ktor-client-android = { module = "io.ktor:ktor-client-android", version.ref = "ktorClientAndroid" } 66 | 67 | coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil3" } 68 | coil-compose-core = { module = "io.coil-kt.coil3:coil-compose-core", version.ref = "coil3" } 69 | coil-network-ktor = { module = "io.coil-kt.coil3:coil-network-ktor", version.ref = "coil3" } 70 | coil-mp = { module = "io.coil-kt.coil3:coil", version.ref = "coil3" } 71 | androidx-startup-runtime = { group = "androidx.startup", name = "startup-runtime", version.ref = "startupRuntime" } 72 | core-splashscreen = { group = "androidx.core", name = "core-splashscreen", version.ref = "core-splashscreen" } 73 | 74 | 75 | [plugins] 76 | androidApplication = { id = "com.android.application", version.ref = "agp" } 77 | androidLibrary = { id = "com.android.library", version.ref = "agp" } 78 | jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } 79 | kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } 80 | kotlinx-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } 81 | buildkonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildkonfig" } 82 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 4 | networkTimeout=10000 5 | validateDistributionUrl=true 6 | zipStoreBase=GRADLE_USER_HOME 7 | zipStorePath=wrapper/dists 8 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%"=="" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%"=="" set DIRNAME=. 29 | @rem This is normally unused 30 | set APP_BASE_NAME=%~n0 31 | set APP_HOME=%DIRNAME% 32 | 33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 35 | 36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 38 | 39 | @rem Find java.exe 40 | if defined JAVA_HOME goto findJavaFromJavaHome 41 | 42 | set JAVA_EXE=java.exe 43 | %JAVA_EXE% -version >NUL 2>&1 44 | if %ERRORLEVEL% equ 0 goto execute 45 | 46 | echo. 47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 48 | echo. 49 | echo Please set the JAVA_HOME variable in your environment to match the 50 | echo location of your Java installation. 51 | 52 | goto fail 53 | 54 | :findJavaFromJavaHome 55 | set JAVA_HOME=%JAVA_HOME:"=% 56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 57 | 58 | if exist "%JAVA_EXE%" goto execute 59 | 60 | echo. 61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 62 | echo. 63 | echo Please set the JAVA_HOME variable in your environment to match the 64 | echo location of your Java installation. 65 | 66 | goto fail 67 | 68 | :execute 69 | @rem Setup the command line 70 | 71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 72 | 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if %ERRORLEVEL% equ 0 goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | set EXIT_CODE=%ERRORLEVEL% 85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1 86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% 87 | exit /b %EXIT_CODE% 88 | 89 | :mainEnd 90 | if "%OS%"=="Windows_NT" endlocal 91 | 92 | :omega 93 | -------------------------------------------------------------------------------- /icons/coinify_logo.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/icons/coinify_logo.icns -------------------------------------------------------------------------------- /icons/coinify_logo.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/icons/coinify_logo.ico -------------------------------------------------------------------------------- /icons/coinify_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/icons/coinify_logo.png -------------------------------------------------------------------------------- /iosApp/Configuration/Config.xcconfig: -------------------------------------------------------------------------------- 1 | TEAM_ID= 2 | BUNDLE_ID=com.aritra.coinify.Coinify 3 | APP_NAME=Coinify -------------------------------------------------------------------------------- /iosApp/iosApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /iosApp/iosApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "app-icon-1024.png", 5 | "idiom" : "universal", 6 | "platform" : "ios", 7 | "size" : "1024x1024" 8 | } 9 | ], 10 | "info" : { 11 | "author" : "xcode", 12 | "version" : 1 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/coinify.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "coinify.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /iosApp/iosApp/Assets.xcassets/coinify.imageset/coinify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aritra-tech/Coinify/61b50ef5741c19a783a12b42f0e6a3be17c6ab67/iosApp/iosApp/Assets.xcassets/coinify.imageset/coinify.png -------------------------------------------------------------------------------- /iosApp/iosApp/ContentView.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import SwiftUI 3 | import ComposeApp 4 | 5 | struct ComposeView: UIViewControllerRepresentable { 6 | func makeUIViewController(context: Context) -> UIViewController { 7 | MainViewControllerKt.MainViewController() 8 | } 9 | 10 | func updateUIViewController(_ uiViewController: UIViewController, context: Context) {} 11 | } 12 | 13 | struct ContentView: View { 14 | var body: some View { 15 | ComposeView() 16 | .ignoresSafeArea(.keyboard) // Compose has own keyboard handler 17 | } 18 | } 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /iosApp/iosApp/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UIApplicationSceneManifest 26 | 27 | UIApplicationSupportsMultipleScenes 28 | 29 | 30 | UILaunchScreen 31 | 32 | UILaunchStoryboardName 33 | SplashScreen.storyboard 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /iosApp/iosApp/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } -------------------------------------------------------------------------------- /iosApp/iosApp/SplashScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /iosApp/iosApp/iOSApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | @main 4 | struct iOSApp: App { 5 | var body: some Scene { 6 | WindowGroup { 7 | ContentView() 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "Coinify" 2 | enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") 3 | 4 | pluginManagement { 5 | repositories { 6 | google { 7 | mavenContent { 8 | includeGroupAndSubgroups("androidx") 9 | includeGroupAndSubgroups("com.android") 10 | includeGroupAndSubgroups("com.google") 11 | } 12 | } 13 | mavenCentral() 14 | gradlePluginPortal() 15 | } 16 | } 17 | 18 | dependencyResolutionManagement { 19 | repositories { 20 | google { 21 | mavenContent { 22 | includeGroupAndSubgroups("androidx") 23 | includeGroupAndSubgroups("com.android") 24 | includeGroupAndSubgroups("com.google") 25 | } 26 | } 27 | mavenCentral() 28 | } 29 | } 30 | 31 | include(":composeApp") --------------------------------------------------------------------------------