diff --git a/kotlin-multiplatform/README.md b/kotlin-multiplatform/README.md index 4900839..e5b141a 100644 --- a/kotlin-multiplatform/README.md +++ b/kotlin-multiplatform/README.md @@ -8,25 +8,22 @@ }%% graph LR - :about["about"] - :compose["compose"] :compose["compose"] :core["core"] :koin["koin"] - :about["about"] + :compose["compose"] :koin["koin"] subgraph :sample :sample:composeApp["composeApp"] end - :about --> :compose :compose --> :core - :koin --> :about + :koin --> :compose + :koin --> :core :sample:composeApp --> :koin classDef kotlin-multiplatform fill:#C792EA,stroke:#fff,stroke-width:2px,color:#fff; classDef android-application fill:#2C4162,stroke:#fff,stroke-width:2px,color:#fff; -class :about kotlin-multiplatform class :compose kotlin-multiplatform class :core kotlin-multiplatform class :koin kotlin-multiplatform diff --git a/kotlin-multiplatform/about/.gitignore b/kotlin-multiplatform/about/.gitignore deleted file mode 100644 index 42afabf..0000000 --- a/kotlin-multiplatform/about/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build \ No newline at end of file diff --git a/kotlin-multiplatform/about/build.gradle.kts b/kotlin-multiplatform/about/build.gradle.kts deleted file mode 100644 index 634817f..0000000 --- a/kotlin-multiplatform/about/build.gradle.kts +++ /dev/null @@ -1,101 +0,0 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -val artifactId = "about" - -plugins { - alias(libs.plugins.jetbrains.kotlin.multiplatform) - alias(libs.plugins.android.library) - alias(libs.plugins.jetbrains.compose) - alias(libs.plugins.jetbrains.kotlin.compose) - alias(libs.plugins.jetbrains.compose.hotreload) -} - -kotlin { - explicitApi() - - @OptIn(ExperimentalKotlinGradlePluginApi::class) - compilerOptions { - freeCompilerArgs.add("-Xcontext-sensitive-resolution") - } - - androidTarget { - publishLibraryVariants("release") - @OptIn(ExperimentalKotlinGradlePluginApi::class) - compilerOptions { - jvmTarget.set(JvmTarget.JVM_11) - } - } - jvm() - iosX64() - iosArm64() - iosSimulatorArm64() - - @OptIn(ExperimentalWasmDsl::class) - wasmJs { - browser() - } - - js { - browser() - } - - applyDefaultHierarchyTemplate() - - sourceSets { - commonMain { - dependencies { - api(project(":compose")) - api(libs.jetbrains.kotlinx.collections.immutable) - - implementation(libs.glass.yasan.kepko.component) - implementation(libs.glass.yasan.kepko.foundation) - - implementation(compose.components.resources) - implementation(compose.components.uiToolingPreview) - implementation(compose.foundation) - implementation(compose.material3) - implementation(compose.materialIconsExtended) - implementation(compose.runtime) - implementation(compose.ui) - - implementation(libs.coil.compose) - implementation(libs.coil.svg) - implementation(libs.androidx.lifecycle.runtime.compose) - implementation(libs.koin.compose) - implementation(libs.koin.core) - implementation(libs.ktor.http) - - } - } - } -} - -android { - namespace = "glass.yasan.toolkit.compose.about" - compileSdk = libs.versions.android.sdk.compile.get().toInt() - - defaultConfig { - minSdk = libs.versions.android.sdk.min.get().toInt() - } - - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } -} - -dependencies { - debugImplementation(compose.uiTooling) -} - -compose.resources { - publicResClass = false - packageOfResClass = "glass.yasan.toolkit.compose.about" - generateResClass = auto -} - -configure { - coordinates(artifactId = artifactId) -} diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/dev_logo_horizontal.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/dev_logo_horizontal.xml deleted file mode 100644 index 103bbd1..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/dev_logo_horizontal.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/dev_logo_vertical.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/dev_logo_vertical.xml deleted file mode 100644 index f7e3ddf..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/dev_logo_vertical.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_bluesky.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_bluesky.xml deleted file mode 100644 index adea948..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_bluesky.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_discord.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_discord.xml deleted file mode 100644 index 48135fd..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_discord.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_github.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_github.xml deleted file mode 100644 index d952150..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_github.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_gumroad.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_gumroad.xml deleted file mode 100644 index dbbd37c..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_gumroad.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_language.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_language.xml deleted file mode 100644 index e8ecd48..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_language.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_mail.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_mail.xml deleted file mode 100644 index 0b32cea..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_mail.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_mastodon.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_mastodon.xml deleted file mode 100644 index 54e235f..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_mastodon.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_play_store.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_play_store.xml deleted file mode 100644 index d4616e6..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_play_store.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_telegram.xml b/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_telegram.xml deleted file mode 100644 index e9b3a43..0000000 --- a/kotlin-multiplatform/about/src/commonMain/composeResources/drawable/ic_telegram.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/data/repository/AboutRepositoryImpl.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/data/repository/AboutRepositoryImpl.kt deleted file mode 100644 index b46f726..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/data/repository/AboutRepositoryImpl.kt +++ /dev/null @@ -1,15 +0,0 @@ -package glass.yasan.toolkit.about.data.repository - -import glass.yasan.toolkit.about.domain.model.Developer -import glass.yasan.toolkit.about.domain.repository.AboutRepository -import glass.yasan.toolkit.core.annotation.InternalToolkitApi -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf - -@InternalToolkitApi -public class AboutRepositoryImpl : AboutRepository { - - // TODO load the data from https://yasan.glass/about.json - public override val developer: Flow = flowOf(Developer()) - -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/domain/model/Developer.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/domain/model/Developer.kt deleted file mode 100644 index f5c42cc..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/domain/model/Developer.kt +++ /dev/null @@ -1,137 +0,0 @@ -package glass.yasan.toolkit.about.domain.model - -import glass.yasan.toolkit.compose.about.Res -import glass.yasan.toolkit.compose.about.ic_bluesky -import glass.yasan.toolkit.compose.about.ic_discord -import glass.yasan.toolkit.compose.about.ic_github -import glass.yasan.toolkit.compose.about.ic_gumroad -import glass.yasan.toolkit.compose.about.ic_language -import glass.yasan.toolkit.compose.about.ic_mail -import glass.yasan.toolkit.compose.about.ic_mastodon -import glass.yasan.toolkit.compose.about.ic_play_store -import glass.yasan.toolkit.compose.about.ic_telegram -import io.ktor.http.parseUrl -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf -import org.jetbrains.compose.resources.DrawableResource - -public data class Developer( - val name: String = "Yasan Glass", - val biography: String = "Developer & Designer", - val picture: Picture = Picture( - gravatar = Picture.Gravatar( - id = "8489f66463e06f02d36e024188bcd7ae", // hello@yasan.glass - ), - ), - val links: ImmutableList = persistentListOf( - Link( - name = "Website", - url = "https://yasan.glass", - ), - Link( - name = "Email", - url = "mailto:yasanglass@gmail.com", - ), - Link( - name = "Discord Server", - url = "https://discord.gg/8BQrfyA", - ), - Link( - name = "Telegram Channel", - url = "https://t.me/YASANupdates", - ), - Link( - name = "Play Store", - url = "https://play.google.com/store/apps/dev?id=5035207490031558874", - ), - Link( - name = "GitHub", - url = "https://github.com/yasanglass", - ), - Link( - name = "Mastodon", - url = "https://mastodon.social/@yasanglass", - ), - Link( - name = "Bluesky", - url = "https://bsky.app/profile/yasan.glass", - ), - Link( - name = "Gumroad", - url = "https://yasanglass.gumroad.com", - ), - ), -) { - - public data class Picture( - val gravatar: Gravatar, - ) { - - /** - * @property id MD5 hash of the gravatar profile email address - */ - public data class Gravatar( - private val id: String, - ) { - - public fun getImageUrl(size: Int = 512): String = "$baseImageUrl?s=$size" - - private val baseImageUrl: String get() = "https://www.gravatar.com/avatar/$id" - - } - - } - - public data class Link( - val name: String, - val url: String, - ) { - - public enum class Type { - BLUESKY, - DISCORD, - EMAIL, - GITHUB, - GUMROAD, - MASTODON, - PLAY_STORE, - TELEGRAM, - WEBSITE, - } - - public val type: Type - get() { - val parsedUrl = parseUrl(urlString = url) - - return when { - // Exact protocol - parsedUrl?.protocol?.name == "mailto" -> EMAIL - // Exact host - parsedUrl?.host == "bsky.app" -> BLUESKY - parsedUrl?.host == "discord.gg" -> DISCORD - parsedUrl?.host == "github.com" -> GITHUB - parsedUrl?.host == "play.google.com" -> PLAY_STORE - parsedUrl?.host == "t.me" -> TELEGRAM - // Other - name.contains("mastodon", true) -> MASTODON - parsedUrl?.host?.contains("gumroad.com") == true -> GUMROAD - else -> WEBSITE - } - } - - public val icon: DrawableResource - get() = when (type) { - Type.EMAIL -> Res.drawable.ic_mail - Type.BLUESKY -> Res.drawable.ic_bluesky - Type.DISCORD -> Res.drawable.ic_discord - Type.GITHUB -> Res.drawable.ic_github - Type.GUMROAD -> Res.drawable.ic_gumroad - Type.MASTODON -> Res.drawable.ic_mastodon - Type.PLAY_STORE -> Res.drawable.ic_play_store - Type.TELEGRAM -> Res.drawable.ic_telegram - Type.WEBSITE -> Res.drawable.ic_language - } - - } - -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/domain/repository/AboutRepository.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/domain/repository/AboutRepository.kt deleted file mode 100644 index 0ca8a9b..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/domain/repository/AboutRepository.kt +++ /dev/null @@ -1,10 +0,0 @@ -package glass.yasan.toolkit.about.domain.repository - -import glass.yasan.toolkit.about.domain.model.Developer -import kotlinx.coroutines.flow.Flow - -public interface AboutRepository { - - public val developer: Flow - -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitAppBanner.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitAppBanner.kt deleted file mode 100644 index 08eae3d..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitAppBanner.kt +++ /dev/null @@ -1,95 +0,0 @@ -package glass.yasan.toolkit.about.presentation.compose - -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.requiredHeight -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import glass.yasan.kepko.component.Foreground -import glass.yasan.kepko.component.Text -import glass.yasan.kepko.component.TextPill -import glass.yasan.kepko.foundation.annotation.ExperimentalKepkoApi -import glass.yasan.kepko.foundation.theme.KepkoTheme -import glass.yasan.toolkit.compose.about.Res -import glass.yasan.toolkit.compose.about.ic_github -import kotlinx.collections.immutable.ImmutableList -import kotlinx.collections.immutable.persistentListOf -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.ui.tooling.preview.Preview - -@Composable -public fun ToolkitAppBanner( - appName: String, - appIcon: Painter, - appVersionName: String, - buildDetails: ImmutableList, - modifier: Modifier = Modifier, - appIconColor: Color = KepkoTheme.colors.content, -) { - val buildDetailsString = remember { - buildDetails - .map { it.uppercase() } - .joinToString(separator = " ") { it } - } - - Column( - horizontalAlignment = Alignment.CenterHorizontally, - modifier = modifier - .fillMaxWidth() - .padding(16.dp), - ) { - Row( - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.spacedBy(8.dp), - ) { - Image( - painter = appIcon, - contentDescription = null, - colorFilter = ColorFilter.tint(appIconColor), - modifier = Modifier - .requiredHeight(height = 24.dp), - ) - - Text( - text = "$appName $appVersionName", - fontSize = 14.sp, - color = KepkoTheme.colors.contentSubtle, - ) - } - - TextPill( - text = buildDetailsString, - containerColor = KepkoTheme.colors.background, - modifier = Modifier - .padding(top = 16.dp), - ) - } -} - -@OptIn(ExperimentalKepkoApi::class) -@Preview -@Composable -private fun ToolkitAppBannerPreview() { - KepkoTheme { - Foreground { - ToolkitAppBanner( - appName = "Toolkit", - appIcon = painterResource(resource = Res.drawable.ic_github), - appVersionName = "1.0.0", - buildDetails = persistentListOf(100.toString(), "flavor"), - modifier = Modifier.fillMaxWidth(), - ) - } - } -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperBanner.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperBanner.kt deleted file mode 100644 index 0f24890..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperBanner.kt +++ /dev/null @@ -1,41 +0,0 @@ -package glass.yasan.toolkit.about.presentation.compose - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.requiredHeight -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import glass.yasan.kepko.component.Foreground -import glass.yasan.kepko.foundation.annotation.ExperimentalKepkoApi -import org.jetbrains.compose.ui.tooling.preview.Preview - -@Composable -public fun ToolkitDeveloperBanner( - modifier: Modifier = Modifier, -) { - Column( - modifier = modifier.fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - ToolkitDeveloperLogoHorizontal( - modifier = Modifier - .padding(16.dp) - .requiredHeight(height = 48.dp), - ) - } -} - -@OptIn(ExperimentalKepkoApi::class) -@Preview -@Composable -private fun DeveloperBrandingFooterPreview() { - MaterialTheme { - Foreground { - ToolkitDeveloperBanner() - } - } -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperContent.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperContent.kt deleted file mode 100644 index e84f7ab..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperContent.kt +++ /dev/null @@ -1,100 +0,0 @@ -package glass.yasan.toolkit.about.presentation.compose - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.widthIn -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import glass.yasan.kepko.component.ButtonText -import glass.yasan.kepko.component.Midground -import glass.yasan.kepko.component.Text -import glass.yasan.kepko.foundation.annotation.ExperimentalKepkoApi -import glass.yasan.kepko.foundation.theme.KepkoTheme -import glass.yasan.toolkit.about.domain.model.Developer -import glass.yasan.toolkit.about.domain.repository.AboutRepository -import glass.yasan.toolkit.core.url.UrlLauncher -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.ui.tooling.preview.Preview -import org.koin.compose.koinInject - -@Composable -public fun ToolkitDeveloperContent( - modifier: Modifier = Modifier, -) { - val aboutRepository: AboutRepository = koinInject() - val urlLauncher: UrlLauncher = koinInject() - - val developer: Developer by aboutRepository.developer.collectAsStateWithLifecycle(Developer()) - - ToolkitDeveloperContent( - developer = developer, - onDeveloperLinkClick = { link -> urlLauncher.launch(link.url) }, - modifier = modifier, - ) -} - -@Composable -private fun ToolkitDeveloperContent( - developer: Developer, - onDeveloperLinkClick: (Developer.Link) -> Unit, - modifier: Modifier = Modifier, -) { - Column( - verticalArrangement = Arrangement.spacedBy(space = 4.dp), - horizontalAlignment = Alignment.CenterHorizontally, - modifier = modifier.fillMaxWidth(), - ) { - Column( - verticalArrangement = Arrangement.spacedBy(space = 8.dp), - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.padding(16.dp), - ) { - ToolkitDeveloperLogoVertical( - modifier = modifier - .padding( - vertical = 8.dp, - horizontal = 16.dp, - ) - .size(128.dp), - ) - Text( - text = developer.biography, - fontSize = 16.sp, - ) - } - developer.links.forEach { link -> - ButtonText( - text = link.name, - containerColor = KepkoTheme.colors.foreground, - onClick = { onDeveloperLinkClick(link) }, - leadingIcon = null, - trailingIcon = painterResource(resource = link.icon), - modifier = Modifier - .widthIn(max = 512.dp), - ) - } - } -} - -@OptIn(ExperimentalKepkoApi::class) -@Preview -@Composable -private fun ToolkitDeveloperContentPreview() { - KepkoTheme { - Midground { - ToolkitDeveloperContent( - developer = Developer(), - onDeveloperLinkClick = {}, - modifier = Modifier.padding(16.dp), - ) - } - } -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperLogoHorizontal.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperLogoHorizontal.kt deleted file mode 100644 index b8390d8..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperLogoHorizontal.kt +++ /dev/null @@ -1,24 +0,0 @@ -package glass.yasan.toolkit.about.presentation.compose - -import androidx.compose.foundation.Image -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.ColorFilter -import glass.yasan.kepko.foundation.theme.KepkoTheme -import glass.yasan.toolkit.compose.about.Res -import glass.yasan.toolkit.compose.about.dev_logo_horizontal -import org.jetbrains.compose.resources.painterResource - -@Composable -public fun ToolkitDeveloperLogoHorizontal( - modifier: Modifier = Modifier, - color: Color = KepkoTheme.colors.content -) { - Image( - painter = painterResource(resource = Res.drawable.dev_logo_horizontal), - contentDescription = null, - colorFilter = ColorFilter.tint(color), - modifier = modifier, - ) -} diff --git a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperLogoVertical.kt b/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperLogoVertical.kt deleted file mode 100644 index d38f9ae..0000000 --- a/kotlin-multiplatform/about/src/commonMain/kotlin/glass/yasan/toolkit/about/presentation/compose/ToolkitDeveloperLogoVertical.kt +++ /dev/null @@ -1,26 +0,0 @@ -package glass.yasan.toolkit.about.presentation.compose - -import androidx.compose.foundation.Image -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.ColorFilter -import glass.yasan.kepko.foundation.theme.KepkoTheme -import glass.yasan.toolkit.compose.about.Res -import glass.yasan.toolkit.compose.about.dev_logo_vertical -import org.jetbrains.compose.resources.painterResource - -@Composable -public fun ToolkitDeveloperLogoVertical( - modifier: Modifier = Modifier, - color: Color = KepkoTheme.colors.content -) { - Image( - painter = painterResource(resource = Res.drawable.dev_logo_vertical), - contentDescription = null, - colorFilter = ColorFilter.tint(color), - modifier = modifier, - ) -} - - diff --git a/kotlin-multiplatform/gradle/libs.versions.toml b/kotlin-multiplatform/gradle/libs.versions.toml index 9de2c69..b7d839b 100644 --- a/kotlin-multiplatform/gradle/libs.versions.toml +++ b/kotlin-multiplatform/gradle/libs.versions.toml @@ -4,22 +4,18 @@ android-sdk-compile = "36" android-sdk-min = "21" androidx-activity-compose = "1.12.2" androidx-browser = "1.9.0" -androidx-compose-ui-tooling = "1.10.0" androidx-lifecycle = "2.9.6" androidx-navigation = "2.9.1" arturbosch-detekt = "1.23.8" -coil = "3.3.0" glass-yasan-kepko = "1.2.2" iurysouza-modulegraph = "0.13.0" jetbrains-compose = "1.9.3" jetbrains-compose-hotreload = "1.0.0" jetbrains-kotlin = "2.3.0" -jetbrains-kotlinx-collections-immutable = "0.4.0" jetbrains-kotlinx-coroutines = "1.10.2" jetbrains-kotlinx-serialization = "1.9.0" junit = "4.13.2" koin = "4.1.1" -ktor = "3.3.3" sample-android-sdk-compile = "36" sample-android-sdk-min = "23" sample-android-sdk-target = "36" @@ -29,17 +25,13 @@ vanniktech-maven-publish = "0.35.0" [libraries] androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity-compose" } androidx-browser = { module = "androidx.browser:browser", version.ref = "androidx-browser" } -androidx-compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "androidx-compose-ui-tooling" } androidx-lifecycle-runtime-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel", version.ref = "androidx-lifecycle" } androidx-lifecycle-viewmodel-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" } androidx-navigation-compose = { module = "org.jetbrains.androidx.navigation:navigation-compose", version.ref = "androidx-navigation" } -coil-compose = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil" } -coil-svg = { module = "io.coil-kt.coil3:coil-svg", version.ref = "coil" } glass-yasan-kepko-foundation = { module = "glass.yasan.kepko:foundation", version.ref = "glass-yasan-kepko" } glass-yasan-kepko-component = { module = "glass.yasan.kepko:component", version.ref = "glass-yasan-kepko" } jetbrains-kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "jetbrains-kotlin" } -jetbrains-kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "jetbrains-kotlinx-collections-immutable" } jetbrains-kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "jetbrains-kotlinx-coroutines" } jetbrains-kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "jetbrains-kotlinx-coroutines" } jetbrains-kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "jetbrains-kotlinx-coroutines" } @@ -51,7 +43,6 @@ koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" } koin-compose-viewmodel = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" } koin-core = { module = "io.insert-koin:koin-core", version.ref = "koin" } koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" } -ktor-http = { module = "io.ktor:ktor-http", version.ref = "ktor" } touchlab-kermit = { module = "co.touchlab:kermit", version.ref = "touchlab-kermit" } [plugins] diff --git a/kotlin-multiplatform/koin/build.gradle.kts b/kotlin-multiplatform/koin/build.gradle.kts index ccb626b..9ceeac1 100644 --- a/kotlin-multiplatform/koin/build.gradle.kts +++ b/kotlin-multiplatform/koin/build.gradle.kts @@ -44,7 +44,8 @@ kotlin { sourceSets { commonMain { dependencies { - api(project(":about")) + api(project(":compose")) + api(project(":core")) implementation(libs.jetbrains.kotlinx.coroutines.core) implementation(libs.koin.core) diff --git a/kotlin-multiplatform/koin/src/commonMain/kotlin/glass/yasan/toolkit/koin/ToolkitModule.kt b/kotlin-multiplatform/koin/src/commonMain/kotlin/glass/yasan/toolkit/koin/ToolkitModule.kt index e062ca7..6306136 100644 --- a/kotlin-multiplatform/koin/src/commonMain/kotlin/glass/yasan/toolkit/koin/ToolkitModule.kt +++ b/kotlin-multiplatform/koin/src/commonMain/kotlin/glass/yasan/toolkit/koin/ToolkitModule.kt @@ -1,7 +1,5 @@ package glass.yasan.toolkit.koin -import glass.yasan.toolkit.about.data.repository.AboutRepositoryImpl -import glass.yasan.toolkit.about.domain.repository.AboutRepository import glass.yasan.toolkit.core.annotation.InternalToolkitApi import glass.yasan.toolkit.core.coroutines.ApplicationScope import glass.yasan.toolkit.core.coroutines.DispatcherProvider @@ -9,7 +7,6 @@ import glass.yasan.toolkit.core.coroutines.createDefaultDispatcherProvider import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import org.koin.core.module.Module -import org.koin.core.module.dsl.factoryOf import org.koin.dsl.module @OptIn(InternalToolkitApi::class) @@ -20,6 +17,4 @@ public val toolkitModule: Module = module { single { CoroutineScope(SupervisorJob() + get().default) } - - factoryOf(::AboutRepositoryImpl) } diff --git a/kotlin-multiplatform/sample/composeApp/src/commonMain/composeResources/values/strings.xml b/kotlin-multiplatform/sample/composeApp/src/commonMain/composeResources/values/strings.xml index 78ec374..1298acb 100644 --- a/kotlin-multiplatform/sample/composeApp/src/commonMain/composeResources/values/strings.xml +++ b/kotlin-multiplatform/sample/composeApp/src/commonMain/composeResources/values/strings.xml @@ -1,5 +1,4 @@ - About Toolkit Colors Dark Theme diff --git a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/SampleViewModel.kt b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/SampleViewModel.kt index 224bbc0..506c890 100644 --- a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/SampleViewModel.kt +++ b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/SampleViewModel.kt @@ -1,6 +1,5 @@ package glass.yasan.toolkit.sample -import glass.yasan.toolkit.about.domain.model.Developer import glass.yasan.toolkit.compose.viewmodel.ToolkitViewModel import glass.yasan.toolkit.compose.viewmodel.ViewAction import glass.yasan.toolkit.compose.viewmodel.ViewEvent @@ -14,12 +13,10 @@ internal class SampleViewModel : ToolkitViewModel() { override fun defaultViewState(): State = State() data class State( - val developer: Developer = Developer(), val count: Int = 0, ) : ViewState sealed interface Event : ViewEvent { - data class DeveloperLinkClick(val link: Developer.Link) : Event data object Increment : Event data object Decrement : Event } @@ -37,10 +34,6 @@ internal class SampleViewModel : ToolkitViewModel() { Event.Decrement -> { updateViewState { copy(count = count - 1) } } - - is Event.DeveloperLinkClick -> { - sendViewAction(action = Action.LaunchUrl(event.link.url)) - } } } } diff --git a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/AboutScreen.kt b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/AboutScreen.kt deleted file mode 100644 index fd40ec9..0000000 --- a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/AboutScreen.kt +++ /dev/null @@ -1,49 +0,0 @@ -package glass.yasan.toolkit.sample.navigation - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.IconButton -import androidx.compose.material3.Scaffold -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.dp -import glass.yasan.kepko.component.Icon -import glass.yasan.kepko.foundation.theme.KepkoTheme -import glass.yasan.toolkit.about.presentation.compose.ToolkitDeveloperContent -import glass.yasan.toolkit.composeapp.generated.resources.Res -import glass.yasan.toolkit.composeapp.generated.resources.arrow_back -import glass.yasan.toolkit.composeapp.generated.resources.go_back -import org.jetbrains.compose.resources.painterResource -import org.jetbrains.compose.resources.stringResource - -@OptIn(ExperimentalMaterial3Api::class) -@Composable -internal fun AboutScreen( - onNavigateBack: () -> Unit, -) { - Scaffold( - topBar = { - IconButton(onClick = onNavigateBack) { - Icon( - painter = painterResource(Res.drawable.arrow_back), - contentDescription = stringResource(Res.string.go_back), - ) - } - }, - containerColor = KepkoTheme.colors.midground, - modifier = Modifier.fillMaxSize(), - ) { contentPadding -> - LazyColumn( - contentPadding = contentPadding, - verticalArrangement = Arrangement.spacedBy(16.dp), - horizontalAlignment = Alignment.CenterHorizontally, - modifier = Modifier.padding(16.dp), - ) { - item { ToolkitDeveloperContent() } - } - } -} diff --git a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/HomeScreen.kt b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/HomeScreen.kt index 3586f9a..440ab2a 100644 --- a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/HomeScreen.kt +++ b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/HomeScreen.kt @@ -27,18 +27,11 @@ import glass.yasan.kepko.foundation.annotation.ExperimentalKepkoApi import glass.yasan.kepko.foundation.theme.KepkoTheme import glass.yasan.kepko.foundation.theme.ThemeStyle import glass.yasan.kepko.util.asPreferenceRadioGroupItems -import glass.yasan.toolkit.about.presentation.compose.ToolkitAppBanner -import glass.yasan.toolkit.about.presentation.compose.ToolkitDeveloperBanner import glass.yasan.toolkit.composeapp.generated.resources.Res -import glass.yasan.toolkit.composeapp.generated.resources.about -import glass.yasan.toolkit.composeapp.generated.resources.app_icon -import glass.yasan.toolkit.composeapp.generated.resources.app_title import glass.yasan.toolkit.composeapp.generated.resources.colors import glass.yasan.toolkit.composeapp.generated.resources.decrement import glass.yasan.toolkit.composeapp.generated.resources.increment import glass.yasan.toolkit.sample.SampleViewModel -import kotlinx.collections.immutable.persistentListOf -import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource @OptIn(ExperimentalKepkoApi::class) @@ -49,7 +42,6 @@ internal fun HomeScreen( viewState: SampleViewModel.State, sendViewEvent: (SampleViewModel.Event) -> Unit, onNavigateToColors: () -> Unit, - onNavigateToAbout: () -> Unit, ) { LazyColumn( contentPadding = PaddingValues(16.dp), @@ -75,15 +67,6 @@ internal fun HomeScreen( ) } - item { - ButtonText( - text = stringResource(Res.string.about), - onClick = onNavigateToAbout, - containerColor = KepkoTheme.colors.foreground, - textAlign = TextAlign.Center, - ) - } - item { HorizontalDivider() } themeStylePreference( @@ -92,21 +75,7 @@ internal fun HomeScreen( ) item { HorizontalDivider() } - - footers() - } -} - -private fun LazyListScope.footers() { - item { - ToolkitAppBanner( - appName = stringResource(Res.string.app_title), - appIcon = painterResource(Res.drawable.app_icon), - appVersionName = "1.0.0", - buildDetails = persistentListOf(100.toString(), "flavor"), - ) } - item { ToolkitDeveloperBanner() } } @Composable diff --git a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/Route.kt b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/Route.kt index 103aecc..595f927 100644 --- a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/Route.kt +++ b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/Route.kt @@ -8,9 +8,6 @@ sealed interface Route { @Serializable data object Home : Route - @Serializable - data object About : Route - @Serializable data object Colors : Route diff --git a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/SampleNavHost.kt b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/SampleNavHost.kt index 9aec69d..44e8bd4 100644 --- a/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/SampleNavHost.kt +++ b/kotlin-multiplatform/sample/composeApp/src/commonMain/kotlin/glass/yasan/toolkit/sample/navigation/SampleNavHost.kt @@ -56,7 +56,6 @@ internal fun SampleNavHost( viewState = viewState, sendViewEvent = sendViewEvent, onNavigateToColors = { navController.navigate(Route.Colors) }, - onNavigateToAbout = { navController.navigate(Route.About) }, ) } @@ -67,11 +66,5 @@ internal fun SampleNavHost( }, ) } - - composable { - AboutScreen( - onNavigateBack = { navController.navigateUp() }, - ) - } } } diff --git a/kotlin-multiplatform/settings.gradle.kts b/kotlin-multiplatform/settings.gradle.kts index 77c07fa..6204135 100644 --- a/kotlin-multiplatform/settings.gradle.kts +++ b/kotlin-multiplatform/settings.gradle.kts @@ -14,7 +14,6 @@ dependencyResolutionManagement { } rootProject.name = "toolkit" -include(":about") include(":compose") include(":core") include(":koin")