From ac444b668daadb62573f8fd570f32124afab4abc Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 07:52:15 +0900 Subject: [PATCH 01/29] Add design system module --- core-android/design-system/build.gradle.kts | 40 +++++++++++++++++++ .../src/main/AndroidManifest.xml | 4 ++ settings.gradle.kts | 2 + 3 files changed, 46 insertions(+) create mode 100644 core-android/design-system/build.gradle.kts create mode 100644 core-android/design-system/src/main/AndroidManifest.xml diff --git a/core-android/design-system/build.gradle.kts b/core-android/design-system/build.gradle.kts new file mode 100644 index 0000000..72e29ed --- /dev/null +++ b/core-android/design-system/build.gradle.kts @@ -0,0 +1,40 @@ +plugins { + alias(libs.plugins.androidLibrary) + alias(libs.plugins.kotlinAndroid) +} + +android { + namespace = "dev.love.winter.designsystem" + compileSdk = 36 + + defaultConfig { + minSdk = 24 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } +} + +dependencies { + + implementation(libs.androidX.coreKtx) + implementation(libs.androidX.appcompat) + implementation(libs.material) + testImplementation(libs.junit) + androidTestImplementation(libs.androidX.testJunit) + androidTestImplementation(libs.androidX.testEspresso) +} \ No newline at end of file diff --git a/core-android/design-system/src/main/AndroidManifest.xml b/core-android/design-system/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/core-android/design-system/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 0606fce..7810845 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -7,3 +7,5 @@ pluginManagement { rootProject.name = "LanguageStudy" include(":app") +include(":core-android") +include(":core-android:design-system") From f928aa6310a4bac4e7d355a3687d1c9d59193b41 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 08:38:48 +0900 Subject: [PATCH 02/29] Fix plugin logic --- .../java/dev/love/winter/convention/AndroidCompose.kt | 11 +++++------ .../src/main/java/winter.compose.gradle.kts | 7 +++++-- .../src/main/java/winter.compose.library.gradle.kts | 6 +++++- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/build-logic/convention/src/main/java/dev/love/winter/convention/AndroidCompose.kt b/build-logic/convention/src/main/java/dev/love/winter/convention/AndroidCompose.kt index a34228b..1054387 100644 --- a/build-logic/convention/src/main/java/dev/love/winter/convention/AndroidCompose.kt +++ b/build-logic/convention/src/main/java/dev/love/winter/convention/AndroidCompose.kt @@ -2,25 +2,24 @@ package dev.love.winter.convention // reference : https://github.com/android/nowinandroid/blob/main/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt -import com.android.build.gradle.internal.dsl.BaseAppModuleExtension +import dev.love.winter.convention.extension.AndroidExtension import dev.love.winter.convention.extension.api import dev.love.winter.convention.extension.debugImplementation import dev.love.winter.convention.extension.implementation import dev.love.winter.convention.extension.libs import org.gradle.api.Project import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.withType import org.jetbrains.kotlin.gradle.tasks.KotlinCompile -internal fun Project.configureComposeAndroid() { +internal fun Project.configureComposeAndroid( + commonExtension: AndroidExtension, +) { with(pluginManager) { apply("org.jetbrains.kotlin.plugin.compose") } - val extension = extensions.getByType() - - extension.apply { + commonExtension.apply { buildFeatures.compose = true } diff --git a/build-logic/convention/src/main/java/winter.compose.gradle.kts b/build-logic/convention/src/main/java/winter.compose.gradle.kts index 0e24aa6..3516606 100644 --- a/build-logic/convention/src/main/java/winter.compose.gradle.kts +++ b/build-logic/convention/src/main/java/winter.compose.gradle.kts @@ -1,9 +1,12 @@ +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import dev.love.winter.convention.configureComposeAndroid import dev.love.winter.convention.extension.implementation import dev.love.winter.convention.extension.libs +import org.gradle.kotlin.dsl.getByType - -configureComposeAndroid() +configureComposeAndroid( + commonExtension = extensions.getByType(), +) dependencies { implementation(libs.findLibrary("androidX-activityCompose")) diff --git a/build-logic/convention/src/main/java/winter.compose.library.gradle.kts b/build-logic/convention/src/main/java/winter.compose.library.gradle.kts index 7ce5b62..61fd78f 100644 --- a/build-logic/convention/src/main/java/winter.compose.library.gradle.kts +++ b/build-logic/convention/src/main/java/winter.compose.library.gradle.kts @@ -1,3 +1,7 @@ +import com.android.build.gradle.LibraryExtension import dev.love.winter.convention.configureComposeAndroid +import org.gradle.kotlin.dsl.getByType -configureComposeAndroid() +configureComposeAndroid( + commonExtension = extensions.getByType(), +) From 9809980692d47bfce059a60b23a992b873d2e0eb Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 08:39:45 +0900 Subject: [PATCH 03/29] Setup design-system gradle --- core-android/design-system/build.gradle.kts | 40 +++------------------ 1 file changed, 5 insertions(+), 35 deletions(-) diff --git a/core-android/design-system/build.gradle.kts b/core-android/design-system/build.gradle.kts index 72e29ed..e9d91c1 100644 --- a/core-android/design-system/build.gradle.kts +++ b/core-android/design-system/build.gradle.kts @@ -1,40 +1,10 @@ +import dev.love.winter.convention.extension.setNamespace + plugins { - alias(libs.plugins.androidLibrary) - alias(libs.plugins.kotlinAndroid) + id("winter.android.library") + id("winter.compose.library") } android { - namespace = "dev.love.winter.designsystem" - compileSdk = 36 - - defaultConfig { - minSdk = 24 - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles("consumer-rules.pro") - } - - buildTypes { - release { - isMinifyEnabled = false - proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") - } - } - compileOptions { - sourceCompatibility = JavaVersion.VERSION_11 - targetCompatibility = JavaVersion.VERSION_11 - } - kotlinOptions { - jvmTarget = "11" - } + setNamespace("designsystem") } - -dependencies { - - implementation(libs.androidX.coreKtx) - implementation(libs.androidX.appcompat) - implementation(libs.material) - testImplementation(libs.junit) - androidTestImplementation(libs.androidX.testJunit) - androidTestImplementation(libs.androidX.testEspresso) -} \ No newline at end of file From 916a5904f800c422f32f6a9493f80bbc77307e1c Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 08:40:42 +0900 Subject: [PATCH 04/29] Add color token --- .../love/winter/designsystem/theme/Color.kt | 63 +++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt new file mode 100644 index 0000000..6450ee3 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -0,0 +1,63 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.ui.graphics.Color + +// Brand - Primary +val Primary50 = Color(0xFFF1F1FF) +val Primary100 = Color(0xFFDBDFFF) +val Primary200 = Color(0xFFC1C8FF) +val Primary300 = Color(0xFF9397FF) +val Primary400 = Color(0xFF7278FF) +val Primary500 = Color(0xFF5653FF) +val Primary600 = Color(0xFF4745E4) +val Primary700 = Color(0xFF3B39AF) +val Primary800 = Color(0xFF2B2A85) +val Primary900 = Color(0xFF131243) + +// Neutral - Grey +val Grey50 = Color(0xFFFDFDFD) +val Grey100 = Color(0xFFF4F4F5) +val Grey200 = Color(0xFFE7E7EA) +val Grey300 = Color(0xFFD9D9DC) +val Grey400 = Color(0xFFBFC0C9) +val Grey500 = Color(0xFF8D8F9B) +val Grey600 = Color(0xFF60626C) +val Grey700 = Color(0xFF484951) +val Grey800 = Color(0xFF313237) +val Grey900 = Color(0xFF18181B) + +// Semantic - Green +val Green50 = Color(0xFFECFAF3) +val Green100 = Color(0xFFC3EEDB) +val Green200 = Color(0xFFA5E6CA) +val Green300 = Color(0xFF7CDAB1) +val Green400 = Color(0xFF63D3A2) +val Green500 = Color(0xFF3CC88B) +val Green600 = Color(0xFF37B67E) +val Green700 = Color(0xFF247E57) +val Green800 = Color(0xFF115B3A) +val Green900 = Color(0xFF0F3122) + +// Semantic - Yellow +val Yellow50 = Color(0xFFFFF7E9) +val Yellow100 = Color(0xFFFFEAC7) +val Yellow200 = Color(0xFFFFDA9A) +val Yellow300 = Color(0xFFFFCD78) +val Yellow400 = Color(0xFFFFBD49) +val Yellow500 = Color(0xFFFFAF24) +val Yellow600 = Color(0xFFF2A522) +val Yellow700 = Color(0xFFC7881A) +val Yellow800 = Color(0xFF825911) +val Yellow900 = Color(0xFF4A340E) + +// Semantic - Red +val Red50 = Color(0xFFFCEBEB) +val Red100 = Color(0xFFFFD7D7) +val Red200 = Color(0xFFF2A1A1) +val Red300 = Color(0xFFEC7676) +val Red400 = Color(0xFFE85B5B) +val Red500 = Color(0xFFE23232) +val Red600 = Color(0xFFCE2E2E) +val Red700 = Color(0xFFA02424) +val Red800 = Color(0xFF6C1A1A) +val Red900 = Color(0xFF401111) \ No newline at end of file From bf72aeb0d673becdfc67520b37820c8df337bd95 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 08:58:23 +0900 Subject: [PATCH 05/29] Add background color token --- .../love/winter/designsystem/theme/Color.kt | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 6450ee3..a1cdacd 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -2,6 +2,10 @@ package dev.love.winter.designsystem.theme import androidx.compose.ui.graphics.Color +/** + * Color token + */ + // Brand - Primary val Primary50 = Color(0xFFF1F1FF) val Primary100 = Color(0xFFDBDFFF) @@ -60,4 +64,37 @@ val Red500 = Color(0xFFE23232) val Red600 = Color(0xFFCE2E2E) val Red700 = Color(0xFFA02424) val Red800 = Color(0xFF6C1A1A) -val Red900 = Color(0xFF401111) \ No newline at end of file +val Red900 = Color(0xFF401111) + +/** + * Component Token - Background (Light Theme) + */ +val ColorBackgroundLight = Grey50 +val ColorBackgroundContainerLight = Grey100 +val ColorBackgroundObjectLight = Grey200 +val ColorBackgroundModalLight = Grey50 +val ColorBackgroundBrandLight = Primary500 +val ColorBackgroundBrandSubtleLight = Primary50 +val ColorBackgroundPositiveLight = Green50 +val ColorBackgroundWarningLight = Yellow50 +val ColorBackgroundNegativeLight = Red50 +val ColorBackgroundContrastLight = Grey900 +val ColorBackgroundDisabledLight = Grey100 +val ColorBackgroundOverlayLight = Grey900.copy(alpha = 0.5f) + +/** + * Component Token - Background (Dark Theme) + */ +val ColorBackgroundDark = Grey900 +val ColorBackgroundContainerDark = Grey800 +val ColorBackgroundObjectDark = Grey700 +val ColorBackgroundModalDark = Grey800 +val ColorBackgroundBrandDark = Primary500 +val ColorBackgroundBrandSubtleDark = Primary900 +val ColorBackgroundPositiveDark = Green900 +val ColorBackgroundWarningDark = Yellow900 +val ColorBackgroundNegativeDark = Red900 +val ColorBackgroundContrastDark = Grey50 +val ColorBackgroundDisabledDark = Grey800 +val ColorBackgroundOverlayDark = Grey900.copy(alpha = 0.7f) + From 3504a71f46b836c80e9f377db67f08760fb33ead Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:09:55 +0900 Subject: [PATCH 06/29] Update lint rule - braces require --- config/detekt/detekt.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index 956a654..a51c2d9 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -304,6 +304,8 @@ style: active: false BracesOnIfStatements: active: true + BracesOnWhenStatements: + active: true MandatoryBracesLoops: active: true MaxLineLength: From 5ab08f63f2b2e98aa40f36b9fe75f290b281d79c Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:13:08 +0900 Subject: [PATCH 07/29] Update app color scheme & theme --- .../designsystem/theme/AppColorScheme.kt | 59 +++++++++ .../love/winter/designsystem/theme/Theme.kt | 115 ++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt new file mode 100644 index 0000000..06da3c0 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt @@ -0,0 +1,59 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color + +/** + * Component color tokens for the app + * Contains only component-level tokens (not primitive tokens) + */ +@Immutable +data class AppColorScheme( + val colorBackground: Color, + val colorBackgroundContainer: Color, + val colorBackgroundObject: Color, + val colorBackgroundModal: Color, + val colorBackgroundBrand: Color, + val colorBackgroundBrandSubtle: Color, + val colorBackgroundPositive: Color, + val colorBackgroundWarning: Color, + val colorBackgroundNegative: Color, + val colorBackgroundContrast: Color, + val colorBackgroundDisabled: Color, + val colorBackgroundOverlay: Color, +) + +val LightAppColorScheme = AppColorScheme( + colorBackground = ColorBackgroundLight, + colorBackgroundContainer = ColorBackgroundContainerLight, + colorBackgroundObject = ColorBackgroundObjectLight, + colorBackgroundModal = ColorBackgroundModalLight, + colorBackgroundBrand = ColorBackgroundBrandLight, + colorBackgroundBrandSubtle = ColorBackgroundBrandSubtleLight, + colorBackgroundPositive = ColorBackgroundPositiveLight, + colorBackgroundWarning = ColorBackgroundWarningLight, + colorBackgroundNegative = ColorBackgroundNegativeLight, + colorBackgroundContrast = ColorBackgroundContrastLight, + colorBackgroundDisabled = ColorBackgroundDisabledLight, + colorBackgroundOverlay = ColorBackgroundOverlayLight, +) + +val DarkAppColorScheme = AppColorScheme( + colorBackground = ColorBackgroundDark, + colorBackgroundContainer = ColorBackgroundContainerDark, + colorBackgroundObject = ColorBackgroundObjectDark, + colorBackgroundModal = ColorBackgroundModalDark, + colorBackgroundBrand = ColorBackgroundBrandDark, + colorBackgroundBrandSubtle = ColorBackgroundBrandSubtleDark, + colorBackgroundPositive = ColorBackgroundPositiveDark, + colorBackgroundWarning = ColorBackgroundWarningDark, + colorBackgroundNegative = ColorBackgroundNegativeDark, + colorBackgroundContrast = ColorBackgroundContrastDark, + colorBackgroundDisabled = ColorBackgroundDisabledDark, + colorBackgroundOverlay = ColorBackgroundOverlayDark, +) + +val LocalAppColorScheme = staticCompositionLocalOf { + LightAppColorScheme +} \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt new file mode 100644 index 0000000..7f5e76e --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -0,0 +1,115 @@ +package dev.love.winter.designsystem.theme + +import android.app.Activity +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.platform.LocalView +import androidx.core.view.WindowCompat + +private val LightColorScheme = lightColorScheme( + primary = Primary500, + onPrimary = Color.White, + primaryContainer = Primary100, + onPrimaryContainer = Primary900, + secondary = Grey600, + onSecondary = Color.White, + secondaryContainer = Grey200, + onSecondaryContainer = Grey900, + tertiary = Green600, + onTertiary = Color.White, + tertiaryContainer = Green100, + onTertiaryContainer = Green900, + error = Red500, + onError = Color.White, + errorContainer = Red100, + onErrorContainer = Red900, + background = Grey50, + onBackground = Grey900, + surface = Grey100, + onSurface = Grey900, + surfaceVariant = Grey200, + onSurfaceVariant = Grey700, + outline = Grey400, + outlineVariant = Grey300, + scrim = Grey900, +) + +private val DarkColorScheme = darkColorScheme( + primary = Primary400, + onPrimary = Primary900, + primaryContainer = Primary800, + onPrimaryContainer = Primary100, + secondary = Grey400, + onSecondary = Grey900, + secondaryContainer = Grey700, + onSecondaryContainer = Grey100, + tertiary = Green400, + onTertiary = Green900, + tertiaryContainer = Green800, + onTertiaryContainer = Green100, + error = Red400, + onError = Red900, + errorContainer = Red800, + onErrorContainer = Red100, + background = Grey900, + onBackground = Grey50, + surface = Grey800, + onSurface = Grey50, + surfaceVariant = Grey700, + onSurfaceVariant = Grey300, + outline = Grey600, + outlineVariant = Grey700, + scrim = Grey900, +) + +val LocalDarkTheme = compositionLocalOf { false } + +@Composable +fun WinterTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit, +) { + val colorScheme = if (darkTheme) { + DarkColorScheme + } else { + LightColorScheme + } + val appColorScheme = if (darkTheme) { + DarkAppColorScheme + } else { + LightAppColorScheme + } + + if (!LocalInspectionMode.current) { + val view = LocalView.current + SideEffect { + val window = (view.context as Activity).window + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme + WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = !darkTheme + } + } + + CompositionLocalProvider( + LocalDarkTheme provides darkTheme, + LocalAppColorScheme provides appColorScheme, + ) { + MaterialTheme( + colorScheme = colorScheme, + content = content, + ) + } +} + +object AppTheme { + val colors: AppColorScheme + @Composable + get() = LocalAppColorScheme.current +} From 49c842c6851fe211904fc9d9e87e75f29e0e9ed4 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:21:25 +0900 Subject: [PATCH 08/29] Add stroke color token --- .../designsystem/theme/AppColorScheme.kt | 21 +++++++++++++++++++ .../love/winter/designsystem/theme/Color.kt | 21 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt index 06da3c0..86b7eb1 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt @@ -22,6 +22,13 @@ data class AppColorScheme( val colorBackgroundContrast: Color, val colorBackgroundDisabled: Color, val colorBackgroundOverlay: Color, + val colorStrokeNeutralSubtle: Color, + val colorStrokeNeutral: Color, + val colorStrokeNeutralStrong: Color, + val colorStrokeBrand: Color, + val colorStrokePositive: Color, + val colorStrokeWarning: Color, + val colorStrokeNegative: Color, ) val LightAppColorScheme = AppColorScheme( @@ -37,6 +44,13 @@ val LightAppColorScheme = AppColorScheme( colorBackgroundContrast = ColorBackgroundContrastLight, colorBackgroundDisabled = ColorBackgroundDisabledLight, colorBackgroundOverlay = ColorBackgroundOverlayLight, + colorStrokeNeutralSubtle = ColorStrokeNeutralSubtleLight, + colorStrokeNeutral = ColorStrokeNeutralLight, + colorStrokeNeutralStrong = ColorStrokeNeutralStrongLight, + colorStrokeBrand = ColorStrokeBrandLight, + colorStrokePositive = ColorStrokePositiveLight, + colorStrokeWarning = ColorStrokeWarningLight, + colorStrokeNegative = ColorStrokeNegativeLight, ) val DarkAppColorScheme = AppColorScheme( @@ -52,6 +66,13 @@ val DarkAppColorScheme = AppColorScheme( colorBackgroundContrast = ColorBackgroundContrastDark, colorBackgroundDisabled = ColorBackgroundDisabledDark, colorBackgroundOverlay = ColorBackgroundOverlayDark, + colorStrokeNeutralSubtle = ColorStrokeNeutralSubtleDark, + colorStrokeNeutral = ColorStrokeNeutralDark, + colorStrokeNeutralStrong = ColorStrokeNeutralStrongDark, + colorStrokeBrand = ColorStrokeBrandDark, + colorStrokePositive = ColorStrokePositiveDark, + colorStrokeWarning = ColorStrokeWarningDark, + colorStrokeNegative = ColorStrokeNegativeDark, ) val LocalAppColorScheme = staticCompositionLocalOf { diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index a1cdacd..75a3f08 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -98,3 +98,24 @@ val ColorBackgroundContrastDark = Grey50 val ColorBackgroundDisabledDark = Grey800 val ColorBackgroundOverlayDark = Grey900.copy(alpha = 0.7f) +/** + * Component Token - Stroke (Light Theme) + */ +val ColorStrokeNeutralSubtleLight = Grey100 +val ColorStrokeNeutralLight = Grey200 +val ColorStrokeNeutralStrongLight = Grey300 +val ColorStrokeBrandLight = Primary500 +val ColorStrokePositiveLight = Green500 +val ColorStrokeWarningLight = Yellow500 +val ColorStrokeNegativeLight = Red500 + +/** + * Component Token - Stroke (Dark Theme) + */ +val ColorStrokeNeutralSubtleDark = Grey800 +val ColorStrokeNeutralDark = Grey700 +val ColorStrokeNeutralStrongDark = Grey600 +val ColorStrokeBrandDark = Primary600 +val ColorStrokePositiveDark = Green600 +val ColorStrokeWarningDark = Yellow600 +val ColorStrokeNegativeDark = Red600 From f04b764d9c481c100377422dd7e9c538056fe3fd Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:24:32 +0900 Subject: [PATCH 09/29] Add Gradle JVM configuration --- gradle.properties | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/gradle.properties b/gradle.properties index 42408a1..56c6244 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,6 +5,10 @@ # For more details on how to configure your build environment visit # http://www.gradle.org/docs/current/userguide/build_environment.html +org.gradle.jvmargs=\ + -Xmx2g \ + -Dfile.encoding=UTF-8 + android.useAndroidX=true android.enableJetifier=false android.nonTransitiveRClass=true From 99d5bc384f8e9ae5c0d1b6f0852c53158b6c0002 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:25:33 +0900 Subject: [PATCH 10/29] Change file name --- .../designsystem/theme/{AppColorScheme.kt => ColorScheme.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/{AppColorScheme.kt => ColorScheme.kt} (100%) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt similarity index 100% rename from core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/AppColorScheme.kt rename to core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt From 2f096b37ad5312da25b1116d05c6a1d931745a90 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:29:27 +0900 Subject: [PATCH 11/29] Add text color token --- .../love/winter/designsystem/theme/Color.kt | 36 ++++++++++++++++ .../winter/designsystem/theme/ColorScheme.kt | 42 +++++++++++++++++++ 2 files changed, 78 insertions(+) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 75a3f08..ff484b4 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -119,3 +119,39 @@ val ColorStrokeBrandDark = Primary600 val ColorStrokePositiveDark = Green600 val ColorStrokeWarningDark = Yellow600 val ColorStrokeNegativeDark = Red600 + +/** + * Component Token - Text (Light Theme) + */ +val ColorTextTitleLight = Grey900 +val ColorTextSubtitleLight = Grey700 +val ColorTextBodyLight = Grey800 +val ColorTextCaptionLight = Grey600 +val ColorTextPlaceholderLight = Grey500 +val ColorTextDisabledLight = Grey400 +val ColorTextOnColorDarkLight = Grey50 +val ColorTextOnColorLightLight = Grey900 +val ColorTextOnContrastLight = Grey50 +val ColorTextLinkLight = Primary600 +val ColorTextBrandLight = Primary500 +val ColorTextPositiveLight = Green200 +val ColorTextWarningLight = Yellow700 +val ColorTextNegativeLight = Red600 + +/** + * Component Token - Text (Dark Theme) + */ +val ColorTextTitleDark = Grey50 +val ColorTextSubtitleDark = Grey200 +val ColorTextBodyDark = Grey100 +val ColorTextCaptionDark = Grey300 +val ColorTextPlaceholderDark = Grey500 +val ColorTextDisabledDark = Grey600 +val ColorTextOnColorDarkDark = Grey50 +val ColorTextOnColorLightDark = Grey900 +val ColorTextOnContrastDark = Grey900 +val ColorTextLinkDark = Primary300 +val ColorTextBrandDark = Primary500 +val ColorTextPositiveDark = Green700 +val ColorTextWarningDark = Yellow200 +val ColorTextNegativeDark = Red200 \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt index 86b7eb1..09830c8 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt @@ -29,6 +29,20 @@ data class AppColorScheme( val colorStrokePositive: Color, val colorStrokeWarning: Color, val colorStrokeNegative: Color, + val colorTextTitle: Color, + val colorTextSubtitle: Color, + val colorTextBody: Color, + val colorTextCaption: Color, + val colorTextPlaceholder: Color, + val colorTextDisabled: Color, + val colorTextOnColorDark: Color, + val colorTextOnColorLight: Color, + val colorTextOnContrast: Color, + val colorTextLink: Color, + val colorTextBrand: Color, + val colorTextPositive: Color, + val colorTextWarning: Color, + val colorTextNegative: Color, ) val LightAppColorScheme = AppColorScheme( @@ -51,6 +65,20 @@ val LightAppColorScheme = AppColorScheme( colorStrokePositive = ColorStrokePositiveLight, colorStrokeWarning = ColorStrokeWarningLight, colorStrokeNegative = ColorStrokeNegativeLight, + colorTextTitle = ColorTextTitleLight, + colorTextSubtitle = ColorTextSubtitleLight, + colorTextBody = ColorTextBodyLight, + colorTextCaption = ColorTextCaptionLight, + colorTextPlaceholder = ColorTextPlaceholderLight, + colorTextDisabled = ColorTextDisabledLight, + colorTextOnColorDark = ColorTextOnColorDarkLight, + colorTextOnColorLight = ColorTextOnColorLightLight, + colorTextOnContrast = ColorTextOnContrastLight, + colorTextLink = ColorTextLinkLight, + colorTextBrand = ColorTextBrandLight, + colorTextPositive = ColorTextPositiveLight, + colorTextWarning = ColorTextWarningLight, + colorTextNegative = ColorTextNegativeLight, ) val DarkAppColorScheme = AppColorScheme( @@ -73,6 +101,20 @@ val DarkAppColorScheme = AppColorScheme( colorStrokePositive = ColorStrokePositiveDark, colorStrokeWarning = ColorStrokeWarningDark, colorStrokeNegative = ColorStrokeNegativeDark, + colorTextTitle = ColorTextTitleDark, + colorTextSubtitle = ColorTextSubtitleDark, + colorTextBody = ColorTextBodyDark, + colorTextCaption = ColorTextCaptionDark, + colorTextPlaceholder = ColorTextPlaceholderDark, + colorTextDisabled = ColorTextDisabledDark, + colorTextOnColorDark = ColorTextOnColorDarkDark, + colorTextOnColorLight = ColorTextOnColorLightDark, + colorTextOnContrast = ColorTextOnContrastDark, + colorTextLink = ColorTextLinkDark, + colorTextBrand = ColorTextBrandDark, + colorTextPositive = ColorTextPositiveDark, + colorTextWarning = ColorTextWarningDark, + colorTextNegative = ColorTextNegativeDark, ) val LocalAppColorScheme = staticCompositionLocalOf { From cf27a248d4c735aec1aaf266dee0846f7fbc26b2 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:33:18 +0900 Subject: [PATCH 12/29] Update git ignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 194a2f8..1f64d98 100644 --- a/.gitignore +++ b/.gitignore @@ -77,6 +77,9 @@ proguard/ *~ *.swp +# macOS +.DS_Store + ### AndroidStudio Patch ### !/gradle/wrapper/gradle-wrapper.jar From 0215473b947a3db7ffe885614dfde7714704c75a Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:35:37 +0900 Subject: [PATCH 13/29] Add icon color token --- .../love/winter/designsystem/theme/Color.kt | 32 +++++++++++++++++- .../winter/designsystem/theme/ColorScheme.kt | 33 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index ff484b4..0bc7fc4 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -154,4 +154,34 @@ val ColorTextLinkDark = Primary300 val ColorTextBrandDark = Primary500 val ColorTextPositiveDark = Green700 val ColorTextWarningDark = Yellow200 -val ColorTextNegativeDark = Red200 \ No newline at end of file +val ColorTextNegativeDark = Red200 + +/** + * Component Token - Icon (Light Theme) + */ +val ColorIconNeutralSubtleLight = Grey500 +val ColorIconNeutralLight = Grey600 +val ColorIconNeutralStrongLight = Grey900 +val ColorIconBrandLight = Primary500 +val ColorIconPositiveLight = Green600 +val ColorIconWarningLight = Yellow600 +val ColorIconNegativeLight = Red600 +val ColorIconOnColorDarkLight = Grey50 +val ColorIconOnColorLightLight = Grey900 +val ColorIconOnContrastLight = Grey50 +val ColorIconDisabledLight = Grey400 + +/** + * Component Token - Icon (Dark Theme) + */ +val ColorIconNeutralSubtleDark = Grey500 +val ColorIconNeutralDark = Grey300 +val ColorIconNeutralStrongDark = Grey300 +val ColorIconBrandDark = Primary500 +val ColorIconPositiveDark = Green600 +val ColorIconWarningDark = Yellow500 +val ColorIconNegativeDark = Red500 +val ColorIconOnColorDarkDark = Grey50 +val ColorIconOnColorLightDark = Grey900 +val ColorIconOnContrastDark = Grey900 +val ColorIconDisabledDark = Grey600 \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt index 09830c8..aa5a64e 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt @@ -43,6 +43,17 @@ data class AppColorScheme( val colorTextPositive: Color, val colorTextWarning: Color, val colorTextNegative: Color, + val colorIconNeutralSubtle: Color, + val colorIconNeutral: Color, + val colorIconNeutralStrong: Color, + val colorIconBrand: Color, + val colorIconPositive: Color, + val colorIconWarning: Color, + val colorIconNegative: Color, + val colorIconOnColorDark: Color, + val colorIconOnColorLight: Color, + val colorIconOnContrast: Color, + val colorIconDisabled: Color, ) val LightAppColorScheme = AppColorScheme( @@ -79,6 +90,17 @@ val LightAppColorScheme = AppColorScheme( colorTextPositive = ColorTextPositiveLight, colorTextWarning = ColorTextWarningLight, colorTextNegative = ColorTextNegativeLight, + colorIconNeutralSubtle = ColorIconNeutralSubtleLight, + colorIconNeutral = ColorIconNeutralLight, + colorIconNeutralStrong = ColorIconNeutralStrongLight, + colorIconBrand = ColorIconBrandLight, + colorIconPositive = ColorIconPositiveLight, + colorIconWarning = ColorIconWarningLight, + colorIconNegative = ColorIconNegativeLight, + colorIconOnColorDark = ColorIconOnColorDarkLight, + colorIconOnColorLight = ColorIconOnColorLightLight, + colorIconOnContrast = ColorIconOnContrastLight, + colorIconDisabled = ColorIconDisabledLight, ) val DarkAppColorScheme = AppColorScheme( @@ -115,6 +137,17 @@ val DarkAppColorScheme = AppColorScheme( colorTextPositive = ColorTextPositiveDark, colorTextWarning = ColorTextWarningDark, colorTextNegative = ColorTextNegativeDark, + colorIconNeutralSubtle = ColorIconNeutralSubtleDark, + colorIconNeutral = ColorIconNeutralDark, + colorIconNeutralStrong = ColorIconNeutralStrongDark, + colorIconBrand = ColorIconBrandDark, + colorIconPositive = ColorIconPositiveDark, + colorIconWarning = ColorIconWarningDark, + colorIconNegative = ColorIconNegativeDark, + colorIconOnColorDark = ColorIconOnColorDarkDark, + colorIconOnColorLight = ColorIconOnColorLightDark, + colorIconOnContrast = ColorIconOnContrastDark, + colorIconDisabled = ColorIconDisabledDark, ) val LocalAppColorScheme = staticCompositionLocalOf { From 6251feff5a99de0ac19a49b40034f03d5cb04d6c Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:38:56 +0900 Subject: [PATCH 14/29] Remove unnecessary prefix --- .../love/winter/designsystem/theme/Color.kt | 176 ++++++------ .../winter/designsystem/theme/ColorScheme.kt | 270 +++++++++--------- .../love/winter/designsystem/theme/Theme.kt | 2 +- 3 files changed, 224 insertions(+), 224 deletions(-) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 0bc7fc4..1836c32 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -69,119 +69,119 @@ val Red900 = Color(0xFF401111) /** * Component Token - Background (Light Theme) */ -val ColorBackgroundLight = Grey50 -val ColorBackgroundContainerLight = Grey100 -val ColorBackgroundObjectLight = Grey200 -val ColorBackgroundModalLight = Grey50 -val ColorBackgroundBrandLight = Primary500 -val ColorBackgroundBrandSubtleLight = Primary50 -val ColorBackgroundPositiveLight = Green50 -val ColorBackgroundWarningLight = Yellow50 -val ColorBackgroundNegativeLight = Red50 -val ColorBackgroundContrastLight = Grey900 -val ColorBackgroundDisabledLight = Grey100 -val ColorBackgroundOverlayLight = Grey900.copy(alpha = 0.5f) +val BackgroundLight = Grey50 +val BackgroundContainerLight = Grey100 +val BackgroundObjectLight = Grey200 +val BackgroundModalLight = Grey50 +val BackgroundBrandLight = Primary500 +val BackgroundBrandSubtleLight = Primary50 +val BackgroundPositiveLight = Green50 +val BackgroundWarningLight = Yellow50 +val BackgroundNegativeLight = Red50 +val BackgroundContrastLight = Grey900 +val BackgroundDisabledLight = Grey100 +val BackgroundOverlayLight = Grey900.copy(alpha = 0.5f) /** * Component Token - Background (Dark Theme) */ -val ColorBackgroundDark = Grey900 -val ColorBackgroundContainerDark = Grey800 -val ColorBackgroundObjectDark = Grey700 -val ColorBackgroundModalDark = Grey800 -val ColorBackgroundBrandDark = Primary500 -val ColorBackgroundBrandSubtleDark = Primary900 -val ColorBackgroundPositiveDark = Green900 -val ColorBackgroundWarningDark = Yellow900 -val ColorBackgroundNegativeDark = Red900 -val ColorBackgroundContrastDark = Grey50 -val ColorBackgroundDisabledDark = Grey800 -val ColorBackgroundOverlayDark = Grey900.copy(alpha = 0.7f) +val BackgroundDark = Grey900 +val BackgroundContainerDark = Grey800 +val BackgroundObjectDark = Grey700 +val BackgroundModalDark = Grey800 +val BackgroundBrandDark = Primary500 +val BackgroundBrandSubtleDark = Primary900 +val BackgroundPositiveDark = Green900 +val BackgroundWarningDark = Yellow900 +val BackgroundNegativeDark = Red900 +val BackgroundContrastDark = Grey50 +val BackgroundDisabledDark = Grey800 +val BackgroundOverlayDark = Grey900.copy(alpha = 0.7f) /** * Component Token - Stroke (Light Theme) */ -val ColorStrokeNeutralSubtleLight = Grey100 -val ColorStrokeNeutralLight = Grey200 -val ColorStrokeNeutralStrongLight = Grey300 -val ColorStrokeBrandLight = Primary500 -val ColorStrokePositiveLight = Green500 -val ColorStrokeWarningLight = Yellow500 -val ColorStrokeNegativeLight = Red500 +val StrokeNeutralSubtleLight = Grey100 +val StrokeNeutralLight = Grey200 +val StrokeNeutralStrongLight = Grey300 +val StrokeBrandLight = Primary500 +val StrokePositiveLight = Green500 +val StrokeWarningLight = Yellow500 +val StrokeNegativeLight = Red500 /** * Component Token - Stroke (Dark Theme) */ -val ColorStrokeNeutralSubtleDark = Grey800 -val ColorStrokeNeutralDark = Grey700 -val ColorStrokeNeutralStrongDark = Grey600 -val ColorStrokeBrandDark = Primary600 -val ColorStrokePositiveDark = Green600 -val ColorStrokeWarningDark = Yellow600 -val ColorStrokeNegativeDark = Red600 +val StrokeNeutralSubtleDark = Grey800 +val StrokeNeutralDark = Grey700 +val StrokeNeutralStrongDark = Grey600 +val StrokeBrandDark = Primary600 +val StrokePositiveDark = Green600 +val StrokeWarningDark = Yellow600 +val StrokeNegativeDark = Red600 /** * Component Token - Text (Light Theme) */ -val ColorTextTitleLight = Grey900 -val ColorTextSubtitleLight = Grey700 -val ColorTextBodyLight = Grey800 -val ColorTextCaptionLight = Grey600 -val ColorTextPlaceholderLight = Grey500 -val ColorTextDisabledLight = Grey400 -val ColorTextOnColorDarkLight = Grey50 -val ColorTextOnColorLightLight = Grey900 -val ColorTextOnContrastLight = Grey50 -val ColorTextLinkLight = Primary600 -val ColorTextBrandLight = Primary500 -val ColorTextPositiveLight = Green200 -val ColorTextWarningLight = Yellow700 -val ColorTextNegativeLight = Red600 +val TextTitleLight = Grey900 +val TextSubtitleLight = Grey700 +val TextBodyLight = Grey800 +val TextCaptionLight = Grey600 +val TextPlaceholderLight = Grey500 +val TextDisabledLight = Grey400 +val TextOnColorDarkLight = Grey50 +val TextOnColorLightLight = Grey900 +val TextOnContrastLight = Grey50 +val TextLinkLight = Primary600 +val TextBrandLight = Primary500 +val TextPositiveLight = Green200 +val TextWarningLight = Yellow700 +val TextNegativeLight = Red600 /** * Component Token - Text (Dark Theme) */ -val ColorTextTitleDark = Grey50 -val ColorTextSubtitleDark = Grey200 -val ColorTextBodyDark = Grey100 -val ColorTextCaptionDark = Grey300 -val ColorTextPlaceholderDark = Grey500 -val ColorTextDisabledDark = Grey600 -val ColorTextOnColorDarkDark = Grey50 -val ColorTextOnColorLightDark = Grey900 -val ColorTextOnContrastDark = Grey900 -val ColorTextLinkDark = Primary300 -val ColorTextBrandDark = Primary500 -val ColorTextPositiveDark = Green700 -val ColorTextWarningDark = Yellow200 -val ColorTextNegativeDark = Red200 +val TextTitleDark = Grey50 +val TextSubtitleDark = Grey200 +val TextBodyDark = Grey100 +val TextCaptionDark = Grey300 +val TextPlaceholderDark = Grey500 +val TextDisabledDark = Grey600 +val TextOnColorDarkDark = Grey50 +val TextOnColorLightDark = Grey900 +val TextOnContrastDark = Grey900 +val TextLinkDark = Primary300 +val TextBrandDark = Primary500 +val TextPositiveDark = Green700 +val TextWarningDark = Yellow200 +val TextNegativeDark = Red200 /** * Component Token - Icon (Light Theme) */ -val ColorIconNeutralSubtleLight = Grey500 -val ColorIconNeutralLight = Grey600 -val ColorIconNeutralStrongLight = Grey900 -val ColorIconBrandLight = Primary500 -val ColorIconPositiveLight = Green600 -val ColorIconWarningLight = Yellow600 -val ColorIconNegativeLight = Red600 -val ColorIconOnColorDarkLight = Grey50 -val ColorIconOnColorLightLight = Grey900 -val ColorIconOnContrastLight = Grey50 -val ColorIconDisabledLight = Grey400 +val IconNeutralSubtleLight = Grey500 +val IconNeutralLight = Grey600 +val IconNeutralStrongLight = Grey900 +val IconBrandLight = Primary500 +val IconPositiveLight = Green600 +val IconWarningLight = Yellow600 +val IconNegativeLight = Red600 +val IconOnColorDarkLight = Grey50 +val IconOnColorLightLight = Grey900 +val IconOnContrastLight = Grey50 +val IconDisabledLight = Grey400 /** * Component Token - Icon (Dark Theme) */ -val ColorIconNeutralSubtleDark = Grey500 -val ColorIconNeutralDark = Grey300 -val ColorIconNeutralStrongDark = Grey300 -val ColorIconBrandDark = Primary500 -val ColorIconPositiveDark = Green600 -val ColorIconWarningDark = Yellow500 -val ColorIconNegativeDark = Red500 -val ColorIconOnColorDarkDark = Grey50 -val ColorIconOnColorLightDark = Grey900 -val ColorIconOnContrastDark = Grey900 -val ColorIconDisabledDark = Grey600 \ No newline at end of file +val IconNeutralSubtleDark = Grey500 +val IconNeutralDark = Grey300 +val IconNeutralStrongDark = Grey300 +val IconBrandDark = Primary500 +val IconPositiveDark = Green600 +val IconWarningDark = Yellow500 +val IconNegativeDark = Red500 +val IconOnColorDarkDark = Grey50 +val IconOnColorLightDark = Grey900 +val IconOnContrastDark = Grey900 +val IconDisabledDark = Grey600 \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt index aa5a64e..758f58f 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt @@ -9,145 +9,145 @@ import androidx.compose.ui.graphics.Color * Contains only component-level tokens (not primitive tokens) */ @Immutable -data class AppColorScheme( - val colorBackground: Color, - val colorBackgroundContainer: Color, - val colorBackgroundObject: Color, - val colorBackgroundModal: Color, - val colorBackgroundBrand: Color, - val colorBackgroundBrandSubtle: Color, - val colorBackgroundPositive: Color, - val colorBackgroundWarning: Color, - val colorBackgroundNegative: Color, - val colorBackgroundContrast: Color, - val colorBackgroundDisabled: Color, - val colorBackgroundOverlay: Color, - val colorStrokeNeutralSubtle: Color, - val colorStrokeNeutral: Color, - val colorStrokeNeutralStrong: Color, - val colorStrokeBrand: Color, - val colorStrokePositive: Color, - val colorStrokeWarning: Color, - val colorStrokeNegative: Color, - val colorTextTitle: Color, - val colorTextSubtitle: Color, - val colorTextBody: Color, - val colorTextCaption: Color, - val colorTextPlaceholder: Color, - val colorTextDisabled: Color, - val colorTextOnColorDark: Color, - val colorTextOnColorLight: Color, - val colorTextOnContrast: Color, - val colorTextLink: Color, - val colorTextBrand: Color, - val colorTextPositive: Color, - val colorTextWarning: Color, - val colorTextNegative: Color, - val colorIconNeutralSubtle: Color, - val colorIconNeutral: Color, - val colorIconNeutralStrong: Color, - val colorIconBrand: Color, - val colorIconPositive: Color, - val colorIconWarning: Color, - val colorIconNegative: Color, - val colorIconOnColorDark: Color, - val colorIconOnColorLight: Color, - val colorIconOnContrast: Color, - val colorIconDisabled: Color, +data class ColorScheme( + val background: Color, + val backgroundContainer: Color, + val backgroundObject: Color, + val backgroundModal: Color, + val backgroundBrand: Color, + val backgroundBrandSubtle: Color, + val backgroundPositive: Color, + val backgroundWarning: Color, + val backgroundNegative: Color, + val backgroundContrast: Color, + val backgroundDisabled: Color, + val backgroundOverlay: Color, + val strokeNeutralSubtle: Color, + val strokeNeutral: Color, + val strokeNeutralStrong: Color, + val strokeBrand: Color, + val strokePositive: Color, + val strokeWarning: Color, + val strokeNegative: Color, + val textTitle: Color, + val textSubtitle: Color, + val textBody: Color, + val textCaption: Color, + val textPlaceholder: Color, + val textDisabled: Color, + val textOnColorDark: Color, + val textOnColorLight: Color, + val textOnContrast: Color, + val textLink: Color, + val textBrand: Color, + val textPositive: Color, + val textWarning: Color, + val textNegative: Color, + val iconNeutralSubtle: Color, + val iconNeutral: Color, + val iconNeutralStrong: Color, + val iconBrand: Color, + val iconPositive: Color, + val iconWarning: Color, + val iconNegative: Color, + val iconOnColorDark: Color, + val iconOnColorLight: Color, + val iconOnContrast: Color, + val iconDisabled: Color, ) -val LightAppColorScheme = AppColorScheme( - colorBackground = ColorBackgroundLight, - colorBackgroundContainer = ColorBackgroundContainerLight, - colorBackgroundObject = ColorBackgroundObjectLight, - colorBackgroundModal = ColorBackgroundModalLight, - colorBackgroundBrand = ColorBackgroundBrandLight, - colorBackgroundBrandSubtle = ColorBackgroundBrandSubtleLight, - colorBackgroundPositive = ColorBackgroundPositiveLight, - colorBackgroundWarning = ColorBackgroundWarningLight, - colorBackgroundNegative = ColorBackgroundNegativeLight, - colorBackgroundContrast = ColorBackgroundContrastLight, - colorBackgroundDisabled = ColorBackgroundDisabledLight, - colorBackgroundOverlay = ColorBackgroundOverlayLight, - colorStrokeNeutralSubtle = ColorStrokeNeutralSubtleLight, - colorStrokeNeutral = ColorStrokeNeutralLight, - colorStrokeNeutralStrong = ColorStrokeNeutralStrongLight, - colorStrokeBrand = ColorStrokeBrandLight, - colorStrokePositive = ColorStrokePositiveLight, - colorStrokeWarning = ColorStrokeWarningLight, - colorStrokeNegative = ColorStrokeNegativeLight, - colorTextTitle = ColorTextTitleLight, - colorTextSubtitle = ColorTextSubtitleLight, - colorTextBody = ColorTextBodyLight, - colorTextCaption = ColorTextCaptionLight, - colorTextPlaceholder = ColorTextPlaceholderLight, - colorTextDisabled = ColorTextDisabledLight, - colorTextOnColorDark = ColorTextOnColorDarkLight, - colorTextOnColorLight = ColorTextOnColorLightLight, - colorTextOnContrast = ColorTextOnContrastLight, - colorTextLink = ColorTextLinkLight, - colorTextBrand = ColorTextBrandLight, - colorTextPositive = ColorTextPositiveLight, - colorTextWarning = ColorTextWarningLight, - colorTextNegative = ColorTextNegativeLight, - colorIconNeutralSubtle = ColorIconNeutralSubtleLight, - colorIconNeutral = ColorIconNeutralLight, - colorIconNeutralStrong = ColorIconNeutralStrongLight, - colorIconBrand = ColorIconBrandLight, - colorIconPositive = ColorIconPositiveLight, - colorIconWarning = ColorIconWarningLight, - colorIconNegative = ColorIconNegativeLight, - colorIconOnColorDark = ColorIconOnColorDarkLight, - colorIconOnColorLight = ColorIconOnColorLightLight, - colorIconOnContrast = ColorIconOnContrastLight, - colorIconDisabled = ColorIconDisabledLight, +val LightAppColorScheme = ColorScheme( + background = BackgroundLight, + backgroundContainer = BackgroundContainerLight, + backgroundObject = BackgroundObjectLight, + backgroundModal = BackgroundModalLight, + backgroundBrand = BackgroundBrandLight, + backgroundBrandSubtle = BackgroundBrandSubtleLight, + backgroundPositive = BackgroundPositiveLight, + backgroundWarning = BackgroundWarningLight, + backgroundNegative = BackgroundNegativeLight, + backgroundContrast = BackgroundContrastLight, + backgroundDisabled = BackgroundDisabledLight, + backgroundOverlay = BackgroundOverlayLight, + strokeNeutralSubtle = StrokeNeutralSubtleLight, + strokeNeutral = StrokeNeutralLight, + strokeNeutralStrong = StrokeNeutralStrongLight, + strokeBrand = StrokeBrandLight, + strokePositive = StrokePositiveLight, + strokeWarning = StrokeWarningLight, + strokeNegative = StrokeNegativeLight, + textTitle = TextTitleLight, + textSubtitle = TextSubtitleLight, + textBody = TextBodyLight, + textCaption = TextCaptionLight, + textPlaceholder = TextPlaceholderLight, + textDisabled = TextDisabledLight, + textOnColorDark = TextOnColorDarkLight, + textOnColorLight = TextOnColorLightLight, + textOnContrast = TextOnContrastLight, + textLink = TextLinkLight, + textBrand = TextBrandLight, + textPositive = TextPositiveLight, + textWarning = TextWarningLight, + textNegative = TextNegativeLight, + iconNeutralSubtle = IconNeutralSubtleLight, + iconNeutral = IconNeutralLight, + iconNeutralStrong = IconNeutralStrongLight, + iconBrand = IconBrandLight, + iconPositive = IconPositiveLight, + iconWarning = IconWarningLight, + iconNegative = IconNegativeLight, + iconOnColorDark = IconOnColorDarkLight, + iconOnColorLight = IconOnColorLightLight, + iconOnContrast = IconOnContrastLight, + iconDisabled = IconDisabledLight, ) -val DarkAppColorScheme = AppColorScheme( - colorBackground = ColorBackgroundDark, - colorBackgroundContainer = ColorBackgroundContainerDark, - colorBackgroundObject = ColorBackgroundObjectDark, - colorBackgroundModal = ColorBackgroundModalDark, - colorBackgroundBrand = ColorBackgroundBrandDark, - colorBackgroundBrandSubtle = ColorBackgroundBrandSubtleDark, - colorBackgroundPositive = ColorBackgroundPositiveDark, - colorBackgroundWarning = ColorBackgroundWarningDark, - colorBackgroundNegative = ColorBackgroundNegativeDark, - colorBackgroundContrast = ColorBackgroundContrastDark, - colorBackgroundDisabled = ColorBackgroundDisabledDark, - colorBackgroundOverlay = ColorBackgroundOverlayDark, - colorStrokeNeutralSubtle = ColorStrokeNeutralSubtleDark, - colorStrokeNeutral = ColorStrokeNeutralDark, - colorStrokeNeutralStrong = ColorStrokeNeutralStrongDark, - colorStrokeBrand = ColorStrokeBrandDark, - colorStrokePositive = ColorStrokePositiveDark, - colorStrokeWarning = ColorStrokeWarningDark, - colorStrokeNegative = ColorStrokeNegativeDark, - colorTextTitle = ColorTextTitleDark, - colorTextSubtitle = ColorTextSubtitleDark, - colorTextBody = ColorTextBodyDark, - colorTextCaption = ColorTextCaptionDark, - colorTextPlaceholder = ColorTextPlaceholderDark, - colorTextDisabled = ColorTextDisabledDark, - colorTextOnColorDark = ColorTextOnColorDarkDark, - colorTextOnColorLight = ColorTextOnColorLightDark, - colorTextOnContrast = ColorTextOnContrastDark, - colorTextLink = ColorTextLinkDark, - colorTextBrand = ColorTextBrandDark, - colorTextPositive = ColorTextPositiveDark, - colorTextWarning = ColorTextWarningDark, - colorTextNegative = ColorTextNegativeDark, - colorIconNeutralSubtle = ColorIconNeutralSubtleDark, - colorIconNeutral = ColorIconNeutralDark, - colorIconNeutralStrong = ColorIconNeutralStrongDark, - colorIconBrand = ColorIconBrandDark, - colorIconPositive = ColorIconPositiveDark, - colorIconWarning = ColorIconWarningDark, - colorIconNegative = ColorIconNegativeDark, - colorIconOnColorDark = ColorIconOnColorDarkDark, - colorIconOnColorLight = ColorIconOnColorLightDark, - colorIconOnContrast = ColorIconOnContrastDark, - colorIconDisabled = ColorIconDisabledDark, +val DarkAppColorScheme = ColorScheme( + background = BackgroundDark, + backgroundContainer = BackgroundContainerDark, + backgroundObject = BackgroundObjectDark, + backgroundModal = BackgroundModalDark, + backgroundBrand = BackgroundBrandDark, + backgroundBrandSubtle = BackgroundBrandSubtleDark, + backgroundPositive = BackgroundPositiveDark, + backgroundWarning = BackgroundWarningDark, + backgroundNegative = BackgroundNegativeDark, + backgroundContrast = BackgroundContrastDark, + backgroundDisabled = BackgroundDisabledDark, + backgroundOverlay = BackgroundOverlayDark, + strokeNeutralSubtle = StrokeNeutralSubtleDark, + strokeNeutral = StrokeNeutralDark, + strokeNeutralStrong = StrokeNeutralStrongDark, + strokeBrand = StrokeBrandDark, + strokePositive = StrokePositiveDark, + strokeWarning = StrokeWarningDark, + strokeNegative = StrokeNegativeDark, + textTitle = TextTitleDark, + textSubtitle = TextSubtitleDark, + textBody = TextBodyDark, + textCaption = TextCaptionDark, + textPlaceholder = TextPlaceholderDark, + textDisabled = TextDisabledDark, + textOnColorDark = TextOnColorDarkDark, + textOnColorLight = TextOnColorLightDark, + textOnContrast = TextOnContrastDark, + textLink = TextLinkDark, + textBrand = TextBrandDark, + textPositive = TextPositiveDark, + textWarning = TextWarningDark, + textNegative = TextNegativeDark, + iconNeutralSubtle = IconNeutralSubtleDark, + iconNeutral = IconNeutralDark, + iconNeutralStrong = IconNeutralStrongDark, + iconBrand = IconBrandDark, + iconPositive = IconPositiveDark, + iconWarning = IconWarningDark, + iconNegative = IconNegativeDark, + iconOnColorDark = IconOnColorDarkDark, + iconOnColorLight = IconOnColorLightDark, + iconOnContrast = IconOnContrastDark, + iconDisabled = IconDisabledDark, ) val LocalAppColorScheme = staticCompositionLocalOf { diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index 7f5e76e..c4dd45e 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -109,7 +109,7 @@ fun WinterTheme( } object AppTheme { - val colors: AppColorScheme + val colors: ColorScheme @Composable get() = LocalAppColorScheme.current } From 0c0766d111faebf95735d0c5491f86e113a2adde Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:46:43 +0900 Subject: [PATCH 15/29] Add button color token --- .../love/winter/designsystem/theme/Color.kt | 40 ++++++++++++++++- .../winter/designsystem/theme/ColorScheme.kt | 45 +++++++++++++++++++ 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 1836c32..086801f 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -184,4 +184,42 @@ val IconNegativeDark = Red500 val IconOnColorDarkDark = Grey50 val IconOnColorLightDark = Grey900 val IconOnContrastDark = Grey900 -val IconDisabledDark = Grey600 \ No newline at end of file +val IconDisabledDark = Grey600 + +/** + * Component Token - Button (Light Theme) + */ +val ButtonPrimaryDefaultLight = Grey900 +val ButtonPrimaryActiveLight = Grey800 +val ButtonPrimaryDisabledLight = Grey100 +val ButtonSecondaryDefaultLight = Grey600 +val ButtonSecondaryActiveLight = Grey700 +val ButtonSecondaryDisabledLight = Grey800 +val ButtonTertiaryDefaultLight = Grey900 +val ButtonTertiaryActiveLight = Grey700 +val ButtonTertiaryDisabledLight = Grey400 +val ButtonBrandDefaultLight = Primary500 +val ButtonBrandActiveLight = Primary600 +val ButtonBrandDisabledLight = Grey100 +val ButtonCriticalDefaultLight = Red600 +val ButtonCriticalActiveLight = Red700 +val ButtonCriticalDisabledLight = Grey100 + +/** + * Component Token - Button (Dark Theme) + */ +val ButtonPrimaryDefaultDark = Grey50 +val ButtonPrimaryActiveDark = Grey200 +val ButtonPrimaryDisabledDark = Grey800 +val ButtonSecondaryDefaultDark = Grey300 +val ButtonSecondaryActiveDark = Grey400 +val ButtonSecondaryDisabledDark = Grey100 +val ButtonTertiaryDefaultDark = Grey50 +val ButtonTertiaryActiveDark = Grey300 +val ButtonTertiaryDisabledDark = Grey600 +val ButtonBrandDefaultDark = Primary500 +val ButtonBrandActiveDark = Primary600 +val ButtonBrandDisabledDark = Grey800 +val ButtonCriticalDefaultDark = Red600 +val ButtonCriticalActiveDark = Red700 +val ButtonCriticalDisabledDark = Grey800 diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt index 758f58f..e701c80 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt @@ -54,6 +54,21 @@ data class ColorScheme( val iconOnColorLight: Color, val iconOnContrast: Color, val iconDisabled: Color, + val buttonPrimaryDefault: Color, + val buttonPrimaryActive: Color, + val buttonPrimaryDisabled: Color, + val buttonSecondaryDefault: Color, + val buttonSecondaryActive: Color, + val buttonSecondaryDisabled: Color, + val buttonTertiaryDefault: Color, + val buttonTertiaryActive: Color, + val buttonTertiaryDisabled: Color, + val buttonBrandDefault: Color, + val buttonBrandActive: Color, + val buttonBrandDisabled: Color, + val buttonCriticalDefault: Color, + val buttonCriticalActive: Color, + val buttonCriticalDisabled: Color, ) val LightAppColorScheme = ColorScheme( @@ -101,6 +116,21 @@ val LightAppColorScheme = ColorScheme( iconOnColorLight = IconOnColorLightLight, iconOnContrast = IconOnContrastLight, iconDisabled = IconDisabledLight, + buttonPrimaryDefault = ButtonPrimaryDefaultLight, + buttonPrimaryActive = ButtonPrimaryActiveLight, + buttonPrimaryDisabled = ButtonPrimaryDisabledLight, + buttonSecondaryDefault = ButtonSecondaryDefaultLight, + buttonSecondaryActive = ButtonSecondaryActiveLight, + buttonSecondaryDisabled = ButtonSecondaryDisabledLight, + buttonTertiaryDefault = ButtonTertiaryDefaultLight, + buttonTertiaryActive = ButtonTertiaryActiveLight, + buttonTertiaryDisabled = ButtonTertiaryDisabledLight, + buttonBrandDefault = ButtonBrandDefaultLight, + buttonBrandActive = ButtonBrandActiveLight, + buttonBrandDisabled = ButtonBrandDisabledLight, + buttonCriticalDefault = ButtonCriticalDefaultLight, + buttonCriticalActive = ButtonCriticalActiveLight, + buttonCriticalDisabled = ButtonCriticalDisabledLight, ) val DarkAppColorScheme = ColorScheme( @@ -148,6 +178,21 @@ val DarkAppColorScheme = ColorScheme( iconOnColorLight = IconOnColorLightDark, iconOnContrast = IconOnContrastDark, iconDisabled = IconDisabledDark, + buttonPrimaryDefault = ButtonPrimaryDefaultDark, + buttonPrimaryActive = ButtonPrimaryActiveDark, + buttonPrimaryDisabled = ButtonPrimaryDisabledDark, + buttonSecondaryDefault = ButtonSecondaryDefaultDark, + buttonSecondaryActive = ButtonSecondaryActiveDark, + buttonSecondaryDisabled = ButtonSecondaryDisabledDark, + buttonTertiaryDefault = ButtonTertiaryDefaultDark, + buttonTertiaryActive = ButtonTertiaryActiveDark, + buttonTertiaryDisabled = ButtonTertiaryDisabledDark, + buttonBrandDefault = ButtonBrandDefaultDark, + buttonBrandActive = ButtonBrandActiveDark, + buttonBrandDisabled = ButtonBrandDisabledDark, + buttonCriticalDefault = ButtonCriticalDefaultDark, + buttonCriticalActive = ButtonCriticalActiveDark, + buttonCriticalDisabled = ButtonCriticalDisabledDark, ) val LocalAppColorScheme = staticCompositionLocalOf { From 5b05e0b74b22ff824d0030ccd6152ca4bffcef1a Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:48:12 +0900 Subject: [PATCH 16/29] Add input color token --- .../love/winter/designsystem/theme/Color.kt | 22 +++++++++++++++++++ .../winter/designsystem/theme/ColorScheme.kt | 21 ++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 086801f..2763cf0 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -223,3 +223,25 @@ val ButtonBrandDisabledDark = Grey800 val ButtonCriticalDefaultDark = Red600 val ButtonCriticalActiveDark = Red700 val ButtonCriticalDisabledDark = Grey800 + +/** + * Component Token - Input (Light Theme) + */ +val InputDefaultLight = Grey300 +val InputActiveLight = Grey300 +val InputActiveCursorLight = Primary500 +val InputSelectedLight = Grey900 +val InputPositiveLight = Green500 +val InputNegativeLight = Red500 +val InputDisabledLight = Grey300 + +/** + * Component Token - Input (Dark Theme) + */ +val InputDefaultDark = Grey700 +val InputActiveDark = Primary500 +val InputActiveCursorDark = Primary200 +val InputSelectedDark = Grey50 +val InputPositiveDark = Green300 +val InputNegativeDark = Red300 +val InputDisabledDark = Grey700 diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt index e701c80..50330f7 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt @@ -69,6 +69,13 @@ data class ColorScheme( val buttonCriticalDefault: Color, val buttonCriticalActive: Color, val buttonCriticalDisabled: Color, + val inputDefault: Color, + val inputActive: Color, + val inputActiveCursor: Color, + val inputSelected: Color, + val inputPositive: Color, + val inputNegative: Color, + val inputDisabled: Color, ) val LightAppColorScheme = ColorScheme( @@ -131,6 +138,13 @@ val LightAppColorScheme = ColorScheme( buttonCriticalDefault = ButtonCriticalDefaultLight, buttonCriticalActive = ButtonCriticalActiveLight, buttonCriticalDisabled = ButtonCriticalDisabledLight, + inputDefault = InputDefaultLight, + inputActive = InputActiveLight, + inputActiveCursor = InputActiveCursorLight, + inputSelected = InputSelectedLight, + inputPositive = InputPositiveLight, + inputNegative = InputNegativeLight, + inputDisabled = InputDisabledLight, ) val DarkAppColorScheme = ColorScheme( @@ -193,6 +207,13 @@ val DarkAppColorScheme = ColorScheme( buttonCriticalDefault = ButtonCriticalDefaultDark, buttonCriticalActive = ButtonCriticalActiveDark, buttonCriticalDisabled = ButtonCriticalDisabledDark, + inputDefault = InputDefaultDark, + inputActive = InputActiveDark, + inputActiveCursor = InputActiveCursorDark, + inputSelected = InputSelectedDark, + inputPositive = InputPositiveDark, + inputNegative = InputNegativeDark, + inputDisabled = InputDisabledDark, ) val LocalAppColorScheme = staticCompositionLocalOf { From 163f73949f25c6a6f84fef86ab57ba3cbd1e399b Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:49:55 +0900 Subject: [PATCH 17/29] Add tag color token --- .../love/winter/designsystem/theme/Color.kt | 20 +++++++++++++++++++ .../winter/designsystem/theme/ColorScheme.kt | 18 +++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 2763cf0..36b5cfa 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -245,3 +245,23 @@ val InputSelectedDark = Grey50 val InputPositiveDark = Green300 val InputNegativeDark = Red300 val InputDisabledDark = Grey700 + +/** + * Component Token - Tag (Light Theme) + */ +val TagNeutralLight = Grey200 +val TagBrandStrongLight = Primary500 +val TagBrandSubtleLight = Primary100 +val TagPositiveLight = Green100 +val TagWarningLight = Yellow100 +val TagNegativeLight = Red100 + +/** + * Component Token - Tag (Dark Theme) + */ +val TagNeutralDark = Grey700 +val TagBrandStrongDark = Primary600 +val TagBrandSubtleDark = Primary100 +val TagPositiveDark = Green100 +val TagWarningDark = Yellow100 +val TagNegativeDark = Red100 \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt index 50330f7..aeaff1a 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt @@ -76,6 +76,12 @@ data class ColorScheme( val inputPositive: Color, val inputNegative: Color, val inputDisabled: Color, + val tagNeutral: Color, + val tagBrandStrong: Color, + val tagBrandSubtle: Color, + val tagPositive: Color, + val tagWarning: Color, + val tagNegative: Color, ) val LightAppColorScheme = ColorScheme( @@ -145,6 +151,12 @@ val LightAppColorScheme = ColorScheme( inputPositive = InputPositiveLight, inputNegative = InputNegativeLight, inputDisabled = InputDisabledLight, + tagNeutral = TagNeutralLight, + tagBrandStrong = TagBrandStrongLight, + tagBrandSubtle = TagBrandSubtleLight, + tagPositive = TagPositiveLight, + tagWarning = TagWarningLight, + tagNegative = TagNegativeLight, ) val DarkAppColorScheme = ColorScheme( @@ -214,6 +226,12 @@ val DarkAppColorScheme = ColorScheme( inputPositive = InputPositiveDark, inputNegative = InputNegativeDark, inputDisabled = InputDisabledDark, + tagNeutral = TagNeutralDark, + tagBrandStrong = TagBrandStrongDark, + tagBrandSubtle = TagBrandSubtleDark, + tagPositive = TagPositiveDark, + tagWarning = TagWarningDark, + tagNegative = TagNegativeDark, ) val LocalAppColorScheme = staticCompositionLocalOf { From 2e38bfff9aeadbb3eb1dd5c61f329a887690ee99 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 09:52:35 +0900 Subject: [PATCH 18/29] Add blue color token --- .../java/dev/love/winter/designsystem/theme/Color.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt index 36b5cfa..44b362d 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt @@ -18,6 +18,18 @@ val Primary700 = Color(0xFF3B39AF) val Primary800 = Color(0xFF2B2A85) val Primary900 = Color(0xFF131243) +// Blue (Use when brand color is no longer blue) +val Blue50 = Color(0xFFF1F1FF) +val Blue100 = Color(0xFFDBDFFF) +val Blue200 = Color(0xFFC1C8FF) +val Blue300 = Color(0xFF9397FF) +val Blue400 = Color(0xFF7278FF) +val Blue500 = Color(0xFF5653FF) +val Blue600 = Color(0xFF4745E4) +val Blue700 = Color(0xFF3B39AF) +val Blue800 = Color(0xFF2B2A85) +val Blue900 = Color(0xFF131243) + // Neutral - Grey val Grey50 = Color(0xFFFDFDFD) val Grey100 = Color(0xFFF4F4F5) From 2550f25ef296f801d1fbe1a327d87e1b46470e45 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 10:12:36 +0900 Subject: [PATCH 19/29] Add typography tokens --- .../love/winter/designsystem/theme/Theme.kt | 5 + .../winter/designsystem/theme/Typography.kt | 212 ++++++++++++++++++ 2 files changed, 217 insertions(+) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index c4dd45e..a8f7047 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -100,6 +100,7 @@ fun WinterTheme( CompositionLocalProvider( LocalDarkTheme provides darkTheme, LocalAppColorScheme provides appColorScheme, + LocalTypography provides Typography, ) { MaterialTheme( colorScheme = colorScheme, @@ -112,4 +113,8 @@ object AppTheme { val colors: ColorScheme @Composable get() = LocalAppColorScheme.current + + val typography: TypographyScheme + @Composable + get() = LocalTypography.current } diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt new file mode 100644 index 0000000..e5681ac --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt @@ -0,0 +1,212 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +/** + * Typography tokens + * + * Use the display font style for large headings or prominent text that requires emphasis. + * Display is ideal for grabbing the user's attention and making a bold statement. Avoid using this style for long texts. + */ + +val FontLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 28.sp, + lineHeight = 34.sp, +) + +val FontMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 24.sp, + lineHeight = 30.sp, +) + +val FontSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 18.sp, + lineHeight = 24.sp, +) + +/** + * Title tokens + * + * Use the title font style when you need a clear visual hierarchy without overwhelming the layout. + * You can apply this style in short texts that need to stand out when compared to body text, + * like section titles, card titles, page titles, etc. + */ +val TitleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 22.sp, +) + +val TitleMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 18.sp, +) + +val TitleSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp, +) + +/** + * Body tokens + * + * The body font style is ideal for regular text content, such as paragraphs, or descriptions. + * The body styles are suitable both for long and short text, where readability and legibility are essential. + */ +val BodyExtraLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 18.sp, + lineHeight = 24.sp, +) + +val BodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 22.sp, +) + +val BodyMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 14.sp, + lineHeight = 18.sp, +) + +val BodySmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 12.sp, + lineHeight = 16.sp, +) + +val BodyExtraSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 10.sp, + lineHeight = 14.sp, +) + +/** + * Action tokens + * + * The action font style is suitable for text elements that represent interactive or actionable items, + * such as buttons, input, and links. Use it to distinguish interactive elements from regular text. + */ +val ActionLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 20.sp, +) + +val ActionMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 18.sp, +) + +val ActionSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.SemiBold, + fontSize = 12.sp, + lineHeight = 16.sp, +) + +/** + * Caption tokens + * + * The caption font style is used for supporting text that provides context and complements visual elements, + * like icons, images, tags, etc. Avoid using this style in long texts. + * + * Note: Use .uppercase() modifier on Text to apply all caps style. + */ +val CaptionLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 18.sp, + letterSpacing = 0.56.sp, +) + +val CaptionMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp, + letterSpacing = 0.48.sp, +) + +val CaptionSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 10.sp, + lineHeight = 14.sp, + letterSpacing = 0.4.sp, +) + +/** + * Scheme + */ +@Immutable +data class TypographyScheme( + val displayLarge: TextStyle, + val displayMedium: TextStyle, + val displaySmall: TextStyle, + val titleLarge: TextStyle, + val titleMedium: TextStyle, + val titleSmall: TextStyle, + val bodyExtraLarge: TextStyle, + val bodyLarge: TextStyle, + val bodyMedium: TextStyle, + val bodySmall: TextStyle, + val bodyExtraSmall: TextStyle, + val actionLarge: TextStyle, + val actionMedium: TextStyle, + val actionSmall: TextStyle, + val captionLarge: TextStyle, + val captionMedium: TextStyle, + val captionSmall: TextStyle, +) + +val Typography = TypographyScheme( + displayLarge = FontLarge, + displayMedium = FontMedium, + displaySmall = FontSmall, + titleLarge = TitleLarge, + titleMedium = TitleMedium, + titleSmall = TitleSmall, + bodyExtraLarge = BodyExtraLarge, + bodyLarge = BodyLarge, + bodyMedium = BodyMedium, + bodySmall = BodySmall, + bodyExtraSmall = BodyExtraSmall, + actionLarge = ActionLarge, + actionMedium = ActionMedium, + actionSmall = ActionSmall, + captionLarge = CaptionLarge, + captionMedium = CaptionMedium, + captionSmall = CaptionSmall, +) + +val LocalTypography = staticCompositionLocalOf { + Typography +} From b3c46102802291fae55db1695459391b96ce6fe3 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 10:14:53 +0900 Subject: [PATCH 20/29] Add spacing tokens --- .../love/winter/designsystem/theme/Spacing.kt | 54 +++++++++++++++++++ .../love/winter/designsystem/theme/Theme.kt | 5 ++ 2 files changed, 59 insertions(+) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt new file mode 100644 index 0000000..459aabf --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt @@ -0,0 +1,54 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +/** + * Spacing tokens + * + * Spacing tokens guarantee consistent spacing and alignment between elements + * while providing better readability, clarity, and balance. + * + * Usage guidelines: + * - For related items, use smaller spacing values + * - For unrelated items, use larger spacing values + * - When stacking components, use the same spacing between all elements in the group + */ + +val SpacingExtraExtraSmall = 4.dp +val SpacingExtraSmall = 8.dp +val SpacingSmall = 16.dp +val SpacingMedium = 24.dp +val SpacingLarge = 32.dp +val SpacingExtraLarge = 40.dp +val SpacingExtraExtraLarge = 48.dp + +/** + * Spacing scheme for the app + */ +@Immutable +data class SpacingScheme( + val extraExtraSmall: Dp, + val extraSmall: Dp, + val small: Dp, + val medium: Dp, + val large: Dp, + val extraLarge: Dp, + val extraExtraLarge: Dp, +) + +val Spacing = SpacingScheme( + extraExtraSmall = SpacingExtraExtraSmall, + extraSmall = SpacingExtraSmall, + small = SpacingSmall, + medium = SpacingMedium, + large = SpacingLarge, + extraLarge = SpacingExtraLarge, + extraExtraLarge = SpacingExtraExtraLarge, +) + +val LocalSpacing = staticCompositionLocalOf { + Spacing +} \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index a8f7047..ce9cb5a 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -101,6 +101,7 @@ fun WinterTheme( LocalDarkTheme provides darkTheme, LocalAppColorScheme provides appColorScheme, LocalTypography provides Typography, + LocalSpacing provides Spacing, ) { MaterialTheme( colorScheme = colorScheme, @@ -117,4 +118,8 @@ object AppTheme { val typography: TypographyScheme @Composable get() = LocalTypography.current + + val spacing: SpacingScheme + @Composable + get() = LocalSpacing.current } From ff977d41e5542d6e1ffa19fe53c23872d59497da Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 10:17:24 +0900 Subject: [PATCH 21/29] Add border radius tokens --- .../winter/designsystem/theme/BorderRadius.kt | 57 +++++++++++++++++++ .../love/winter/designsystem/theme/Theme.kt | 5 ++ 2 files changed, 62 insertions(+) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt new file mode 100644 index 0000000..ec0fae0 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt @@ -0,0 +1,57 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.unit.dp + +/** + * Border radius tokens + * + * Border radius tokens are applied to elements with rounded corners, + * such as buttons, cards, input fields, and containers, to soften their edges + * and create a more pleasing appearance. + * + * Usage guidelines: + * - Extra Small: Very subtle rounded corners + * - Small: Smallest elements or nested components + * - Medium: Most components, small-to-medium components and containers + * - Large: Medium-to-large components and containers + * - Extra Large: Biggest elements, especially on tablet screens + * - Pill: Components that are completely rounded on their sides + */ + +val BorderRadiusExtraSmall = RoundedCornerShape(2.dp) +val BorderRadiusSmall = RoundedCornerShape(4.dp) +val BorderRadiusMedium = RoundedCornerShape(8.dp) +val BorderRadiusLarge = RoundedCornerShape(16.dp) +val BorderRadiusExtraLarge = RoundedCornerShape(24.dp) +val BorderRadiusPill = CircleShape + +/** + * Border radius scheme for the app + */ +@Immutable +data class BorderRadiusScheme( + val extraSmall: Shape, + val small: Shape, + val medium: Shape, + val large: Shape, + val extraLarge: Shape, + val pill: Shape, +) + +val BorderRadius = BorderRadiusScheme( + extraSmall = BorderRadiusExtraSmall, + small = BorderRadiusSmall, + medium = BorderRadiusMedium, + large = BorderRadiusLarge, + extraLarge = BorderRadiusExtraLarge, + pill = BorderRadiusPill, +) + +val LocalBorderRadius = staticCompositionLocalOf { + BorderRadius +} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index ce9cb5a..5831c58 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -102,6 +102,7 @@ fun WinterTheme( LocalAppColorScheme provides appColorScheme, LocalTypography provides Typography, LocalSpacing provides Spacing, + LocalBorderRadius provides BorderRadius, ) { MaterialTheme( colorScheme = colorScheme, @@ -122,4 +123,8 @@ object AppTheme { val spacing: SpacingScheme @Composable get() = LocalSpacing.current + + val borderRadius: BorderRadiusScheme + @Composable + get() = LocalBorderRadius.current } From e487b1cfb1fb2259dc9676a7aaad62d5d4e19ef1 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Fri, 24 Oct 2025 10:22:47 +0900 Subject: [PATCH 22/29] Add icon tokens --- .../love/winter/designsystem/theme/Icon.kt | 223 ++++++++++++++++++ .../love/winter/designsystem/theme/Theme.kt | 1 + 2 files changed, 224 insertions(+) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt new file mode 100644 index 0000000..3bad5c2 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt @@ -0,0 +1,223 @@ +package dev.love.winter.designsystem.theme + +import androidx.annotation.DrawableRes +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf + +/** + * Icon tokens + * + * Icons are graphic assets that improve usability by providing extra meaning + * to actions and components, making them more visually appealing and easier to understand. + * + * Guidelines: + * - Size: 24px base + * - Stroke: 1.5px + * - Use Icon grid for consistency + */ + +@Immutable +data class AppIcon( + @param:DrawableRes val filled: Int, + @param:DrawableRes val outlined: Int, +) + +@Immutable +data class GlobalIcon( + val home: AppIcon, + val settings: AppIcon, + val profile: AppIcon, + val highlights: AppIcon, + val notification: AppIcon, + val search: AppIcon, +) + +@Immutable +data class NavigationIcon( + val arrowUp: AppIcon, + val arrowDown: AppIcon, + val arrowLeft: AppIcon, + val arrowRight: AppIcon, + val arrowUpRight: AppIcon, + val chevronUp: AppIcon, + val chevronDown: AppIcon, + val chevronLeft: AppIcon, + val chevronRight: AppIcon, + val close: AppIcon, + val filter: AppIcon, + val sort: AppIcon, + val logout: AppIcon, + val menu: AppIcon, + val menuHamburger: AppIcon, + val more: AppIcon, + val link: AppIcon, +) + +@Immutable +data class InputIcon( + val edit: AppIcon, + val delete: AppIcon, + val plus: AppIcon, + val minus: AppIcon, + val check: AppIcon, + val eye: AppIcon, + val eyeOff: AppIcon, + val heart: AppIcon, + val star: AppIcon, + val bookmark: AppIcon, + val download: AppIcon, + val upload: AppIcon, +) + +@Immutable +data class DateTimeIcon( + val calendar: AppIcon, + val calendarDays: AppIcon, + val clock: AppIcon, +) + +@Immutable +data class MessageIcon( + val send: AppIcon, + val chat: AppIcon, + val mail: AppIcon, + val archive: AppIcon, + val camera: AppIcon, + val paperclip: AppIcon, + val microphone: AppIcon, +) + +@Immutable +data class PurchaseIcon( + val bag: AppIcon, + val cart: AppIcon, + val tag: AppIcon, + val creditCard: AppIcon, + val wallet: AppIcon, +) + +@Immutable +data class LocationIcon( + val map: AppIcon, + val mapPin: AppIcon, + val navigation: AppIcon, + val globe: AppIcon, +) + +@Immutable +data class NotificationIcon( + val info: AppIcon, + val success: AppIcon, + val warning: AppIcon, + val error: AppIcon, +) + +@Immutable +data class LogoIcon( + val google: AppIcon, + val facebook: AppIcon, + val apple: AppIcon, +) + +/** + * Icon scheme for the app + */ +@Immutable +data class IconScheme( + val global: GlobalIcon, + val navigation: NavigationIcon, + val input: InputIcon, + val dateTime: DateTimeIcon, + val message: MessageIcon, + val purchase: PurchaseIcon, + val location: LocationIcon, + val notification: NotificationIcon, + val logo: LogoIcon, +) + +// TODO: Replace with actual drawable resources +internal val Icon = IconScheme( + global = GlobalIcon( + home = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_home_filled, R.drawable.ic_home_outlined + settings = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_settings_filled, R.drawable.ic_settings_outlined + profile = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_profile_filled, R.drawable.ic_profile_outlined + highlights = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_highlights_filled, R.drawable.ic_highlights_outlined + notification = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_notification_filled, R.drawable.ic_notification_outlined + search = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_search_filled, R.drawable.ic_search_outlined + ), + navigation = NavigationIcon( + arrowUp = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_up_filled, R.drawable.ic_arrow_up_outlined + arrowDown = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_down_filled, R.drawable.ic_arrow_down_outlined + arrowLeft = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_left_filled, R.drawable.ic_arrow_left_outlined + arrowRight = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_right_filled, R.drawable.ic_arrow_right_outlined + arrowUpRight = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_up_right_filled, R.drawable.ic_arrow_up_right_outlined + chevronUp = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_up_filled, R.drawable.ic_chevron_up_outlined + chevronDown = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_down_filled, R.drawable.ic_chevron_down_outlined + chevronLeft = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_left_filled, R.drawable.ic_chevron_left_outlined + chevronRight = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_right_filled, R.drawable.ic_chevron_right_outlined + close = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_close_filled, R.drawable.ic_close_outlined + filter = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_filter_filled, R.drawable.ic_filter_outlined + sort = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_sort_filled, R.drawable.ic_sort_outlined + logout = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logout_filled, R.drawable.ic_logout_outlined + menu = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_menu_filled, R.drawable.ic_menu_outlined + menuHamburger = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_menu_hamburger_filled, R.drawable.ic_menu_hamburger_outlined + more = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_more_filled, R.drawable.ic_more_outlined + link = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_link_filled, R.drawable.ic_link_outlined + ), + input = InputIcon( + edit = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_edit_filled, R.drawable.ic_edit_outlined + delete = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_delete_filled, R.drawable.ic_delete_outlined + plus = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_plus_filled, R.drawable.ic_plus_outlined + minus = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_minus_filled, R.drawable.ic_minus_outlined + check = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_check_filled, R.drawable.ic_check_outlined + eye = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_eye_filled, R.drawable.ic_eye_outlined + eyeOff = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_eye_off_filled, R.drawable.ic_eye_off_outlined + heart = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_heart_filled, R.drawable.ic_heart_outlined + star = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_star_filled, R.drawable.ic_star_outlined + bookmark = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_bookmark_filled, R.drawable.ic_bookmark_outlined + download = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_download_filled, R.drawable.ic_download_outlined + upload = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_upload_filled, R.drawable.ic_upload_outlined + ), + dateTime = DateTimeIcon( + calendar = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_calendar_filled, R.drawable.ic_calendar_outlined + calendarDays = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_calendar_days_filled, R.drawable.ic_calendar_days_outlined + clock = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_clock_filled, R.drawable.ic_clock_outlined + ), + message = MessageIcon( + send = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_send_filled, R.drawable.ic_send_outlined + chat = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chat_filled, R.drawable.ic_chat_outlined + mail = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_mail_filled, R.drawable.ic_mail_outlined + archive = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_archive_filled, R.drawable.ic_archive_outlined + camera = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_camera_filled, R.drawable.ic_camera_outlined + paperclip = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_paperclip_filled, R.drawable.ic_paperclip_outlined + microphone = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_microphone_filled, R.drawable.ic_microphone_outlined + ), + purchase = PurchaseIcon( + bag = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_bag_filled, R.drawable.ic_bag_outlined + cart = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_cart_filled, R.drawable.ic_cart_outlined + tag = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_tag_filled, R.drawable.ic_tag_outlined + creditCard = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_credit_card_filled, R.drawable.ic_credit_card_outlined + wallet = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_wallet_filled, R.drawable.ic_wallet_outlined + ), + location = LocationIcon( + map = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_map_filled, R.drawable.ic_map_outlined + mapPin = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_map_pin_filled, R.drawable.ic_map_pin_outlined + navigation = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_navigation_filled, R.drawable.ic_navigation_outlined + globe = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_globe_filled, R.drawable.ic_globe_outlined + ), + notification = NotificationIcon( + info = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_info_filled, R.drawable.ic_info_outlined + success = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_success_filled, R.drawable.ic_success_outlined + warning = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_warning_filled, R.drawable.ic_warning_outlined + error = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_error_filled, R.drawable.ic_error_outlined + ), + logo = LogoIcon( + google = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logo_google_filled, R.drawable.ic_logo_google_outlined + facebook = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logo_facebook_filled, R.drawable.ic_logo_facebook_outlined + apple = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logo_apple_filled, R.drawable.ic_logo_apple_outlined + ), +) + +internal val LocalIcons = staticCompositionLocalOf { + Icon +} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index 5831c58..063388a 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -103,6 +103,7 @@ fun WinterTheme( LocalTypography provides Typography, LocalSpacing provides Spacing, LocalBorderRadius provides BorderRadius, + LocalIcons provides Icon, ) { MaterialTheme( colorScheme = colorScheme, From 860fe498fc05740c8fa0271fba27e1a21464c537 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sat, 25 Oct 2025 09:58:49 +0900 Subject: [PATCH 23/29] Add icon resources --- .../main/res/drawable/ic_archive_filled.xml | 10 +++++++ .../main/res/drawable/ic_archive_outlined.xml | 13 +++++++++ .../src/main/res/drawable/ic_arrow.xml | 10 +++++++ .../src/main/res/drawable/ic_arrow_down.xml | 9 ++++++ .../src/main/res/drawable/ic_arrow_left.xml | 9 ++++++ .../src/main/res/drawable/ic_arrow_right.xml | 9 ++++++ .../src/main/res/drawable/ic_arrow_up.xml | 9 ++++++ .../main/res/drawable/ic_arrow_up_right.xml | 9 ++++++ .../src/main/res/drawable/ic_bag_filled.xml | 10 +++++++ .../src/main/res/drawable/ic_bag_outlined.xml | 14 ++++++++++ .../main/res/drawable/ic_bookmark_filled.xml | 9 ++++++ .../res/drawable/ic_bookmark_outlined.xml | 10 +++++++ .../res/drawable/ic_calendar_days_filled.xml | 28 +++++++++++++++++++ .../drawable/ic_calendar_days_outlined.xml | 28 +++++++++++++++++++ .../main/res/drawable/ic_calendar_filled.xml | 10 +++++++ .../res/drawable/ic_calendar_outlined.xml | 10 +++++++ .../main/res/drawable/ic_camera_filled.xml | 13 +++++++++ .../main/res/drawable/ic_camera_outlined.xml | 14 ++++++++++ .../src/main/res/drawable/ic_cart_filled.xml | 15 ++++++++++ .../main/res/drawable/ic_cart_outlined.xml | 16 +++++++++++ .../src/main/res/drawable/ic_chat_filled.xml | 10 +++++++ .../main/res/drawable/ic_chat_outlined.xml | 19 +++++++++++++ .../src/main/res/drawable/ic_check.xml | 10 +++++++ .../src/main/res/drawable/ic_chevron_down.xml | 10 +++++++ .../src/main/res/drawable/ic_chevron_left.xml | 10 +++++++ .../main/res/drawable/ic_chevron_right.xml | 10 +++++++ .../src/main/res/drawable/ic_chevron_up.xml | 10 +++++++ .../src/main/res/drawable/ic_clock_filled.xml | 10 +++++++ .../main/res/drawable/ic_clock_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_close.xml | 9 ++++++ .../res/drawable/ic_credit_card_filled.xml | 13 +++++++++ .../res/drawable/ic_credit_card_outlined.xml | 13 +++++++++ .../main/res/drawable/ic_delete_filled.xml | 12 ++++++++ .../main/res/drawable/ic_delete_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_download.xml | 10 +++++++ .../src/main/res/drawable/ic_edit_filled.xml | 10 +++++++ .../main/res/drawable/ic_edit_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_error_filled.xml | 10 +++++++ .../main/res/drawable/ic_error_outlined.xml | 13 +++++++++ .../src/main/res/drawable/ic_eye_filled.xml | 16 +++++++++++ .../main/res/drawable/ic_eye_off_filled.xml | 16 +++++++++++ .../main/res/drawable/ic_eye_off_outlined.xml | 19 +++++++++++++ .../src/main/res/drawable/ic_eye_outlined.xml | 17 +++++++++++ .../main/res/drawable/ic_filter_filled.xml | 9 ++++++ .../main/res/drawable/ic_filter_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_globe_filled.xml | 24 ++++++++++++++++ .../main/res/drawable/ic_globe_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_heart_filled.xml | 9 ++++++ .../main/res/drawable/ic_heart_outlined.xml | 10 +++++++ .../res/drawable/ic_highlights_filled.xml | 9 ++++++ .../res/drawable/ic_highlights_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_home_filled.xml | 9 ++++++ .../main/res/drawable/ic_home_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_info_filled.xml | 10 +++++++ .../main/res/drawable/ic_info_outlined.xml | 16 +++++++++++ .../src/main/res/drawable/ic_link.xml | 12 ++++++++ .../src/main/res/drawable/ic_logo_apple.xml | 12 ++++++++ .../main/res/drawable/ic_logo_facebook.xml | 9 ++++++ .../src/main/res/drawable/ic_logo_google.xml | 9 ++++++ .../src/main/res/drawable/ic_logout.xml | 12 ++++++++ .../src/main/res/drawable/ic_mail_filled.xml | 12 ++++++++ .../main/res/drawable/ic_mail_outlined.xml | 10 +++++++ .../src/main/res/drawable/ic_map_filled.xml | 15 ++++++++++ .../src/main/res/drawable/ic_map_outlined.xml | 10 +++++++ .../main/res/drawable/ic_map_pin_filled.xml | 10 +++++++ .../main/res/drawable/ic_map_pin_outlined.xml | 17 +++++++++++ .../src/main/res/drawable/ic_menu_filled.xml | 18 ++++++++++++ .../main/res/drawable/ic_menu_hamburger.xml | 15 ++++++++++ .../main/res/drawable/ic_menu_outlined.xml | 22 +++++++++++++++ .../res/drawable/ic_microphone_filled.xml | 12 ++++++++ .../res/drawable/ic_microphone_outlined.xml | 13 +++++++++ .../src/main/res/drawable/ic_minus.xml | 10 +++++++ .../src/main/res/drawable/ic_more.xml | 15 ++++++++++ .../res/drawable/ic_navigation_filled.xml | 9 ++++++ .../res/drawable/ic_navigation_outlined.xml | 10 +++++++ .../res/drawable/ic_notification_filled.xml | 12 ++++++++ .../res/drawable/ic_notification_outlined.xml | 13 +++++++++ .../src/main/res/drawable/ic_paperclip.xml | 10 +++++++ .../src/main/res/drawable/ic_plus.xml | 10 +++++++ .../main/res/drawable/ic_profile_filled.xml | 12 ++++++++ .../main/res/drawable/ic_profile_outlined.xml | 14 ++++++++++ .../src/main/res/drawable/ic_search.xml | 10 +++++++ .../src/main/res/drawable/ic_send_filled.xml | 9 ++++++ .../main/res/drawable/ic_send_outlined.xml | 10 +++++++ .../main/res/drawable/ic_settings_filled.xml | 10 +++++++ .../res/drawable/ic_settings_outlined.xml | 14 ++++++++++ .../src/main/res/drawable/ic_sort.xml | 12 ++++++++ .../src/main/res/drawable/ic_star_filled.xml | 9 ++++++ .../main/res/drawable/ic_star_outlined.xml | 10 +++++++ .../main/res/drawable/ic_success_filled.xml | 10 +++++++ .../main/res/drawable/ic_success_outlined.xml | 13 +++++++++ .../src/main/res/drawable/ic_tag_filled.xml | 10 +++++++ .../src/main/res/drawable/ic_tag_outlined.xml | 13 +++++++++ .../src/main/res/drawable/ic_upload.xml | 10 +++++++ .../main/res/drawable/ic_wallet_filled.xml | 10 +++++++ .../main/res/drawable/ic_wallet_outlined.xml | 13 +++++++++ .../main/res/drawable/ic_warning_filled.xml | 10 +++++++ .../main/res/drawable/ic_warning_outlined.xml | 16 +++++++++++ 98 files changed, 1180 insertions(+) create mode 100644 core-android/design-system/src/main/res/drawable/ic_archive_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_archive_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_arrow.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_arrow_down.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_arrow_left.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_arrow_right.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_arrow_up.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_arrow_up_right.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_bag_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_bag_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_bookmark_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_bookmark_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_calendar_days_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_calendar_days_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_calendar_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_calendar_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_camera_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_camera_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_cart_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_cart_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_chat_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_chat_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_check.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_chevron_down.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_chevron_left.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_chevron_right.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_chevron_up.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_clock_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_clock_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_close.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_credit_card_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_credit_card_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_delete_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_delete_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_download.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_edit_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_edit_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_error_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_error_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_eye_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_eye_off_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_eye_off_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_eye_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_filter_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_filter_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_globe_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_globe_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_heart_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_heart_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_highlights_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_highlights_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_home_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_home_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_info_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_info_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_link.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_logo_apple.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_logo_facebook.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_logo_google.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_logout.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_mail_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_mail_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_map_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_map_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_map_pin_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_map_pin_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_menu_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_menu_hamburger.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_menu_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_microphone_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_microphone_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_minus.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_more.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_navigation_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_navigation_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_notification_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_notification_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_paperclip.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_plus.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_profile_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_profile_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_search.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_send_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_send_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_settings_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_settings_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_sort.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_star_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_star_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_success_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_success_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_tag_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_tag_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_upload.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_wallet_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_wallet_outlined.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_warning_filled.xml create mode 100644 core-android/design-system/src/main/res/drawable/ic_warning_outlined.xml diff --git a/core-android/design-system/src/main/res/drawable/ic_archive_filled.xml b/core-android/design-system/src/main/res/drawable/ic_archive_filled.xml new file mode 100644 index 0000000..ef4124f --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_archive_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_archive_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_archive_outlined.xml new file mode 100644 index 0000000..bac0179 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_archive_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_arrow.xml b/core-android/design-system/src/main/res/drawable/ic_arrow.xml new file mode 100644 index 0000000..1278d0c --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_arrow.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_arrow_down.xml b/core-android/design-system/src/main/res/drawable/ic_arrow_down.xml new file mode 100644 index 0000000..046066a --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_arrow_down.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_arrow_left.xml b/core-android/design-system/src/main/res/drawable/ic_arrow_left.xml new file mode 100644 index 0000000..7dd3049 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_arrow_left.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_arrow_right.xml b/core-android/design-system/src/main/res/drawable/ic_arrow_right.xml new file mode 100644 index 0000000..190d778 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_arrow_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_arrow_up.xml b/core-android/design-system/src/main/res/drawable/ic_arrow_up.xml new file mode 100644 index 0000000..21d747c --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_arrow_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_arrow_up_right.xml b/core-android/design-system/src/main/res/drawable/ic_arrow_up_right.xml new file mode 100644 index 0000000..1830624 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_arrow_up_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_bag_filled.xml b/core-android/design-system/src/main/res/drawable/ic_bag_filled.xml new file mode 100644 index 0000000..3c46a9e --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_bag_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_bag_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_bag_outlined.xml new file mode 100644 index 0000000..831db6f --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_bag_outlined.xml @@ -0,0 +1,14 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_bookmark_filled.xml b/core-android/design-system/src/main/res/drawable/ic_bookmark_filled.xml new file mode 100644 index 0000000..7562add --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_bookmark_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_bookmark_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_bookmark_outlined.xml new file mode 100644 index 0000000..de83c8d --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_bookmark_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_calendar_days_filled.xml b/core-android/design-system/src/main/res/drawable/ic_calendar_days_filled.xml new file mode 100644 index 0000000..14473d5 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_calendar_days_filled.xml @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_calendar_days_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_calendar_days_outlined.xml new file mode 100644 index 0000000..72e5f65 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_calendar_days_outlined.xml @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_calendar_filled.xml b/core-android/design-system/src/main/res/drawable/ic_calendar_filled.xml new file mode 100644 index 0000000..da086e2 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_calendar_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_calendar_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_calendar_outlined.xml new file mode 100644 index 0000000..e2416a4 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_calendar_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_camera_filled.xml b/core-android/design-system/src/main/res/drawable/ic_camera_filled.xml new file mode 100644 index 0000000..066c916 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_camera_filled.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_camera_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_camera_outlined.xml new file mode 100644 index 0000000..8f91dc9 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_camera_outlined.xml @@ -0,0 +1,14 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_cart_filled.xml b/core-android/design-system/src/main/res/drawable/ic_cart_filled.xml new file mode 100644 index 0000000..f27bd81 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_cart_filled.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_cart_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_cart_outlined.xml new file mode 100644 index 0000000..3ae15e4 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_cart_outlined.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_chat_filled.xml b/core-android/design-system/src/main/res/drawable/ic_chat_filled.xml new file mode 100644 index 0000000..cce3472 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_chat_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_chat_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_chat_outlined.xml new file mode 100644 index 0000000..11b884c --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_chat_outlined.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_check.xml b/core-android/design-system/src/main/res/drawable/ic_check.xml new file mode 100644 index 0000000..72dc391 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_check.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_chevron_down.xml b/core-android/design-system/src/main/res/drawable/ic_chevron_down.xml new file mode 100644 index 0000000..1897877 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_chevron_down.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_chevron_left.xml b/core-android/design-system/src/main/res/drawable/ic_chevron_left.xml new file mode 100644 index 0000000..745aee2 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_chevron_left.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_chevron_right.xml b/core-android/design-system/src/main/res/drawable/ic_chevron_right.xml new file mode 100644 index 0000000..8ab0024 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_chevron_right.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_chevron_up.xml b/core-android/design-system/src/main/res/drawable/ic_chevron_up.xml new file mode 100644 index 0000000..1278d0c --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_chevron_up.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_clock_filled.xml b/core-android/design-system/src/main/res/drawable/ic_clock_filled.xml new file mode 100644 index 0000000..2080f02 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_clock_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_clock_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_clock_outlined.xml new file mode 100644 index 0000000..1124190 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_clock_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_close.xml b/core-android/design-system/src/main/res/drawable/ic_close.xml new file mode 100644 index 0000000..7546ed5 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_close.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_credit_card_filled.xml b/core-android/design-system/src/main/res/drawable/ic_credit_card_filled.xml new file mode 100644 index 0000000..368e3fa --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_credit_card_filled.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_credit_card_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_credit_card_outlined.xml new file mode 100644 index 0000000..9e072f2 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_credit_card_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_delete_filled.xml b/core-android/design-system/src/main/res/drawable/ic_delete_filled.xml new file mode 100644 index 0000000..5024fcb --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_delete_filled.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_delete_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_delete_outlined.xml new file mode 100644 index 0000000..a8edf67 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_delete_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_download.xml b/core-android/design-system/src/main/res/drawable/ic_download.xml new file mode 100644 index 0000000..4087080 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_download.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_edit_filled.xml b/core-android/design-system/src/main/res/drawable/ic_edit_filled.xml new file mode 100644 index 0000000..d42fa52 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_edit_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_edit_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_edit_outlined.xml new file mode 100644 index 0000000..7355f0f --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_edit_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_error_filled.xml b/core-android/design-system/src/main/res/drawable/ic_error_filled.xml new file mode 100644 index 0000000..7f67b22 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_error_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_error_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_error_outlined.xml new file mode 100644 index 0000000..99ee256 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_error_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_eye_filled.xml b/core-android/design-system/src/main/res/drawable/ic_eye_filled.xml new file mode 100644 index 0000000..c01d834 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_eye_filled.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_eye_off_filled.xml b/core-android/design-system/src/main/res/drawable/ic_eye_off_filled.xml new file mode 100644 index 0000000..dc8124b --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_eye_off_filled.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_eye_off_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_eye_off_outlined.xml new file mode 100644 index 0000000..0c21a3c --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_eye_off_outlined.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_eye_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_eye_outlined.xml new file mode 100644 index 0000000..b49e169 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_eye_outlined.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_filter_filled.xml b/core-android/design-system/src/main/res/drawable/ic_filter_filled.xml new file mode 100644 index 0000000..40653a4 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_filter_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_filter_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_filter_outlined.xml new file mode 100644 index 0000000..7e98383 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_filter_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_globe_filled.xml b/core-android/design-system/src/main/res/drawable/ic_globe_filled.xml new file mode 100644 index 0000000..87ae191 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_globe_filled.xml @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_globe_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_globe_outlined.xml new file mode 100644 index 0000000..a1bef2d --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_globe_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_heart_filled.xml b/core-android/design-system/src/main/res/drawable/ic_heart_filled.xml new file mode 100644 index 0000000..9607ddc --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_heart_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_heart_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_heart_outlined.xml new file mode 100644 index 0000000..0f85cd2 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_heart_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_highlights_filled.xml b/core-android/design-system/src/main/res/drawable/ic_highlights_filled.xml new file mode 100644 index 0000000..5d4035e --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_highlights_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_highlights_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_highlights_outlined.xml new file mode 100644 index 0000000..7ea0c57 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_highlights_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_home_filled.xml b/core-android/design-system/src/main/res/drawable/ic_home_filled.xml new file mode 100644 index 0000000..3dd0f8a --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_home_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_home_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_home_outlined.xml new file mode 100644 index 0000000..f394e1b --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_home_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_info_filled.xml b/core-android/design-system/src/main/res/drawable/ic_info_filled.xml new file mode 100644 index 0000000..ffc5ffb --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_info_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_info_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_info_outlined.xml new file mode 100644 index 0000000..cc61a67 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_info_outlined.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_link.xml b/core-android/design-system/src/main/res/drawable/ic_link.xml new file mode 100644 index 0000000..98c79e3 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_link.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_logo_apple.xml b/core-android/design-system/src/main/res/drawable/ic_logo_apple.xml new file mode 100644 index 0000000..bcb0c3e --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_logo_apple.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_logo_facebook.xml b/core-android/design-system/src/main/res/drawable/ic_logo_facebook.xml new file mode 100644 index 0000000..02bbe0f --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_logo_facebook.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_logo_google.xml b/core-android/design-system/src/main/res/drawable/ic_logo_google.xml new file mode 100644 index 0000000..eb548da --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_logo_google.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_logout.xml b/core-android/design-system/src/main/res/drawable/ic_logout.xml new file mode 100644 index 0000000..e462ce0 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_logout.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_mail_filled.xml b/core-android/design-system/src/main/res/drawable/ic_mail_filled.xml new file mode 100644 index 0000000..4fb7517 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_mail_filled.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_mail_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_mail_outlined.xml new file mode 100644 index 0000000..6874b18 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_mail_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_map_filled.xml b/core-android/design-system/src/main/res/drawable/ic_map_filled.xml new file mode 100644 index 0000000..c249279 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_map_filled.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_map_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_map_outlined.xml new file mode 100644 index 0000000..8f687a0 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_map_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_map_pin_filled.xml b/core-android/design-system/src/main/res/drawable/ic_map_pin_filled.xml new file mode 100644 index 0000000..2ff6370 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_map_pin_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_map_pin_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_map_pin_outlined.xml new file mode 100644 index 0000000..99bfdf9 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_map_pin_outlined.xml @@ -0,0 +1,17 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_menu_filled.xml b/core-android/design-system/src/main/res/drawable/ic_menu_filled.xml new file mode 100644 index 0000000..daa0b0f --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_menu_filled.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_menu_hamburger.xml b/core-android/design-system/src/main/res/drawable/ic_menu_hamburger.xml new file mode 100644 index 0000000..d37acb0 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_menu_hamburger.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_menu_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_menu_outlined.xml new file mode 100644 index 0000000..944b052 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_menu_outlined.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_microphone_filled.xml b/core-android/design-system/src/main/res/drawable/ic_microphone_filled.xml new file mode 100644 index 0000000..49380ec --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_microphone_filled.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_microphone_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_microphone_outlined.xml new file mode 100644 index 0000000..a330a12 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_microphone_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_minus.xml b/core-android/design-system/src/main/res/drawable/ic_minus.xml new file mode 100644 index 0000000..648db2e --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_minus.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_more.xml b/core-android/design-system/src/main/res/drawable/ic_more.xml new file mode 100644 index 0000000..3341b58 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_more.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_navigation_filled.xml b/core-android/design-system/src/main/res/drawable/ic_navigation_filled.xml new file mode 100644 index 0000000..fa5a4d1 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_navigation_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_navigation_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_navigation_outlined.xml new file mode 100644 index 0000000..162c327 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_navigation_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_notification_filled.xml b/core-android/design-system/src/main/res/drawable/ic_notification_filled.xml new file mode 100644 index 0000000..15d45b9 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_notification_filled.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_notification_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_notification_outlined.xml new file mode 100644 index 0000000..238174b --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_notification_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_paperclip.xml b/core-android/design-system/src/main/res/drawable/ic_paperclip.xml new file mode 100644 index 0000000..64865fa --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_paperclip.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_plus.xml b/core-android/design-system/src/main/res/drawable/ic_plus.xml new file mode 100644 index 0000000..0e76842 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_plus.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_profile_filled.xml b/core-android/design-system/src/main/res/drawable/ic_profile_filled.xml new file mode 100644 index 0000000..f975c05 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_profile_filled.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_profile_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_profile_outlined.xml new file mode 100644 index 0000000..c90dd52 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_profile_outlined.xml @@ -0,0 +1,14 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_search.xml b/core-android/design-system/src/main/res/drawable/ic_search.xml new file mode 100644 index 0000000..6578e17 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_search.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_send_filled.xml b/core-android/design-system/src/main/res/drawable/ic_send_filled.xml new file mode 100644 index 0000000..b6a0c8d --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_send_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_send_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_send_outlined.xml new file mode 100644 index 0000000..33c9461 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_send_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_settings_filled.xml b/core-android/design-system/src/main/res/drawable/ic_settings_filled.xml new file mode 100644 index 0000000..c7e4eeb --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_settings_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_settings_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_settings_outlined.xml new file mode 100644 index 0000000..ba265e2 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_settings_outlined.xml @@ -0,0 +1,14 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_sort.xml b/core-android/design-system/src/main/res/drawable/ic_sort.xml new file mode 100644 index 0000000..371c91a --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_sort.xml @@ -0,0 +1,12 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_star_filled.xml b/core-android/design-system/src/main/res/drawable/ic_star_filled.xml new file mode 100644 index 0000000..dbb8f93 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_star_filled.xml @@ -0,0 +1,9 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_star_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_star_outlined.xml new file mode 100644 index 0000000..79af2c5 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_star_outlined.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_success_filled.xml b/core-android/design-system/src/main/res/drawable/ic_success_filled.xml new file mode 100644 index 0000000..96a57f4 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_success_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_success_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_success_outlined.xml new file mode 100644 index 0000000..220dff4 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_success_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_tag_filled.xml b/core-android/design-system/src/main/res/drawable/ic_tag_filled.xml new file mode 100644 index 0000000..0119b06 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_tag_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_tag_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_tag_outlined.xml new file mode 100644 index 0000000..78fbd1c --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_tag_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_upload.xml b/core-android/design-system/src/main/res/drawable/ic_upload.xml new file mode 100644 index 0000000..56ad9f7 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_upload.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_wallet_filled.xml b/core-android/design-system/src/main/res/drawable/ic_wallet_filled.xml new file mode 100644 index 0000000..5f8f470 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_wallet_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_wallet_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_wallet_outlined.xml new file mode 100644 index 0000000..6cedcbb --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_wallet_outlined.xml @@ -0,0 +1,13 @@ + + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_warning_filled.xml b/core-android/design-system/src/main/res/drawable/ic_warning_filled.xml new file mode 100644 index 0000000..1edc45a --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_warning_filled.xml @@ -0,0 +1,10 @@ + + + diff --git a/core-android/design-system/src/main/res/drawable/ic_warning_outlined.xml b/core-android/design-system/src/main/res/drawable/ic_warning_outlined.xml new file mode 100644 index 0000000..e9aa7e7 --- /dev/null +++ b/core-android/design-system/src/main/res/drawable/ic_warning_outlined.xml @@ -0,0 +1,16 @@ + + + + + From 1f034ed15a283a50f6626b71bb49a0113a8a96e8 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sat, 25 Oct 2025 09:58:59 +0900 Subject: [PATCH 24/29] Fix plugin --- .../dev/love/winter/convention/extension/AppNameExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-logic/convention/src/main/java/dev/love/winter/convention/extension/AppNameExtension.kt b/build-logic/convention/src/main/java/dev/love/winter/convention/extension/AppNameExtension.kt index be01389..38faf81 100644 --- a/build-logic/convention/src/main/java/dev/love/winter/convention/extension/AppNameExtension.kt +++ b/build-logic/convention/src/main/java/dev/love/winter/convention/extension/AppNameExtension.kt @@ -4,6 +4,6 @@ import org.gradle.api.Project fun Project.setNamespace(name: String) { androidExtension.apply { - namespace = "dev.love.winter.ls.$name" + namespace = "dev.love.winter.$name" } } From d860b7ed0d19b601b78d44f91ac82539771986a2 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sat, 25 Oct 2025 09:59:22 +0900 Subject: [PATCH 25/29] Update icon design token --- .../love/winter/designsystem/theme/Icon.kt | 87 ------ .../winter/designsystem/theme/IconScheme.kt | 273 ++++++++++++++++++ 2 files changed, 273 insertions(+), 87 deletions(-) create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt index 3bad5c2..c3d510c 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt @@ -134,90 +134,3 @@ data class IconScheme( val notification: NotificationIcon, val logo: LogoIcon, ) - -// TODO: Replace with actual drawable resources -internal val Icon = IconScheme( - global = GlobalIcon( - home = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_home_filled, R.drawable.ic_home_outlined - settings = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_settings_filled, R.drawable.ic_settings_outlined - profile = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_profile_filled, R.drawable.ic_profile_outlined - highlights = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_highlights_filled, R.drawable.ic_highlights_outlined - notification = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_notification_filled, R.drawable.ic_notification_outlined - search = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_search_filled, R.drawable.ic_search_outlined - ), - navigation = NavigationIcon( - arrowUp = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_up_filled, R.drawable.ic_arrow_up_outlined - arrowDown = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_down_filled, R.drawable.ic_arrow_down_outlined - arrowLeft = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_left_filled, R.drawable.ic_arrow_left_outlined - arrowRight = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_right_filled, R.drawable.ic_arrow_right_outlined - arrowUpRight = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_arrow_up_right_filled, R.drawable.ic_arrow_up_right_outlined - chevronUp = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_up_filled, R.drawable.ic_chevron_up_outlined - chevronDown = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_down_filled, R.drawable.ic_chevron_down_outlined - chevronLeft = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_left_filled, R.drawable.ic_chevron_left_outlined - chevronRight = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chevron_right_filled, R.drawable.ic_chevron_right_outlined - close = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_close_filled, R.drawable.ic_close_outlined - filter = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_filter_filled, R.drawable.ic_filter_outlined - sort = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_sort_filled, R.drawable.ic_sort_outlined - logout = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logout_filled, R.drawable.ic_logout_outlined - menu = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_menu_filled, R.drawable.ic_menu_outlined - menuHamburger = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_menu_hamburger_filled, R.drawable.ic_menu_hamburger_outlined - more = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_more_filled, R.drawable.ic_more_outlined - link = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_link_filled, R.drawable.ic_link_outlined - ), - input = InputIcon( - edit = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_edit_filled, R.drawable.ic_edit_outlined - delete = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_delete_filled, R.drawable.ic_delete_outlined - plus = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_plus_filled, R.drawable.ic_plus_outlined - minus = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_minus_filled, R.drawable.ic_minus_outlined - check = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_check_filled, R.drawable.ic_check_outlined - eye = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_eye_filled, R.drawable.ic_eye_outlined - eyeOff = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_eye_off_filled, R.drawable.ic_eye_off_outlined - heart = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_heart_filled, R.drawable.ic_heart_outlined - star = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_star_filled, R.drawable.ic_star_outlined - bookmark = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_bookmark_filled, R.drawable.ic_bookmark_outlined - download = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_download_filled, R.drawable.ic_download_outlined - upload = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_upload_filled, R.drawable.ic_upload_outlined - ), - dateTime = DateTimeIcon( - calendar = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_calendar_filled, R.drawable.ic_calendar_outlined - calendarDays = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_calendar_days_filled, R.drawable.ic_calendar_days_outlined - clock = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_clock_filled, R.drawable.ic_clock_outlined - ), - message = MessageIcon( - send = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_send_filled, R.drawable.ic_send_outlined - chat = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_chat_filled, R.drawable.ic_chat_outlined - mail = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_mail_filled, R.drawable.ic_mail_outlined - archive = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_archive_filled, R.drawable.ic_archive_outlined - camera = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_camera_filled, R.drawable.ic_camera_outlined - paperclip = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_paperclip_filled, R.drawable.ic_paperclip_outlined - microphone = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_microphone_filled, R.drawable.ic_microphone_outlined - ), - purchase = PurchaseIcon( - bag = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_bag_filled, R.drawable.ic_bag_outlined - cart = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_cart_filled, R.drawable.ic_cart_outlined - tag = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_tag_filled, R.drawable.ic_tag_outlined - creditCard = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_credit_card_filled, R.drawable.ic_credit_card_outlined - wallet = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_wallet_filled, R.drawable.ic_wallet_outlined - ), - location = LocationIcon( - map = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_map_filled, R.drawable.ic_map_outlined - mapPin = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_map_pin_filled, R.drawable.ic_map_pin_outlined - navigation = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_navigation_filled, R.drawable.ic_navigation_outlined - globe = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_globe_filled, R.drawable.ic_globe_outlined - ), - notification = NotificationIcon( - info = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_info_filled, R.drawable.ic_info_outlined - success = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_success_filled, R.drawable.ic_success_outlined - warning = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_warning_filled, R.drawable.ic_warning_outlined - error = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_error_filled, R.drawable.ic_error_outlined - ), - logo = LogoIcon( - google = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logo_google_filled, R.drawable.ic_logo_google_outlined - facebook = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logo_facebook_filled, R.drawable.ic_logo_facebook_outlined - apple = AppIcon(filled = 0, outlined = 0), // R.drawable.ic_logo_apple_filled, R.drawable.ic_logo_apple_outlined - ), -) - -internal val LocalIcons = staticCompositionLocalOf { - Icon -} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt new file mode 100644 index 0000000..8b77f5b --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt @@ -0,0 +1,273 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.runtime.staticCompositionLocalOf +import dev.love.winter.designsystem.R + +internal val Icon = IconScheme( + global = GlobalIcon( + home = AppIcon( + filled = R.drawable.ic_home_filled, + outlined = R.drawable.ic_home_outlined, + ), + settings = AppIcon( + filled = R.drawable.ic_settings_filled, + outlined = R.drawable.ic_settings_outlined, + ), + profile = AppIcon( + filled = R.drawable.ic_profile_filled, + outlined = R.drawable.ic_profile_outlined, + ), + highlights = AppIcon( + filled = R.drawable.ic_highlights_filled, + outlined = R.drawable.ic_highlights_outlined, + ), + notification = AppIcon( + filled = R.drawable.ic_notification_filled, + outlined = R.drawable.ic_notification_outlined, + ), + search = AppIcon( + filled = R.drawable.ic_search, + outlined = R.drawable.ic_search, + ), + ), + navigation = NavigationIcon( + arrowUp = AppIcon( + filled = R.drawable.ic_arrow_up, + outlined = R.drawable.ic_arrow_up, + ), + arrowDown = AppIcon( + filled = R.drawable.ic_arrow_down, + outlined = R.drawable.ic_arrow_down, + ), + arrowLeft = AppIcon( + filled = R.drawable.ic_arrow_left, + outlined = R.drawable.ic_arrow_left, + ), + arrowRight = AppIcon( + filled = R.drawable.ic_arrow_right, + outlined = R.drawable.ic_arrow_right, + ), + arrowUpRight = AppIcon( + filled = R.drawable.ic_arrow_up_right, + outlined = R.drawable.ic_arrow_up_right, + ), + chevronUp = AppIcon( + filled = R.drawable.ic_chevron_up, + outlined = R.drawable.ic_chevron_up, + ), + chevronDown = AppIcon( + filled = R.drawable.ic_chevron_down, + outlined = R.drawable.ic_chevron_down, + ), + chevronLeft = AppIcon( + filled = R.drawable.ic_chevron_left, + outlined = R.drawable.ic_chevron_left, + ), + chevronRight = AppIcon( + filled = R.drawable.ic_chevron_right, + outlined = R.drawable.ic_chevron_right, + ), + close = AppIcon( + filled = R.drawable.ic_close, + outlined = R.drawable.ic_close, + ), + filter = AppIcon( + filled = R.drawable.ic_filter_filled, + outlined = R.drawable.ic_filter_outlined, + ), + sort = AppIcon( + filled = R.drawable.ic_sort, + outlined = R.drawable.ic_sort, + ), + logout = AppIcon( + filled = R.drawable.ic_logout, + outlined = R.drawable.ic_logout, + ), + menu = AppIcon( + filled = R.drawable.ic_menu_filled, + outlined = R.drawable.ic_menu_outlined, + ), + menuHamburger = AppIcon( + filled = R.drawable.ic_menu_hamburger, + outlined = R.drawable.ic_menu_hamburger, + ), + more = AppIcon( + filled = R.drawable.ic_more, + outlined = R.drawable.ic_more, + ), + link = AppIcon( + filled = R.drawable.ic_link, + outlined = R.drawable.ic_link, + ), + ), + input = InputIcon( + edit = AppIcon( + filled = R.drawable.ic_edit_filled, + outlined = R.drawable.ic_edit_outlined, + ), + delete = AppIcon( + filled = R.drawable.ic_delete_filled, + outlined = R.drawable.ic_delete_outlined, + ), + plus = AppIcon( + filled = R.drawable.ic_plus, + outlined = R.drawable.ic_plus, + ), + minus = AppIcon( + filled = R.drawable.ic_minus, + outlined = R.drawable.ic_minus, + ), + check = AppIcon( + filled = R.drawable.ic_check, + outlined = R.drawable.ic_check, + ), + eye = AppIcon( + filled = R.drawable.ic_eye_filled, + outlined = R.drawable.ic_eye_outlined, + ), + eyeOff = AppIcon( + filled = R.drawable.ic_eye_off_filled, + outlined = R.drawable.ic_eye_off_outlined, + ), + heart = AppIcon( + filled = R.drawable.ic_heart_filled, + outlined = R.drawable.ic_heart_outlined, + ), + star = AppIcon( + filled = R.drawable.ic_star_filled, + outlined = R.drawable.ic_star_outlined, + ), + bookmark = AppIcon( + filled = R.drawable.ic_bookmark_filled, + outlined = R.drawable.ic_bookmark_outlined, + ), + download = AppIcon( + filled = R.drawable.ic_download, + outlined = R.drawable.ic_download, + ), + upload = AppIcon( + filled = R.drawable.ic_upload, + outlined = R.drawable.ic_upload, + ), + ), + dateTime = DateTimeIcon( + calendar = AppIcon( + filled = R.drawable.ic_calendar_filled, + outlined = R.drawable.ic_calendar_outlined, + ), + calendarDays = AppIcon( + filled = R.drawable.ic_calendar_days_filled, + outlined = R.drawable.ic_calendar_days_outlined, + ), + clock = AppIcon( + filled = R.drawable.ic_clock_filled, + outlined = R.drawable.ic_clock_outlined, + ), + ), + message = MessageIcon( + send = AppIcon( + filled = R.drawable.ic_send_filled, + outlined = R.drawable.ic_send_outlined, + ), + chat = AppIcon( + filled = R.drawable.ic_chat_filled, + outlined = R.drawable.ic_chat_outlined, + ), + mail = AppIcon( + filled = R.drawable.ic_mail_filled, + outlined = R.drawable.ic_mail_outlined, + ), + archive = AppIcon( + filled = R.drawable.ic_archive_filled, + outlined = R.drawable.ic_archive_outlined, + ), + camera = AppIcon( + filled = R.drawable.ic_camera_filled, + outlined = R.drawable.ic_camera_outlined, + ), + paperclip = AppIcon( + filled = R.drawable.ic_paperclip, + outlined = R.drawable.ic_paperclip, + ), + microphone = AppIcon( + filled = R.drawable.ic_microphone_filled, + outlined = R.drawable.ic_microphone_outlined, + ), + ), + purchase = PurchaseIcon( + bag = AppIcon( + filled = R.drawable.ic_bag_filled, + outlined = R.drawable.ic_bag_outlined, + ), + cart = AppIcon( + filled = R.drawable.ic_cart_filled, + outlined = R.drawable.ic_cart_outlined, + ), + tag = AppIcon( + filled = R.drawable.ic_tag_filled, + outlined = R.drawable.ic_tag_outlined, + ), + creditCard = AppIcon( + filled = R.drawable.ic_credit_card_filled, + outlined = R.drawable.ic_credit_card_outlined, + ), + wallet = AppIcon( + filled = R.drawable.ic_wallet_filled, + outlined = R.drawable.ic_wallet_outlined, + ), + ), + location = LocationIcon( + map = AppIcon( + filled = R.drawable.ic_map_filled, + outlined = R.drawable.ic_map_outlined, + ), + mapPin = AppIcon( + filled = R.drawable.ic_map_pin_filled, + outlined = R.drawable.ic_map_pin_outlined, + ), + navigation = AppIcon( + filled = R.drawable.ic_navigation_filled, + outlined = R.drawable.ic_navigation_outlined, + ), + globe = AppIcon( + filled = R.drawable.ic_globe_filled, + outlined = R.drawable.ic_globe_outlined, + ), + ), + notification = NotificationIcon( + info = AppIcon( + filled = R.drawable.ic_info_filled, + outlined = R.drawable.ic_info_outlined, + ), + success = AppIcon( + filled = R.drawable.ic_success_filled, + outlined = R.drawable.ic_success_outlined, + ), + warning = AppIcon( + filled = R.drawable.ic_warning_filled, + outlined = R.drawable.ic_warning_outlined, + ), + error = AppIcon( + filled = R.drawable.ic_error_filled, + outlined = R.drawable.ic_error_outlined, + ), + ), + logo = LogoIcon( + google = AppIcon( + filled = R.drawable.ic_logo_google, + outlined = R.drawable.ic_logo_google, + ), + facebook = AppIcon( + filled = R.drawable.ic_logo_facebook, + outlined = R.drawable.ic_logo_facebook, + ), + apple = AppIcon( + filled = R.drawable.ic_logo_apple, + outlined = R.drawable.ic_logo_apple, + ), + ), +) + +internal val LocalIcons = staticCompositionLocalOf { + Icon +} From 1c6e00516414f949daaaada006f6f70dd94be3b7 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sat, 25 Oct 2025 10:07:45 +0900 Subject: [PATCH 26/29] Change theme naming --- .../main/java/dev/love/winter/designsystem/theme/Theme.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index 063388a..a7eaec7 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -14,6 +14,8 @@ import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat +internal val LocalDarkTheme = compositionLocalOf { false } + private val LightColorScheme = lightColorScheme( primary = Primary500, onPrimary = Color.White, @@ -70,8 +72,6 @@ private val DarkColorScheme = darkColorScheme( scrim = Grey900, ) -val LocalDarkTheme = compositionLocalOf { false } - @Composable fun WinterTheme( darkTheme: Boolean = isSystemInDarkTheme(), @@ -112,7 +112,7 @@ fun WinterTheme( } } -object AppTheme { +object WinterTheme { val colors: ColorScheme @Composable get() = LocalAppColorScheme.current @@ -128,4 +128,4 @@ object AppTheme { val borderRadius: BorderRadiusScheme @Composable get() = LocalBorderRadius.current -} +} \ No newline at end of file From 3428c7c7a16d2625323f9f07e8f69f34b13623d2 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sat, 25 Oct 2025 11:34:29 +0900 Subject: [PATCH 27/29] Refactoring based design token --- .../winter/designsystem/theme/BorderRadius.kt | 43 +- .../love/winter/designsystem/theme/Color.kt | 279 ----------- .../winter/designsystem/theme/ColorScheme.kt | 239 --------- .../love/winter/designsystem/theme/Colors.kt | 462 ++++++++++++++++++ .../love/winter/designsystem/theme/Icon.kt | 401 ++++++++++----- .../winter/designsystem/theme/IconScheme.kt | 273 ----------- .../love/winter/designsystem/theme/Spacing.kt | 41 +- .../love/winter/designsystem/theme/Theme.kt | 113 ++--- .../winter/designsystem/theme/Typography.kt | 187 +------ .../designsystem/tokens/BorderRadiusToken.kt | 28 ++ .../winter/designsystem/tokens/ColorToken.kt | 275 +++++++++++ .../winter/designsystem/tokens/IconToken.kt | 119 +++++ .../designsystem/tokens/SpacingToken.kt | 23 + .../designsystem/tokens/TypographyToken.kt | 161 ++++++ 14 files changed, 1421 insertions(+), 1223 deletions(-) delete mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt delete mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Colors.kt delete mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/BorderRadiusToken.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/ColorToken.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/IconToken.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/SpacingToken.kt create mode 100644 core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/TypographyToken.kt diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt index ec0fae0..12092bf 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/BorderRadius.kt @@ -1,40 +1,17 @@ package dev.love.winter.designsystem.theme -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.unit.dp +import dev.love.winter.designsystem.tokens.BorderRadiusExtraLarge +import dev.love.winter.designsystem.tokens.BorderRadiusExtraSmall +import dev.love.winter.designsystem.tokens.BorderRadiusLarge +import dev.love.winter.designsystem.tokens.BorderRadiusMedium +import dev.love.winter.designsystem.tokens.BorderRadiusPill +import dev.love.winter.designsystem.tokens.BorderRadiusSmall -/** - * Border radius tokens - * - * Border radius tokens are applied to elements with rounded corners, - * such as buttons, cards, input fields, and containers, to soften their edges - * and create a more pleasing appearance. - * - * Usage guidelines: - * - Extra Small: Very subtle rounded corners - * - Small: Smallest elements or nested components - * - Medium: Most components, small-to-medium components and containers - * - Large: Medium-to-large components and containers - * - Extra Large: Biggest elements, especially on tablet screens - * - Pill: Components that are completely rounded on their sides - */ - -val BorderRadiusExtraSmall = RoundedCornerShape(2.dp) -val BorderRadiusSmall = RoundedCornerShape(4.dp) -val BorderRadiusMedium = RoundedCornerShape(8.dp) -val BorderRadiusLarge = RoundedCornerShape(16.dp) -val BorderRadiusExtraLarge = RoundedCornerShape(24.dp) -val BorderRadiusPill = CircleShape - -/** - * Border radius scheme for the app - */ @Immutable -data class BorderRadiusScheme( +data class BorderRadius( val extraSmall: Shape, val small: Shape, val medium: Shape, @@ -43,7 +20,7 @@ data class BorderRadiusScheme( val pill: Shape, ) -val BorderRadius = BorderRadiusScheme( +internal val BorderRadiusTheme = BorderRadius( extraSmall = BorderRadiusExtraSmall, small = BorderRadiusSmall, medium = BorderRadiusMedium, @@ -52,6 +29,6 @@ val BorderRadius = BorderRadiusScheme( pill = BorderRadiusPill, ) -val LocalBorderRadius = staticCompositionLocalOf { - BorderRadius +internal val LocalBorderRadius = staticCompositionLocalOf { + BorderRadiusTheme } diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt deleted file mode 100644 index 44b362d..0000000 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Color.kt +++ /dev/null @@ -1,279 +0,0 @@ -package dev.love.winter.designsystem.theme - -import androidx.compose.ui.graphics.Color - -/** - * Color token - */ - -// Brand - Primary -val Primary50 = Color(0xFFF1F1FF) -val Primary100 = Color(0xFFDBDFFF) -val Primary200 = Color(0xFFC1C8FF) -val Primary300 = Color(0xFF9397FF) -val Primary400 = Color(0xFF7278FF) -val Primary500 = Color(0xFF5653FF) -val Primary600 = Color(0xFF4745E4) -val Primary700 = Color(0xFF3B39AF) -val Primary800 = Color(0xFF2B2A85) -val Primary900 = Color(0xFF131243) - -// Blue (Use when brand color is no longer blue) -val Blue50 = Color(0xFFF1F1FF) -val Blue100 = Color(0xFFDBDFFF) -val Blue200 = Color(0xFFC1C8FF) -val Blue300 = Color(0xFF9397FF) -val Blue400 = Color(0xFF7278FF) -val Blue500 = Color(0xFF5653FF) -val Blue600 = Color(0xFF4745E4) -val Blue700 = Color(0xFF3B39AF) -val Blue800 = Color(0xFF2B2A85) -val Blue900 = Color(0xFF131243) - -// Neutral - Grey -val Grey50 = Color(0xFFFDFDFD) -val Grey100 = Color(0xFFF4F4F5) -val Grey200 = Color(0xFFE7E7EA) -val Grey300 = Color(0xFFD9D9DC) -val Grey400 = Color(0xFFBFC0C9) -val Grey500 = Color(0xFF8D8F9B) -val Grey600 = Color(0xFF60626C) -val Grey700 = Color(0xFF484951) -val Grey800 = Color(0xFF313237) -val Grey900 = Color(0xFF18181B) - -// Semantic - Green -val Green50 = Color(0xFFECFAF3) -val Green100 = Color(0xFFC3EEDB) -val Green200 = Color(0xFFA5E6CA) -val Green300 = Color(0xFF7CDAB1) -val Green400 = Color(0xFF63D3A2) -val Green500 = Color(0xFF3CC88B) -val Green600 = Color(0xFF37B67E) -val Green700 = Color(0xFF247E57) -val Green800 = Color(0xFF115B3A) -val Green900 = Color(0xFF0F3122) - -// Semantic - Yellow -val Yellow50 = Color(0xFFFFF7E9) -val Yellow100 = Color(0xFFFFEAC7) -val Yellow200 = Color(0xFFFFDA9A) -val Yellow300 = Color(0xFFFFCD78) -val Yellow400 = Color(0xFFFFBD49) -val Yellow500 = Color(0xFFFFAF24) -val Yellow600 = Color(0xFFF2A522) -val Yellow700 = Color(0xFFC7881A) -val Yellow800 = Color(0xFF825911) -val Yellow900 = Color(0xFF4A340E) - -// Semantic - Red -val Red50 = Color(0xFFFCEBEB) -val Red100 = Color(0xFFFFD7D7) -val Red200 = Color(0xFFF2A1A1) -val Red300 = Color(0xFFEC7676) -val Red400 = Color(0xFFE85B5B) -val Red500 = Color(0xFFE23232) -val Red600 = Color(0xFFCE2E2E) -val Red700 = Color(0xFFA02424) -val Red800 = Color(0xFF6C1A1A) -val Red900 = Color(0xFF401111) - -/** - * Component Token - Background (Light Theme) - */ -val BackgroundLight = Grey50 -val BackgroundContainerLight = Grey100 -val BackgroundObjectLight = Grey200 -val BackgroundModalLight = Grey50 -val BackgroundBrandLight = Primary500 -val BackgroundBrandSubtleLight = Primary50 -val BackgroundPositiveLight = Green50 -val BackgroundWarningLight = Yellow50 -val BackgroundNegativeLight = Red50 -val BackgroundContrastLight = Grey900 -val BackgroundDisabledLight = Grey100 -val BackgroundOverlayLight = Grey900.copy(alpha = 0.5f) - -/** - * Component Token - Background (Dark Theme) - */ -val BackgroundDark = Grey900 -val BackgroundContainerDark = Grey800 -val BackgroundObjectDark = Grey700 -val BackgroundModalDark = Grey800 -val BackgroundBrandDark = Primary500 -val BackgroundBrandSubtleDark = Primary900 -val BackgroundPositiveDark = Green900 -val BackgroundWarningDark = Yellow900 -val BackgroundNegativeDark = Red900 -val BackgroundContrastDark = Grey50 -val BackgroundDisabledDark = Grey800 -val BackgroundOverlayDark = Grey900.copy(alpha = 0.7f) - -/** - * Component Token - Stroke (Light Theme) - */ -val StrokeNeutralSubtleLight = Grey100 -val StrokeNeutralLight = Grey200 -val StrokeNeutralStrongLight = Grey300 -val StrokeBrandLight = Primary500 -val StrokePositiveLight = Green500 -val StrokeWarningLight = Yellow500 -val StrokeNegativeLight = Red500 - -/** - * Component Token - Stroke (Dark Theme) - */ -val StrokeNeutralSubtleDark = Grey800 -val StrokeNeutralDark = Grey700 -val StrokeNeutralStrongDark = Grey600 -val StrokeBrandDark = Primary600 -val StrokePositiveDark = Green600 -val StrokeWarningDark = Yellow600 -val StrokeNegativeDark = Red600 - -/** - * Component Token - Text (Light Theme) - */ -val TextTitleLight = Grey900 -val TextSubtitleLight = Grey700 -val TextBodyLight = Grey800 -val TextCaptionLight = Grey600 -val TextPlaceholderLight = Grey500 -val TextDisabledLight = Grey400 -val TextOnColorDarkLight = Grey50 -val TextOnColorLightLight = Grey900 -val TextOnContrastLight = Grey50 -val TextLinkLight = Primary600 -val TextBrandLight = Primary500 -val TextPositiveLight = Green200 -val TextWarningLight = Yellow700 -val TextNegativeLight = Red600 - -/** - * Component Token - Text (Dark Theme) - */ -val TextTitleDark = Grey50 -val TextSubtitleDark = Grey200 -val TextBodyDark = Grey100 -val TextCaptionDark = Grey300 -val TextPlaceholderDark = Grey500 -val TextDisabledDark = Grey600 -val TextOnColorDarkDark = Grey50 -val TextOnColorLightDark = Grey900 -val TextOnContrastDark = Grey900 -val TextLinkDark = Primary300 -val TextBrandDark = Primary500 -val TextPositiveDark = Green700 -val TextWarningDark = Yellow200 -val TextNegativeDark = Red200 - -/** - * Component Token - Icon (Light Theme) - */ -val IconNeutralSubtleLight = Grey500 -val IconNeutralLight = Grey600 -val IconNeutralStrongLight = Grey900 -val IconBrandLight = Primary500 -val IconPositiveLight = Green600 -val IconWarningLight = Yellow600 -val IconNegativeLight = Red600 -val IconOnColorDarkLight = Grey50 -val IconOnColorLightLight = Grey900 -val IconOnContrastLight = Grey50 -val IconDisabledLight = Grey400 - -/** - * Component Token - Icon (Dark Theme) - */ -val IconNeutralSubtleDark = Grey500 -val IconNeutralDark = Grey300 -val IconNeutralStrongDark = Grey300 -val IconBrandDark = Primary500 -val IconPositiveDark = Green600 -val IconWarningDark = Yellow500 -val IconNegativeDark = Red500 -val IconOnColorDarkDark = Grey50 -val IconOnColorLightDark = Grey900 -val IconOnContrastDark = Grey900 -val IconDisabledDark = Grey600 - -/** - * Component Token - Button (Light Theme) - */ -val ButtonPrimaryDefaultLight = Grey900 -val ButtonPrimaryActiveLight = Grey800 -val ButtonPrimaryDisabledLight = Grey100 -val ButtonSecondaryDefaultLight = Grey600 -val ButtonSecondaryActiveLight = Grey700 -val ButtonSecondaryDisabledLight = Grey800 -val ButtonTertiaryDefaultLight = Grey900 -val ButtonTertiaryActiveLight = Grey700 -val ButtonTertiaryDisabledLight = Grey400 -val ButtonBrandDefaultLight = Primary500 -val ButtonBrandActiveLight = Primary600 -val ButtonBrandDisabledLight = Grey100 -val ButtonCriticalDefaultLight = Red600 -val ButtonCriticalActiveLight = Red700 -val ButtonCriticalDisabledLight = Grey100 - -/** - * Component Token - Button (Dark Theme) - */ -val ButtonPrimaryDefaultDark = Grey50 -val ButtonPrimaryActiveDark = Grey200 -val ButtonPrimaryDisabledDark = Grey800 -val ButtonSecondaryDefaultDark = Grey300 -val ButtonSecondaryActiveDark = Grey400 -val ButtonSecondaryDisabledDark = Grey100 -val ButtonTertiaryDefaultDark = Grey50 -val ButtonTertiaryActiveDark = Grey300 -val ButtonTertiaryDisabledDark = Grey600 -val ButtonBrandDefaultDark = Primary500 -val ButtonBrandActiveDark = Primary600 -val ButtonBrandDisabledDark = Grey800 -val ButtonCriticalDefaultDark = Red600 -val ButtonCriticalActiveDark = Red700 -val ButtonCriticalDisabledDark = Grey800 - -/** - * Component Token - Input (Light Theme) - */ -val InputDefaultLight = Grey300 -val InputActiveLight = Grey300 -val InputActiveCursorLight = Primary500 -val InputSelectedLight = Grey900 -val InputPositiveLight = Green500 -val InputNegativeLight = Red500 -val InputDisabledLight = Grey300 - -/** - * Component Token - Input (Dark Theme) - */ -val InputDefaultDark = Grey700 -val InputActiveDark = Primary500 -val InputActiveCursorDark = Primary200 -val InputSelectedDark = Grey50 -val InputPositiveDark = Green300 -val InputNegativeDark = Red300 -val InputDisabledDark = Grey700 - -/** - * Component Token - Tag (Light Theme) - */ -val TagNeutralLight = Grey200 -val TagBrandStrongLight = Primary500 -val TagBrandSubtleLight = Primary100 -val TagPositiveLight = Green100 -val TagWarningLight = Yellow100 -val TagNegativeLight = Red100 - -/** - * Component Token - Tag (Dark Theme) - */ -val TagNeutralDark = Grey700 -val TagBrandStrongDark = Primary600 -val TagBrandSubtleDark = Primary100 -val TagPositiveDark = Green100 -val TagWarningDark = Yellow100 -val TagNegativeDark = Red100 \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt deleted file mode 100644 index aeaff1a..0000000 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/ColorScheme.kt +++ /dev/null @@ -1,239 +0,0 @@ -package dev.love.winter.designsystem.theme - -import androidx.compose.runtime.Immutable -import androidx.compose.runtime.staticCompositionLocalOf -import androidx.compose.ui.graphics.Color - -/** - * Component color tokens for the app - * Contains only component-level tokens (not primitive tokens) - */ -@Immutable -data class ColorScheme( - val background: Color, - val backgroundContainer: Color, - val backgroundObject: Color, - val backgroundModal: Color, - val backgroundBrand: Color, - val backgroundBrandSubtle: Color, - val backgroundPositive: Color, - val backgroundWarning: Color, - val backgroundNegative: Color, - val backgroundContrast: Color, - val backgroundDisabled: Color, - val backgroundOverlay: Color, - val strokeNeutralSubtle: Color, - val strokeNeutral: Color, - val strokeNeutralStrong: Color, - val strokeBrand: Color, - val strokePositive: Color, - val strokeWarning: Color, - val strokeNegative: Color, - val textTitle: Color, - val textSubtitle: Color, - val textBody: Color, - val textCaption: Color, - val textPlaceholder: Color, - val textDisabled: Color, - val textOnColorDark: Color, - val textOnColorLight: Color, - val textOnContrast: Color, - val textLink: Color, - val textBrand: Color, - val textPositive: Color, - val textWarning: Color, - val textNegative: Color, - val iconNeutralSubtle: Color, - val iconNeutral: Color, - val iconNeutralStrong: Color, - val iconBrand: Color, - val iconPositive: Color, - val iconWarning: Color, - val iconNegative: Color, - val iconOnColorDark: Color, - val iconOnColorLight: Color, - val iconOnContrast: Color, - val iconDisabled: Color, - val buttonPrimaryDefault: Color, - val buttonPrimaryActive: Color, - val buttonPrimaryDisabled: Color, - val buttonSecondaryDefault: Color, - val buttonSecondaryActive: Color, - val buttonSecondaryDisabled: Color, - val buttonTertiaryDefault: Color, - val buttonTertiaryActive: Color, - val buttonTertiaryDisabled: Color, - val buttonBrandDefault: Color, - val buttonBrandActive: Color, - val buttonBrandDisabled: Color, - val buttonCriticalDefault: Color, - val buttonCriticalActive: Color, - val buttonCriticalDisabled: Color, - val inputDefault: Color, - val inputActive: Color, - val inputActiveCursor: Color, - val inputSelected: Color, - val inputPositive: Color, - val inputNegative: Color, - val inputDisabled: Color, - val tagNeutral: Color, - val tagBrandStrong: Color, - val tagBrandSubtle: Color, - val tagPositive: Color, - val tagWarning: Color, - val tagNegative: Color, -) - -val LightAppColorScheme = ColorScheme( - background = BackgroundLight, - backgroundContainer = BackgroundContainerLight, - backgroundObject = BackgroundObjectLight, - backgroundModal = BackgroundModalLight, - backgroundBrand = BackgroundBrandLight, - backgroundBrandSubtle = BackgroundBrandSubtleLight, - backgroundPositive = BackgroundPositiveLight, - backgroundWarning = BackgroundWarningLight, - backgroundNegative = BackgroundNegativeLight, - backgroundContrast = BackgroundContrastLight, - backgroundDisabled = BackgroundDisabledLight, - backgroundOverlay = BackgroundOverlayLight, - strokeNeutralSubtle = StrokeNeutralSubtleLight, - strokeNeutral = StrokeNeutralLight, - strokeNeutralStrong = StrokeNeutralStrongLight, - strokeBrand = StrokeBrandLight, - strokePositive = StrokePositiveLight, - strokeWarning = StrokeWarningLight, - strokeNegative = StrokeNegativeLight, - textTitle = TextTitleLight, - textSubtitle = TextSubtitleLight, - textBody = TextBodyLight, - textCaption = TextCaptionLight, - textPlaceholder = TextPlaceholderLight, - textDisabled = TextDisabledLight, - textOnColorDark = TextOnColorDarkLight, - textOnColorLight = TextOnColorLightLight, - textOnContrast = TextOnContrastLight, - textLink = TextLinkLight, - textBrand = TextBrandLight, - textPositive = TextPositiveLight, - textWarning = TextWarningLight, - textNegative = TextNegativeLight, - iconNeutralSubtle = IconNeutralSubtleLight, - iconNeutral = IconNeutralLight, - iconNeutralStrong = IconNeutralStrongLight, - iconBrand = IconBrandLight, - iconPositive = IconPositiveLight, - iconWarning = IconWarningLight, - iconNegative = IconNegativeLight, - iconOnColorDark = IconOnColorDarkLight, - iconOnColorLight = IconOnColorLightLight, - iconOnContrast = IconOnContrastLight, - iconDisabled = IconDisabledLight, - buttonPrimaryDefault = ButtonPrimaryDefaultLight, - buttonPrimaryActive = ButtonPrimaryActiveLight, - buttonPrimaryDisabled = ButtonPrimaryDisabledLight, - buttonSecondaryDefault = ButtonSecondaryDefaultLight, - buttonSecondaryActive = ButtonSecondaryActiveLight, - buttonSecondaryDisabled = ButtonSecondaryDisabledLight, - buttonTertiaryDefault = ButtonTertiaryDefaultLight, - buttonTertiaryActive = ButtonTertiaryActiveLight, - buttonTertiaryDisabled = ButtonTertiaryDisabledLight, - buttonBrandDefault = ButtonBrandDefaultLight, - buttonBrandActive = ButtonBrandActiveLight, - buttonBrandDisabled = ButtonBrandDisabledLight, - buttonCriticalDefault = ButtonCriticalDefaultLight, - buttonCriticalActive = ButtonCriticalActiveLight, - buttonCriticalDisabled = ButtonCriticalDisabledLight, - inputDefault = InputDefaultLight, - inputActive = InputActiveLight, - inputActiveCursor = InputActiveCursorLight, - inputSelected = InputSelectedLight, - inputPositive = InputPositiveLight, - inputNegative = InputNegativeLight, - inputDisabled = InputDisabledLight, - tagNeutral = TagNeutralLight, - tagBrandStrong = TagBrandStrongLight, - tagBrandSubtle = TagBrandSubtleLight, - tagPositive = TagPositiveLight, - tagWarning = TagWarningLight, - tagNegative = TagNegativeLight, -) - -val DarkAppColorScheme = ColorScheme( - background = BackgroundDark, - backgroundContainer = BackgroundContainerDark, - backgroundObject = BackgroundObjectDark, - backgroundModal = BackgroundModalDark, - backgroundBrand = BackgroundBrandDark, - backgroundBrandSubtle = BackgroundBrandSubtleDark, - backgroundPositive = BackgroundPositiveDark, - backgroundWarning = BackgroundWarningDark, - backgroundNegative = BackgroundNegativeDark, - backgroundContrast = BackgroundContrastDark, - backgroundDisabled = BackgroundDisabledDark, - backgroundOverlay = BackgroundOverlayDark, - strokeNeutralSubtle = StrokeNeutralSubtleDark, - strokeNeutral = StrokeNeutralDark, - strokeNeutralStrong = StrokeNeutralStrongDark, - strokeBrand = StrokeBrandDark, - strokePositive = StrokePositiveDark, - strokeWarning = StrokeWarningDark, - strokeNegative = StrokeNegativeDark, - textTitle = TextTitleDark, - textSubtitle = TextSubtitleDark, - textBody = TextBodyDark, - textCaption = TextCaptionDark, - textPlaceholder = TextPlaceholderDark, - textDisabled = TextDisabledDark, - textOnColorDark = TextOnColorDarkDark, - textOnColorLight = TextOnColorLightDark, - textOnContrast = TextOnContrastDark, - textLink = TextLinkDark, - textBrand = TextBrandDark, - textPositive = TextPositiveDark, - textWarning = TextWarningDark, - textNegative = TextNegativeDark, - iconNeutralSubtle = IconNeutralSubtleDark, - iconNeutral = IconNeutralDark, - iconNeutralStrong = IconNeutralStrongDark, - iconBrand = IconBrandDark, - iconPositive = IconPositiveDark, - iconWarning = IconWarningDark, - iconNegative = IconNegativeDark, - iconOnColorDark = IconOnColorDarkDark, - iconOnColorLight = IconOnColorLightDark, - iconOnContrast = IconOnContrastDark, - iconDisabled = IconDisabledDark, - buttonPrimaryDefault = ButtonPrimaryDefaultDark, - buttonPrimaryActive = ButtonPrimaryActiveDark, - buttonPrimaryDisabled = ButtonPrimaryDisabledDark, - buttonSecondaryDefault = ButtonSecondaryDefaultDark, - buttonSecondaryActive = ButtonSecondaryActiveDark, - buttonSecondaryDisabled = ButtonSecondaryDisabledDark, - buttonTertiaryDefault = ButtonTertiaryDefaultDark, - buttonTertiaryActive = ButtonTertiaryActiveDark, - buttonTertiaryDisabled = ButtonTertiaryDisabledDark, - buttonBrandDefault = ButtonBrandDefaultDark, - buttonBrandActive = ButtonBrandActiveDark, - buttonBrandDisabled = ButtonBrandDisabledDark, - buttonCriticalDefault = ButtonCriticalDefaultDark, - buttonCriticalActive = ButtonCriticalActiveDark, - buttonCriticalDisabled = ButtonCriticalDisabledDark, - inputDefault = InputDefaultDark, - inputActive = InputActiveDark, - inputActiveCursor = InputActiveCursorDark, - inputSelected = InputSelectedDark, - inputPositive = InputPositiveDark, - inputNegative = InputNegativeDark, - inputDisabled = InputDisabledDark, - tagNeutral = TagNeutralDark, - tagBrandStrong = TagBrandStrongDark, - tagBrandSubtle = TagBrandSubtleDark, - tagPositive = TagPositiveDark, - tagWarning = TagWarningDark, - tagNegative = TagNegativeDark, -) - -val LocalAppColorScheme = staticCompositionLocalOf { - LightAppColorScheme -} \ No newline at end of file diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Colors.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Colors.kt new file mode 100644 index 0000000..3cc54a0 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Colors.kt @@ -0,0 +1,462 @@ +package dev.love.winter.designsystem.theme + +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.Color +import dev.love.winter.designsystem.tokens.BackgroundBrandDark +import dev.love.winter.designsystem.tokens.BackgroundBrandLight +import dev.love.winter.designsystem.tokens.BackgroundBrandSubtleDark +import dev.love.winter.designsystem.tokens.BackgroundBrandSubtleLight +import dev.love.winter.designsystem.tokens.BackgroundContainerDark +import dev.love.winter.designsystem.tokens.BackgroundContainerLight +import dev.love.winter.designsystem.tokens.BackgroundContrastDark +import dev.love.winter.designsystem.tokens.BackgroundContrastLight +import dev.love.winter.designsystem.tokens.BackgroundDark +import dev.love.winter.designsystem.tokens.BackgroundDisabledDark +import dev.love.winter.designsystem.tokens.BackgroundDisabledLight +import dev.love.winter.designsystem.tokens.BackgroundLight +import dev.love.winter.designsystem.tokens.BackgroundModalDark +import dev.love.winter.designsystem.tokens.BackgroundModalLight +import dev.love.winter.designsystem.tokens.BackgroundNegativeDark +import dev.love.winter.designsystem.tokens.BackgroundNegativeLight +import dev.love.winter.designsystem.tokens.BackgroundObjectDark +import dev.love.winter.designsystem.tokens.BackgroundObjectLight +import dev.love.winter.designsystem.tokens.BackgroundOverlayDark +import dev.love.winter.designsystem.tokens.BackgroundOverlayLight +import dev.love.winter.designsystem.tokens.BackgroundPositiveDark +import dev.love.winter.designsystem.tokens.BackgroundPositiveLight +import dev.love.winter.designsystem.tokens.BackgroundWarningDark +import dev.love.winter.designsystem.tokens.BackgroundWarningLight +import dev.love.winter.designsystem.tokens.ButtonBrandActiveDark +import dev.love.winter.designsystem.tokens.ButtonBrandActiveLight +import dev.love.winter.designsystem.tokens.ButtonBrandDefaultDark +import dev.love.winter.designsystem.tokens.ButtonBrandDefaultLight +import dev.love.winter.designsystem.tokens.ButtonBrandDisabledDark +import dev.love.winter.designsystem.tokens.ButtonBrandDisabledLight +import dev.love.winter.designsystem.tokens.ButtonCriticalActiveDark +import dev.love.winter.designsystem.tokens.ButtonCriticalActiveLight +import dev.love.winter.designsystem.tokens.ButtonCriticalDefaultDark +import dev.love.winter.designsystem.tokens.ButtonCriticalDefaultLight +import dev.love.winter.designsystem.tokens.ButtonCriticalDisabledDark +import dev.love.winter.designsystem.tokens.ButtonCriticalDisabledLight +import dev.love.winter.designsystem.tokens.ButtonPrimaryActiveDark +import dev.love.winter.designsystem.tokens.ButtonPrimaryActiveLight +import dev.love.winter.designsystem.tokens.ButtonPrimaryDefaultDark +import dev.love.winter.designsystem.tokens.ButtonPrimaryDefaultLight +import dev.love.winter.designsystem.tokens.ButtonPrimaryDisabledDark +import dev.love.winter.designsystem.tokens.ButtonPrimaryDisabledLight +import dev.love.winter.designsystem.tokens.ButtonSecondaryActiveDark +import dev.love.winter.designsystem.tokens.ButtonSecondaryActiveLight +import dev.love.winter.designsystem.tokens.ButtonSecondaryDefaultDark +import dev.love.winter.designsystem.tokens.ButtonSecondaryDefaultLight +import dev.love.winter.designsystem.tokens.ButtonSecondaryDisabledDark +import dev.love.winter.designsystem.tokens.ButtonSecondaryDisabledLight +import dev.love.winter.designsystem.tokens.ButtonTertiaryActiveDark +import dev.love.winter.designsystem.tokens.ButtonTertiaryActiveLight +import dev.love.winter.designsystem.tokens.ButtonTertiaryDefaultDark +import dev.love.winter.designsystem.tokens.ButtonTertiaryDefaultLight +import dev.love.winter.designsystem.tokens.ButtonTertiaryDisabledDark +import dev.love.winter.designsystem.tokens.ButtonTertiaryDisabledLight +import dev.love.winter.designsystem.tokens.Green100 +import dev.love.winter.designsystem.tokens.Green400 +import dev.love.winter.designsystem.tokens.Green600 +import dev.love.winter.designsystem.tokens.Green800 +import dev.love.winter.designsystem.tokens.Green900 +import dev.love.winter.designsystem.tokens.Grey100 +import dev.love.winter.designsystem.tokens.Grey200 +import dev.love.winter.designsystem.tokens.Grey300 +import dev.love.winter.designsystem.tokens.Grey400 +import dev.love.winter.designsystem.tokens.Grey50 +import dev.love.winter.designsystem.tokens.Grey600 +import dev.love.winter.designsystem.tokens.Grey700 +import dev.love.winter.designsystem.tokens.Grey800 +import dev.love.winter.designsystem.tokens.Grey900 +import dev.love.winter.designsystem.tokens.IconBrandDark +import dev.love.winter.designsystem.tokens.IconBrandLight +import dev.love.winter.designsystem.tokens.IconDisabledDark +import dev.love.winter.designsystem.tokens.IconDisabledLight +import dev.love.winter.designsystem.tokens.IconNegativeDark +import dev.love.winter.designsystem.tokens.IconNegativeLight +import dev.love.winter.designsystem.tokens.IconNeutralDark +import dev.love.winter.designsystem.tokens.IconNeutralLight +import dev.love.winter.designsystem.tokens.IconNeutralStrongDark +import dev.love.winter.designsystem.tokens.IconNeutralStrongLight +import dev.love.winter.designsystem.tokens.IconNeutralSubtleDark +import dev.love.winter.designsystem.tokens.IconNeutralSubtleLight +import dev.love.winter.designsystem.tokens.IconOnColorDarkDark +import dev.love.winter.designsystem.tokens.IconOnColorDarkLight +import dev.love.winter.designsystem.tokens.IconOnColorLightDark +import dev.love.winter.designsystem.tokens.IconOnColorLightLight +import dev.love.winter.designsystem.tokens.IconOnContrastDark +import dev.love.winter.designsystem.tokens.IconOnContrastLight +import dev.love.winter.designsystem.tokens.IconPositiveDark +import dev.love.winter.designsystem.tokens.IconPositiveLight +import dev.love.winter.designsystem.tokens.IconWarningDark +import dev.love.winter.designsystem.tokens.IconWarningLight +import dev.love.winter.designsystem.tokens.InputActiveCursorDark +import dev.love.winter.designsystem.tokens.InputActiveCursorLight +import dev.love.winter.designsystem.tokens.InputActiveDark +import dev.love.winter.designsystem.tokens.InputActiveLight +import dev.love.winter.designsystem.tokens.InputDefaultDark +import dev.love.winter.designsystem.tokens.InputDefaultLight +import dev.love.winter.designsystem.tokens.InputDisabledDark +import dev.love.winter.designsystem.tokens.InputDisabledLight +import dev.love.winter.designsystem.tokens.InputNegativeDark +import dev.love.winter.designsystem.tokens.InputNegativeLight +import dev.love.winter.designsystem.tokens.InputPositiveDark +import dev.love.winter.designsystem.tokens.InputPositiveLight +import dev.love.winter.designsystem.tokens.InputSelectedDark +import dev.love.winter.designsystem.tokens.InputSelectedLight +import dev.love.winter.designsystem.tokens.Primary100 +import dev.love.winter.designsystem.tokens.Primary400 +import dev.love.winter.designsystem.tokens.Primary500 +import dev.love.winter.designsystem.tokens.Primary800 +import dev.love.winter.designsystem.tokens.Primary900 +import dev.love.winter.designsystem.tokens.Red100 +import dev.love.winter.designsystem.tokens.Red400 +import dev.love.winter.designsystem.tokens.Red500 +import dev.love.winter.designsystem.tokens.Red800 +import dev.love.winter.designsystem.tokens.Red900 +import dev.love.winter.designsystem.tokens.StrokeBrandDark +import dev.love.winter.designsystem.tokens.StrokeBrandLight +import dev.love.winter.designsystem.tokens.StrokeNegativeDark +import dev.love.winter.designsystem.tokens.StrokeNegativeLight +import dev.love.winter.designsystem.tokens.StrokeNeutralDark +import dev.love.winter.designsystem.tokens.StrokeNeutralLight +import dev.love.winter.designsystem.tokens.StrokeNeutralStrongDark +import dev.love.winter.designsystem.tokens.StrokeNeutralStrongLight +import dev.love.winter.designsystem.tokens.StrokeNeutralSubtleDark +import dev.love.winter.designsystem.tokens.StrokeNeutralSubtleLight +import dev.love.winter.designsystem.tokens.StrokePositiveDark +import dev.love.winter.designsystem.tokens.StrokePositiveLight +import dev.love.winter.designsystem.tokens.StrokeWarningDark +import dev.love.winter.designsystem.tokens.StrokeWarningLight +import dev.love.winter.designsystem.tokens.TagBrandStrongDark +import dev.love.winter.designsystem.tokens.TagBrandStrongLight +import dev.love.winter.designsystem.tokens.TagBrandSubtleDark +import dev.love.winter.designsystem.tokens.TagBrandSubtleLight +import dev.love.winter.designsystem.tokens.TagNegativeDark +import dev.love.winter.designsystem.tokens.TagNegativeLight +import dev.love.winter.designsystem.tokens.TagNeutralDark +import dev.love.winter.designsystem.tokens.TagNeutralLight +import dev.love.winter.designsystem.tokens.TagPositiveDark +import dev.love.winter.designsystem.tokens.TagPositiveLight +import dev.love.winter.designsystem.tokens.TagWarningDark +import dev.love.winter.designsystem.tokens.TagWarningLight +import dev.love.winter.designsystem.tokens.TextBodyDark +import dev.love.winter.designsystem.tokens.TextBodyLight +import dev.love.winter.designsystem.tokens.TextBrandDark +import dev.love.winter.designsystem.tokens.TextBrandLight +import dev.love.winter.designsystem.tokens.TextCaptionDark +import dev.love.winter.designsystem.tokens.TextCaptionLight +import dev.love.winter.designsystem.tokens.TextDisabledDark +import dev.love.winter.designsystem.tokens.TextDisabledLight +import dev.love.winter.designsystem.tokens.TextLinkDark +import dev.love.winter.designsystem.tokens.TextLinkLight +import dev.love.winter.designsystem.tokens.TextNegativeDark +import dev.love.winter.designsystem.tokens.TextNegativeLight +import dev.love.winter.designsystem.tokens.TextOnColorDarkDark +import dev.love.winter.designsystem.tokens.TextOnColorDarkLight +import dev.love.winter.designsystem.tokens.TextOnColorLightDark +import dev.love.winter.designsystem.tokens.TextOnColorLightLight +import dev.love.winter.designsystem.tokens.TextOnContrastDark +import dev.love.winter.designsystem.tokens.TextOnContrastLight +import dev.love.winter.designsystem.tokens.TextPlaceholderDark +import dev.love.winter.designsystem.tokens.TextPlaceholderLight +import dev.love.winter.designsystem.tokens.TextPositiveDark +import dev.love.winter.designsystem.tokens.TextPositiveLight +import dev.love.winter.designsystem.tokens.TextSubtitleDark +import dev.love.winter.designsystem.tokens.TextSubtitleLight +import dev.love.winter.designsystem.tokens.TextTitleDark +import dev.love.winter.designsystem.tokens.TextTitleLight +import dev.love.winter.designsystem.tokens.TextWarningDark +import dev.love.winter.designsystem.tokens.TextWarningLight + +@Immutable +data class Colors( + val background: Color, + val backgroundContainer: Color, + val backgroundObject: Color, + val backgroundModal: Color, + val backgroundBrand: Color, + val backgroundBrandSubtle: Color, + val backgroundPositive: Color, + val backgroundWarning: Color, + val backgroundNegative: Color, + val backgroundContrast: Color, + val backgroundDisabled: Color, + val backgroundOverlay: Color, + val strokeNeutralSubtle: Color, + val strokeNeutral: Color, + val strokeNeutralStrong: Color, + val strokeBrand: Color, + val strokePositive: Color, + val strokeWarning: Color, + val strokeNegative: Color, + val textTitle: Color, + val textSubtitle: Color, + val textBody: Color, + val textCaption: Color, + val textPlaceholder: Color, + val textDisabled: Color, + val textOnColorDark: Color, + val textOnColorLight: Color, + val textOnContrast: Color, + val textLink: Color, + val textBrand: Color, + val textPositive: Color, + val textWarning: Color, + val textNegative: Color, + val iconNeutralSubtle: Color, + val iconNeutral: Color, + val iconNeutralStrong: Color, + val iconBrand: Color, + val iconPositive: Color, + val iconWarning: Color, + val iconNegative: Color, + val iconOnColorDark: Color, + val iconOnColorLight: Color, + val iconOnContrast: Color, + val iconDisabled: Color, + val buttonPrimaryDefault: Color, + val buttonPrimaryActive: Color, + val buttonPrimaryDisabled: Color, + val buttonSecondaryDefault: Color, + val buttonSecondaryActive: Color, + val buttonSecondaryDisabled: Color, + val buttonTertiaryDefault: Color, + val buttonTertiaryActive: Color, + val buttonTertiaryDisabled: Color, + val buttonBrandDefault: Color, + val buttonBrandActive: Color, + val buttonBrandDisabled: Color, + val buttonCriticalDefault: Color, + val buttonCriticalActive: Color, + val buttonCriticalDisabled: Color, + val inputDefault: Color, + val inputActive: Color, + val inputActiveCursor: Color, + val inputSelected: Color, + val inputPositive: Color, + val inputNegative: Color, + val inputDisabled: Color, + val tagNeutral: Color, + val tagBrandStrong: Color, + val tagBrandSubtle: Color, + val tagPositive: Color, + val tagWarning: Color, + val tagNegative: Color, +) + + +internal val MaterialLightColorTheme = lightColorScheme( + primary = Primary500, + onPrimary = Color.White, + primaryContainer = Primary100, + onPrimaryContainer = Primary900, + secondary = Grey600, + onSecondary = Color.White, + secondaryContainer = Grey200, + onSecondaryContainer = Grey900, + tertiary = Green600, + onTertiary = Color.White, + tertiaryContainer = Green100, + onTertiaryContainer = Green900, + error = Red500, + onError = Color.White, + errorContainer = Red100, + onErrorContainer = Red900, + background = Grey50, + onBackground = Grey900, + surface = Grey100, + onSurface = Grey900, + surfaceVariant = Grey200, + onSurfaceVariant = Grey700, + outline = Grey400, + outlineVariant = Grey300, + scrim = Grey900, +) + +internal val MaterialDarkColorTheme = darkColorScheme( + primary = Primary400, + onPrimary = Primary900, + primaryContainer = Primary800, + onPrimaryContainer = Primary100, + secondary = Grey400, + onSecondary = Grey900, + secondaryContainer = Grey700, + onSecondaryContainer = Grey100, + tertiary = Green400, + onTertiary = Green900, + tertiaryContainer = Green800, + onTertiaryContainer = Green100, + error = Red400, + onError = Red900, + errorContainer = Red800, + onErrorContainer = Red100, + background = Grey900, + onBackground = Grey50, + surface = Grey800, + onSurface = Grey50, + surfaceVariant = Grey700, + onSurfaceVariant = Grey300, + outline = Grey600, + outlineVariant = Grey700, + scrim = Grey900, +) + +internal val LightColorTheme = Colors( + background = BackgroundLight, + backgroundContainer = BackgroundContainerLight, + backgroundObject = BackgroundObjectLight, + backgroundModal = BackgroundModalLight, + backgroundBrand = BackgroundBrandLight, + backgroundBrandSubtle = BackgroundBrandSubtleLight, + backgroundPositive = BackgroundPositiveLight, + backgroundWarning = BackgroundWarningLight, + backgroundNegative = BackgroundNegativeLight, + backgroundContrast = BackgroundContrastLight, + backgroundDisabled = BackgroundDisabledLight, + backgroundOverlay = BackgroundOverlayLight, + strokeNeutralSubtle = StrokeNeutralSubtleLight, + strokeNeutral = StrokeNeutralLight, + strokeNeutralStrong = StrokeNeutralStrongLight, + strokeBrand = StrokeBrandLight, + strokePositive = StrokePositiveLight, + strokeWarning = StrokeWarningLight, + strokeNegative = StrokeNegativeLight, + textTitle = TextTitleLight, + textSubtitle = TextSubtitleLight, + textBody = TextBodyLight, + textCaption = TextCaptionLight, + textPlaceholder = TextPlaceholderLight, + textDisabled = TextDisabledLight, + textOnColorDark = TextOnColorDarkLight, + textOnColorLight = TextOnColorLightLight, + textOnContrast = TextOnContrastLight, + textLink = TextLinkLight, + textBrand = TextBrandLight, + textPositive = TextPositiveLight, + textWarning = TextWarningLight, + textNegative = TextNegativeLight, + iconNeutralSubtle = IconNeutralSubtleLight, + iconNeutral = IconNeutralLight, + iconNeutralStrong = IconNeutralStrongLight, + iconBrand = IconBrandLight, + iconPositive = IconPositiveLight, + iconWarning = IconWarningLight, + iconNegative = IconNegativeLight, + iconOnColorDark = IconOnColorDarkLight, + iconOnColorLight = IconOnColorLightLight, + iconOnContrast = IconOnContrastLight, + iconDisabled = IconDisabledLight, + buttonPrimaryDefault = ButtonPrimaryDefaultLight, + buttonPrimaryActive = ButtonPrimaryActiveLight, + buttonPrimaryDisabled = ButtonPrimaryDisabledLight, + buttonSecondaryDefault = ButtonSecondaryDefaultLight, + buttonSecondaryActive = ButtonSecondaryActiveLight, + buttonSecondaryDisabled = ButtonSecondaryDisabledLight, + buttonTertiaryDefault = ButtonTertiaryDefaultLight, + buttonTertiaryActive = ButtonTertiaryActiveLight, + buttonTertiaryDisabled = ButtonTertiaryDisabledLight, + buttonBrandDefault = ButtonBrandDefaultLight, + buttonBrandActive = ButtonBrandActiveLight, + buttonBrandDisabled = ButtonBrandDisabledLight, + buttonCriticalDefault = ButtonCriticalDefaultLight, + buttonCriticalActive = ButtonCriticalActiveLight, + buttonCriticalDisabled = ButtonCriticalDisabledLight, + inputDefault = InputDefaultLight, + inputActive = InputActiveLight, + inputActiveCursor = InputActiveCursorLight, + inputSelected = InputSelectedLight, + inputPositive = InputPositiveLight, + inputNegative = InputNegativeLight, + inputDisabled = InputDisabledLight, + tagNeutral = TagNeutralLight, + tagBrandStrong = TagBrandStrongLight, + tagBrandSubtle = TagBrandSubtleLight, + tagPositive = TagPositiveLight, + tagWarning = TagWarningLight, + tagNegative = TagNegativeLight, +) + +internal val DarkColorTheme = Colors( + background = BackgroundDark, + backgroundContainer = BackgroundContainerDark, + backgroundObject = BackgroundObjectDark, + backgroundModal = BackgroundModalDark, + backgroundBrand = BackgroundBrandDark, + backgroundBrandSubtle = BackgroundBrandSubtleDark, + backgroundPositive = BackgroundPositiveDark, + backgroundWarning = BackgroundWarningDark, + backgroundNegative = BackgroundNegativeDark, + backgroundContrast = BackgroundContrastDark, + backgroundDisabled = BackgroundDisabledDark, + backgroundOverlay = BackgroundOverlayDark, + strokeNeutralSubtle = StrokeNeutralSubtleDark, + strokeNeutral = StrokeNeutralDark, + strokeNeutralStrong = StrokeNeutralStrongDark, + strokeBrand = StrokeBrandDark, + strokePositive = StrokePositiveDark, + strokeWarning = StrokeWarningDark, + strokeNegative = StrokeNegativeDark, + textTitle = TextTitleDark, + textSubtitle = TextSubtitleDark, + textBody = TextBodyDark, + textCaption = TextCaptionDark, + textPlaceholder = TextPlaceholderDark, + textDisabled = TextDisabledDark, + textOnColorDark = TextOnColorDarkDark, + textOnColorLight = TextOnColorLightDark, + textOnContrast = TextOnContrastDark, + textLink = TextLinkDark, + textBrand = TextBrandDark, + textPositive = TextPositiveDark, + textWarning = TextWarningDark, + textNegative = TextNegativeDark, + iconNeutralSubtle = IconNeutralSubtleDark, + iconNeutral = IconNeutralDark, + iconNeutralStrong = IconNeutralStrongDark, + iconBrand = IconBrandDark, + iconPositive = IconPositiveDark, + iconWarning = IconWarningDark, + iconNegative = IconNegativeDark, + iconOnColorDark = IconOnColorDarkDark, + iconOnColorLight = IconOnColorLightDark, + iconOnContrast = IconOnContrastDark, + iconDisabled = IconDisabledDark, + buttonPrimaryDefault = ButtonPrimaryDefaultDark, + buttonPrimaryActive = ButtonPrimaryActiveDark, + buttonPrimaryDisabled = ButtonPrimaryDisabledDark, + buttonSecondaryDefault = ButtonSecondaryDefaultDark, + buttonSecondaryActive = ButtonSecondaryActiveDark, + buttonSecondaryDisabled = ButtonSecondaryDisabledDark, + buttonTertiaryDefault = ButtonTertiaryDefaultDark, + buttonTertiaryActive = ButtonTertiaryActiveDark, + buttonTertiaryDisabled = ButtonTertiaryDisabledDark, + buttonBrandDefault = ButtonBrandDefaultDark, + buttonBrandActive = ButtonBrandActiveDark, + buttonBrandDisabled = ButtonBrandDisabledDark, + buttonCriticalDefault = ButtonCriticalDefaultDark, + buttonCriticalActive = ButtonCriticalActiveDark, + buttonCriticalDisabled = ButtonCriticalDisabledDark, + inputDefault = InputDefaultDark, + inputActive = InputActiveDark, + inputActiveCursor = InputActiveCursorDark, + inputSelected = InputSelectedDark, + inputPositive = InputPositiveDark, + inputNegative = InputNegativeDark, + inputDisabled = InputDisabledDark, + tagNeutral = TagNeutralDark, + tagBrandStrong = TagBrandStrongDark, + tagBrandSubtle = TagBrandSubtleDark, + tagPositive = TagPositiveDark, + tagWarning = TagWarningDark, + tagNegative = TagNegativeDark, +) + +internal val LocalColors = staticCompositionLocalOf { + LightColorTheme +} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt index c3d510c..1f0010f 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Icon.kt @@ -1,129 +1,21 @@ package dev.love.winter.designsystem.theme -import androidx.annotation.DrawableRes import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf - -/** - * Icon tokens - * - * Icons are graphic assets that improve usability by providing extra meaning - * to actions and components, making them more visually appealing and easier to understand. - * - * Guidelines: - * - Size: 24px base - * - Stroke: 1.5px - * - Use Icon grid for consistency - */ - -@Immutable -data class AppIcon( - @param:DrawableRes val filled: Int, - @param:DrawableRes val outlined: Int, -) - -@Immutable -data class GlobalIcon( - val home: AppIcon, - val settings: AppIcon, - val profile: AppIcon, - val highlights: AppIcon, - val notification: AppIcon, - val search: AppIcon, -) - -@Immutable -data class NavigationIcon( - val arrowUp: AppIcon, - val arrowDown: AppIcon, - val arrowLeft: AppIcon, - val arrowRight: AppIcon, - val arrowUpRight: AppIcon, - val chevronUp: AppIcon, - val chevronDown: AppIcon, - val chevronLeft: AppIcon, - val chevronRight: AppIcon, - val close: AppIcon, - val filter: AppIcon, - val sort: AppIcon, - val logout: AppIcon, - val menu: AppIcon, - val menuHamburger: AppIcon, - val more: AppIcon, - val link: AppIcon, -) - -@Immutable -data class InputIcon( - val edit: AppIcon, - val delete: AppIcon, - val plus: AppIcon, - val minus: AppIcon, - val check: AppIcon, - val eye: AppIcon, - val eyeOff: AppIcon, - val heart: AppIcon, - val star: AppIcon, - val bookmark: AppIcon, - val download: AppIcon, - val upload: AppIcon, -) - -@Immutable -data class DateTimeIcon( - val calendar: AppIcon, - val calendarDays: AppIcon, - val clock: AppIcon, -) - -@Immutable -data class MessageIcon( - val send: AppIcon, - val chat: AppIcon, - val mail: AppIcon, - val archive: AppIcon, - val camera: AppIcon, - val paperclip: AppIcon, - val microphone: AppIcon, -) - -@Immutable -data class PurchaseIcon( - val bag: AppIcon, - val cart: AppIcon, - val tag: AppIcon, - val creditCard: AppIcon, - val wallet: AppIcon, -) +import dev.love.winter.designsystem.R +import dev.love.winter.designsystem.tokens.DateTimeIcon +import dev.love.winter.designsystem.tokens.GlobalIcon +import dev.love.winter.designsystem.tokens.IconResource +import dev.love.winter.designsystem.tokens.InputIcon +import dev.love.winter.designsystem.tokens.LocationIcon +import dev.love.winter.designsystem.tokens.LogoIcon +import dev.love.winter.designsystem.tokens.MessageIcon +import dev.love.winter.designsystem.tokens.NavigationIcon +import dev.love.winter.designsystem.tokens.NotificationIcon +import dev.love.winter.designsystem.tokens.PurchaseIcon @Immutable -data class LocationIcon( - val map: AppIcon, - val mapPin: AppIcon, - val navigation: AppIcon, - val globe: AppIcon, -) - -@Immutable -data class NotificationIcon( - val info: AppIcon, - val success: AppIcon, - val warning: AppIcon, - val error: AppIcon, -) - -@Immutable -data class LogoIcon( - val google: AppIcon, - val facebook: AppIcon, - val apple: AppIcon, -) - -/** - * Icon scheme for the app - */ -@Immutable -data class IconScheme( +data class Icon( val global: GlobalIcon, val navigation: NavigationIcon, val input: InputIcon, @@ -134,3 +26,272 @@ data class IconScheme( val notification: NotificationIcon, val logo: LogoIcon, ) + +internal val IconTheme = Icon( + global = GlobalIcon( + home = IconResource( + filled = R.drawable.ic_home_filled, + outlined = R.drawable.ic_home_outlined, + ), + settings = IconResource( + filled = R.drawable.ic_settings_filled, + outlined = R.drawable.ic_settings_outlined, + ), + profile = IconResource( + filled = R.drawable.ic_profile_filled, + outlined = R.drawable.ic_profile_outlined, + ), + highlights = IconResource( + filled = R.drawable.ic_highlights_filled, + outlined = R.drawable.ic_highlights_outlined, + ), + notification = IconResource( + filled = R.drawable.ic_notification_filled, + outlined = R.drawable.ic_notification_outlined, + ), + search = IconResource( + filled = R.drawable.ic_search, + outlined = R.drawable.ic_search, + ), + ), + navigation = NavigationIcon( + arrowUp = IconResource( + filled = R.drawable.ic_arrow_up, + outlined = R.drawable.ic_arrow_up, + ), + arrowDown = IconResource( + filled = R.drawable.ic_arrow_down, + outlined = R.drawable.ic_arrow_down, + ), + arrowLeft = IconResource( + filled = R.drawable.ic_arrow_left, + outlined = R.drawable.ic_arrow_left, + ), + arrowRight = IconResource( + filled = R.drawable.ic_arrow_right, + outlined = R.drawable.ic_arrow_right, + ), + arrowUpRight = IconResource( + filled = R.drawable.ic_arrow_up_right, + outlined = R.drawable.ic_arrow_up_right, + ), + chevronUp = IconResource( + filled = R.drawable.ic_chevron_up, + outlined = R.drawable.ic_chevron_up, + ), + chevronDown = IconResource( + filled = R.drawable.ic_chevron_down, + outlined = R.drawable.ic_chevron_down, + ), + chevronLeft = IconResource( + filled = R.drawable.ic_chevron_left, + outlined = R.drawable.ic_chevron_left, + ), + chevronRight = IconResource( + filled = R.drawable.ic_chevron_right, + outlined = R.drawable.ic_chevron_right, + ), + close = IconResource( + filled = R.drawable.ic_close, + outlined = R.drawable.ic_close, + ), + filter = IconResource( + filled = R.drawable.ic_filter_filled, + outlined = R.drawable.ic_filter_outlined, + ), + sort = IconResource( + filled = R.drawable.ic_sort, + outlined = R.drawable.ic_sort, + ), + logout = IconResource( + filled = R.drawable.ic_logout, + outlined = R.drawable.ic_logout, + ), + menu = IconResource( + filled = R.drawable.ic_menu_filled, + outlined = R.drawable.ic_menu_outlined, + ), + menuHamburger = IconResource( + filled = R.drawable.ic_menu_hamburger, + outlined = R.drawable.ic_menu_hamburger, + ), + more = IconResource( + filled = R.drawable.ic_more, + outlined = R.drawable.ic_more, + ), + link = IconResource( + filled = R.drawable.ic_link, + outlined = R.drawable.ic_link, + ), + ), + input = InputIcon( + edit = IconResource( + filled = R.drawable.ic_edit_filled, + outlined = R.drawable.ic_edit_outlined, + ), + delete = IconResource( + filled = R.drawable.ic_delete_filled, + outlined = R.drawable.ic_delete_outlined, + ), + plus = IconResource( + filled = R.drawable.ic_plus, + outlined = R.drawable.ic_plus, + ), + minus = IconResource( + filled = R.drawable.ic_minus, + outlined = R.drawable.ic_minus, + ), + check = IconResource( + filled = R.drawable.ic_check, + outlined = R.drawable.ic_check, + ), + eye = IconResource( + filled = R.drawable.ic_eye_filled, + outlined = R.drawable.ic_eye_outlined, + ), + eyeOff = IconResource( + filled = R.drawable.ic_eye_off_filled, + outlined = R.drawable.ic_eye_off_outlined, + ), + heart = IconResource( + filled = R.drawable.ic_heart_filled, + outlined = R.drawable.ic_heart_outlined, + ), + star = IconResource( + filled = R.drawable.ic_star_filled, + outlined = R.drawable.ic_star_outlined, + ), + bookmark = IconResource( + filled = R.drawable.ic_bookmark_filled, + outlined = R.drawable.ic_bookmark_outlined, + ), + download = IconResource( + filled = R.drawable.ic_download, + outlined = R.drawable.ic_download, + ), + upload = IconResource( + filled = R.drawable.ic_upload, + outlined = R.drawable.ic_upload, + ), + ), + dateTime = DateTimeIcon( + calendar = IconResource( + filled = R.drawable.ic_calendar_filled, + outlined = R.drawable.ic_calendar_outlined, + ), + calendarDays = IconResource( + filled = R.drawable.ic_calendar_days_filled, + outlined = R.drawable.ic_calendar_days_outlined, + ), + clock = IconResource( + filled = R.drawable.ic_clock_filled, + outlined = R.drawable.ic_clock_outlined, + ), + ), + message = MessageIcon( + send = IconResource( + filled = R.drawable.ic_send_filled, + outlined = R.drawable.ic_send_outlined, + ), + chat = IconResource( + filled = R.drawable.ic_chat_filled, + outlined = R.drawable.ic_chat_outlined, + ), + mail = IconResource( + filled = R.drawable.ic_mail_filled, + outlined = R.drawable.ic_mail_outlined, + ), + archive = IconResource( + filled = R.drawable.ic_archive_filled, + outlined = R.drawable.ic_archive_outlined, + ), + camera = IconResource( + filled = R.drawable.ic_camera_filled, + outlined = R.drawable.ic_camera_outlined, + ), + paperclip = IconResource( + filled = R.drawable.ic_paperclip, + outlined = R.drawable.ic_paperclip, + ), + microphone = IconResource( + filled = R.drawable.ic_microphone_filled, + outlined = R.drawable.ic_microphone_outlined, + ), + ), + purchase = PurchaseIcon( + bag = IconResource( + filled = R.drawable.ic_bag_filled, + outlined = R.drawable.ic_bag_outlined, + ), + cart = IconResource( + filled = R.drawable.ic_cart_filled, + outlined = R.drawable.ic_cart_outlined, + ), + tag = IconResource( + filled = R.drawable.ic_tag_filled, + outlined = R.drawable.ic_tag_outlined, + ), + creditCard = IconResource( + filled = R.drawable.ic_credit_card_filled, + outlined = R.drawable.ic_credit_card_outlined, + ), + wallet = IconResource( + filled = R.drawable.ic_wallet_filled, + outlined = R.drawable.ic_wallet_outlined, + ), + ), + location = LocationIcon( + map = IconResource( + filled = R.drawable.ic_map_filled, + outlined = R.drawable.ic_map_outlined, + ), + mapPin = IconResource( + filled = R.drawable.ic_map_pin_filled, + outlined = R.drawable.ic_map_pin_outlined, + ), + navigation = IconResource( + filled = R.drawable.ic_navigation_filled, + outlined = R.drawable.ic_navigation_outlined, + ), + globe = IconResource( + filled = R.drawable.ic_globe_filled, + outlined = R.drawable.ic_globe_outlined, + ), + ), + notification = NotificationIcon( + info = IconResource( + filled = R.drawable.ic_info_filled, + outlined = R.drawable.ic_info_outlined, + ), + success = IconResource( + filled = R.drawable.ic_success_filled, + outlined = R.drawable.ic_success_outlined, + ), + warning = IconResource( + filled = R.drawable.ic_warning_filled, + outlined = R.drawable.ic_warning_outlined, + ), + error = IconResource( + filled = R.drawable.ic_error_filled, + outlined = R.drawable.ic_error_outlined, + ), + ), + logo = LogoIcon( + google = IconResource( + filled = R.drawable.ic_logo_google, + outlined = R.drawable.ic_logo_google, + ), + facebook = IconResource( + filled = R.drawable.ic_logo_facebook, + outlined = R.drawable.ic_logo_facebook, + ), + apple = IconResource( + filled = R.drawable.ic_logo_apple, + outlined = R.drawable.ic_logo_apple, + ), + ), +) + +internal val LocalIcons = staticCompositionLocalOf { + IconTheme +} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt deleted file mode 100644 index 8b77f5b..0000000 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/IconScheme.kt +++ /dev/null @@ -1,273 +0,0 @@ -package dev.love.winter.designsystem.theme - -import androidx.compose.runtime.staticCompositionLocalOf -import dev.love.winter.designsystem.R - -internal val Icon = IconScheme( - global = GlobalIcon( - home = AppIcon( - filled = R.drawable.ic_home_filled, - outlined = R.drawable.ic_home_outlined, - ), - settings = AppIcon( - filled = R.drawable.ic_settings_filled, - outlined = R.drawable.ic_settings_outlined, - ), - profile = AppIcon( - filled = R.drawable.ic_profile_filled, - outlined = R.drawable.ic_profile_outlined, - ), - highlights = AppIcon( - filled = R.drawable.ic_highlights_filled, - outlined = R.drawable.ic_highlights_outlined, - ), - notification = AppIcon( - filled = R.drawable.ic_notification_filled, - outlined = R.drawable.ic_notification_outlined, - ), - search = AppIcon( - filled = R.drawable.ic_search, - outlined = R.drawable.ic_search, - ), - ), - navigation = NavigationIcon( - arrowUp = AppIcon( - filled = R.drawable.ic_arrow_up, - outlined = R.drawable.ic_arrow_up, - ), - arrowDown = AppIcon( - filled = R.drawable.ic_arrow_down, - outlined = R.drawable.ic_arrow_down, - ), - arrowLeft = AppIcon( - filled = R.drawable.ic_arrow_left, - outlined = R.drawable.ic_arrow_left, - ), - arrowRight = AppIcon( - filled = R.drawable.ic_arrow_right, - outlined = R.drawable.ic_arrow_right, - ), - arrowUpRight = AppIcon( - filled = R.drawable.ic_arrow_up_right, - outlined = R.drawable.ic_arrow_up_right, - ), - chevronUp = AppIcon( - filled = R.drawable.ic_chevron_up, - outlined = R.drawable.ic_chevron_up, - ), - chevronDown = AppIcon( - filled = R.drawable.ic_chevron_down, - outlined = R.drawable.ic_chevron_down, - ), - chevronLeft = AppIcon( - filled = R.drawable.ic_chevron_left, - outlined = R.drawable.ic_chevron_left, - ), - chevronRight = AppIcon( - filled = R.drawable.ic_chevron_right, - outlined = R.drawable.ic_chevron_right, - ), - close = AppIcon( - filled = R.drawable.ic_close, - outlined = R.drawable.ic_close, - ), - filter = AppIcon( - filled = R.drawable.ic_filter_filled, - outlined = R.drawable.ic_filter_outlined, - ), - sort = AppIcon( - filled = R.drawable.ic_sort, - outlined = R.drawable.ic_sort, - ), - logout = AppIcon( - filled = R.drawable.ic_logout, - outlined = R.drawable.ic_logout, - ), - menu = AppIcon( - filled = R.drawable.ic_menu_filled, - outlined = R.drawable.ic_menu_outlined, - ), - menuHamburger = AppIcon( - filled = R.drawable.ic_menu_hamburger, - outlined = R.drawable.ic_menu_hamburger, - ), - more = AppIcon( - filled = R.drawable.ic_more, - outlined = R.drawable.ic_more, - ), - link = AppIcon( - filled = R.drawable.ic_link, - outlined = R.drawable.ic_link, - ), - ), - input = InputIcon( - edit = AppIcon( - filled = R.drawable.ic_edit_filled, - outlined = R.drawable.ic_edit_outlined, - ), - delete = AppIcon( - filled = R.drawable.ic_delete_filled, - outlined = R.drawable.ic_delete_outlined, - ), - plus = AppIcon( - filled = R.drawable.ic_plus, - outlined = R.drawable.ic_plus, - ), - minus = AppIcon( - filled = R.drawable.ic_minus, - outlined = R.drawable.ic_minus, - ), - check = AppIcon( - filled = R.drawable.ic_check, - outlined = R.drawable.ic_check, - ), - eye = AppIcon( - filled = R.drawable.ic_eye_filled, - outlined = R.drawable.ic_eye_outlined, - ), - eyeOff = AppIcon( - filled = R.drawable.ic_eye_off_filled, - outlined = R.drawable.ic_eye_off_outlined, - ), - heart = AppIcon( - filled = R.drawable.ic_heart_filled, - outlined = R.drawable.ic_heart_outlined, - ), - star = AppIcon( - filled = R.drawable.ic_star_filled, - outlined = R.drawable.ic_star_outlined, - ), - bookmark = AppIcon( - filled = R.drawable.ic_bookmark_filled, - outlined = R.drawable.ic_bookmark_outlined, - ), - download = AppIcon( - filled = R.drawable.ic_download, - outlined = R.drawable.ic_download, - ), - upload = AppIcon( - filled = R.drawable.ic_upload, - outlined = R.drawable.ic_upload, - ), - ), - dateTime = DateTimeIcon( - calendar = AppIcon( - filled = R.drawable.ic_calendar_filled, - outlined = R.drawable.ic_calendar_outlined, - ), - calendarDays = AppIcon( - filled = R.drawable.ic_calendar_days_filled, - outlined = R.drawable.ic_calendar_days_outlined, - ), - clock = AppIcon( - filled = R.drawable.ic_clock_filled, - outlined = R.drawable.ic_clock_outlined, - ), - ), - message = MessageIcon( - send = AppIcon( - filled = R.drawable.ic_send_filled, - outlined = R.drawable.ic_send_outlined, - ), - chat = AppIcon( - filled = R.drawable.ic_chat_filled, - outlined = R.drawable.ic_chat_outlined, - ), - mail = AppIcon( - filled = R.drawable.ic_mail_filled, - outlined = R.drawable.ic_mail_outlined, - ), - archive = AppIcon( - filled = R.drawable.ic_archive_filled, - outlined = R.drawable.ic_archive_outlined, - ), - camera = AppIcon( - filled = R.drawable.ic_camera_filled, - outlined = R.drawable.ic_camera_outlined, - ), - paperclip = AppIcon( - filled = R.drawable.ic_paperclip, - outlined = R.drawable.ic_paperclip, - ), - microphone = AppIcon( - filled = R.drawable.ic_microphone_filled, - outlined = R.drawable.ic_microphone_outlined, - ), - ), - purchase = PurchaseIcon( - bag = AppIcon( - filled = R.drawable.ic_bag_filled, - outlined = R.drawable.ic_bag_outlined, - ), - cart = AppIcon( - filled = R.drawable.ic_cart_filled, - outlined = R.drawable.ic_cart_outlined, - ), - tag = AppIcon( - filled = R.drawable.ic_tag_filled, - outlined = R.drawable.ic_tag_outlined, - ), - creditCard = AppIcon( - filled = R.drawable.ic_credit_card_filled, - outlined = R.drawable.ic_credit_card_outlined, - ), - wallet = AppIcon( - filled = R.drawable.ic_wallet_filled, - outlined = R.drawable.ic_wallet_outlined, - ), - ), - location = LocationIcon( - map = AppIcon( - filled = R.drawable.ic_map_filled, - outlined = R.drawable.ic_map_outlined, - ), - mapPin = AppIcon( - filled = R.drawable.ic_map_pin_filled, - outlined = R.drawable.ic_map_pin_outlined, - ), - navigation = AppIcon( - filled = R.drawable.ic_navigation_filled, - outlined = R.drawable.ic_navigation_outlined, - ), - globe = AppIcon( - filled = R.drawable.ic_globe_filled, - outlined = R.drawable.ic_globe_outlined, - ), - ), - notification = NotificationIcon( - info = AppIcon( - filled = R.drawable.ic_info_filled, - outlined = R.drawable.ic_info_outlined, - ), - success = AppIcon( - filled = R.drawable.ic_success_filled, - outlined = R.drawable.ic_success_outlined, - ), - warning = AppIcon( - filled = R.drawable.ic_warning_filled, - outlined = R.drawable.ic_warning_outlined, - ), - error = AppIcon( - filled = R.drawable.ic_error_filled, - outlined = R.drawable.ic_error_outlined, - ), - ), - logo = LogoIcon( - google = AppIcon( - filled = R.drawable.ic_logo_google, - outlined = R.drawable.ic_logo_google, - ), - facebook = AppIcon( - filled = R.drawable.ic_logo_facebook, - outlined = R.drawable.ic_logo_facebook, - ), - apple = AppIcon( - filled = R.drawable.ic_logo_apple, - outlined = R.drawable.ic_logo_apple, - ), - ), -) - -internal val LocalIcons = staticCompositionLocalOf { - Icon -} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt index 459aabf..65f2db4 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Spacing.kt @@ -3,33 +3,16 @@ package dev.love.winter.designsystem.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp +import dev.love.winter.designsystem.tokens.SpacingExtraExtraLarge +import dev.love.winter.designsystem.tokens.SpacingExtraExtraSmall +import dev.love.winter.designsystem.tokens.SpacingExtraLarge +import dev.love.winter.designsystem.tokens.SpacingExtraSmall +import dev.love.winter.designsystem.tokens.SpacingLarge +import dev.love.winter.designsystem.tokens.SpacingMedium +import dev.love.winter.designsystem.tokens.SpacingSmall -/** - * Spacing tokens - * - * Spacing tokens guarantee consistent spacing and alignment between elements - * while providing better readability, clarity, and balance. - * - * Usage guidelines: - * - For related items, use smaller spacing values - * - For unrelated items, use larger spacing values - * - When stacking components, use the same spacing between all elements in the group - */ - -val SpacingExtraExtraSmall = 4.dp -val SpacingExtraSmall = 8.dp -val SpacingSmall = 16.dp -val SpacingMedium = 24.dp -val SpacingLarge = 32.dp -val SpacingExtraLarge = 40.dp -val SpacingExtraExtraLarge = 48.dp - -/** - * Spacing scheme for the app - */ @Immutable -data class SpacingScheme( +data class Spacing( val extraExtraSmall: Dp, val extraSmall: Dp, val small: Dp, @@ -39,7 +22,7 @@ data class SpacingScheme( val extraExtraLarge: Dp, ) -val Spacing = SpacingScheme( +internal val SpacingTheme = Spacing( extraExtraSmall = SpacingExtraExtraSmall, extraSmall = SpacingExtraSmall, small = SpacingSmall, @@ -49,6 +32,6 @@ val Spacing = SpacingScheme( extraExtraLarge = SpacingExtraExtraLarge, ) -val LocalSpacing = staticCompositionLocalOf { - Spacing -} \ No newline at end of file +internal val LocalSpacing = staticCompositionLocalOf { + SpacingTheme +} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index a7eaec7..ad99259 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -1,131 +1,76 @@ package dev.love.winter.designsystem.theme import android.app.Activity +import android.view.Window import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.darkColorScheme -import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.SideEffect import androidx.compose.runtime.compositionLocalOf -import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalInspectionMode import androidx.compose.ui.platform.LocalView import androidx.core.view.WindowCompat internal val LocalDarkTheme = compositionLocalOf { false } -private val LightColorScheme = lightColorScheme( - primary = Primary500, - onPrimary = Color.White, - primaryContainer = Primary100, - onPrimaryContainer = Primary900, - secondary = Grey600, - onSecondary = Color.White, - secondaryContainer = Grey200, - onSecondaryContainer = Grey900, - tertiary = Green600, - onTertiary = Color.White, - tertiaryContainer = Green100, - onTertiaryContainer = Green900, - error = Red500, - onError = Color.White, - errorContainer = Red100, - onErrorContainer = Red900, - background = Grey50, - onBackground = Grey900, - surface = Grey100, - onSurface = Grey900, - surfaceVariant = Grey200, - onSurfaceVariant = Grey700, - outline = Grey400, - outlineVariant = Grey300, - scrim = Grey900, -) - -private val DarkColorScheme = darkColorScheme( - primary = Primary400, - onPrimary = Primary900, - primaryContainer = Primary800, - onPrimaryContainer = Primary100, - secondary = Grey400, - onSecondary = Grey900, - secondaryContainer = Grey700, - onSecondaryContainer = Grey100, - tertiary = Green400, - onTertiary = Green900, - tertiaryContainer = Green800, - onTertiaryContainer = Green100, - error = Red400, - onError = Red900, - errorContainer = Red800, - onErrorContainer = Red100, - background = Grey900, - onBackground = Grey50, - surface = Grey800, - onSurface = Grey50, - surfaceVariant = Grey700, - onSurfaceVariant = Grey300, - outline = Grey600, - outlineVariant = Grey700, - scrim = Grey900, -) - @Composable fun WinterTheme( darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit, ) { - val colorScheme = if (darkTheme) { - DarkColorScheme - } else { - LightColorScheme - } - val appColorScheme = if (darkTheme) { - DarkAppColorScheme - } else { - LightAppColorScheme - } - if (!LocalInspectionMode.current) { val view = LocalView.current SideEffect { - val window = (view.context as Activity).window + val window: Window = (view.context as Activity).window WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = !darkTheme } } - + val designSystemColorTheme: Colors = if (darkTheme) { + DarkColorTheme + } else { + LightColorTheme + } + val materialColorScheme: ColorScheme = if (darkTheme) { + MaterialDarkColorTheme + } else { + MaterialLightColorTheme + } CompositionLocalProvider( LocalDarkTheme provides darkTheme, - LocalAppColorScheme provides appColorScheme, - LocalTypography provides Typography, - LocalSpacing provides Spacing, - LocalBorderRadius provides BorderRadius, - LocalIcons provides Icon, + LocalColors provides designSystemColorTheme, + LocalTypography provides TypographyTheme, + LocalSpacing provides SpacingTheme, + LocalBorderRadius provides BorderRadiusTheme, + LocalIcons provides IconTheme, ) { MaterialTheme( - colorScheme = colorScheme, + colorScheme = materialColorScheme, content = content, ) } } object WinterTheme { - val colors: ColorScheme + val color: Colors @Composable - get() = LocalAppColorScheme.current + get() = LocalColors.current - val typography: TypographyScheme + val typography: Typography @Composable get() = LocalTypography.current - val spacing: SpacingScheme + val spacing: Spacing @Composable get() = LocalSpacing.current - val borderRadius: BorderRadiusScheme + val borderRadius: BorderRadius @Composable get() = LocalBorderRadius.current -} \ No newline at end of file + + val icon: Icon + @Composable + get() = LocalIcons.current +} diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt index e5681ac..8fc7dfd 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Typography.kt @@ -3,171 +3,26 @@ package dev.love.winter.designsystem.theme import androidx.compose.runtime.Immutable import androidx.compose.runtime.staticCompositionLocalOf import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.sp +import dev.love.winter.designsystem.tokens.ActionLarge +import dev.love.winter.designsystem.tokens.ActionMedium +import dev.love.winter.designsystem.tokens.ActionSmall +import dev.love.winter.designsystem.tokens.BodyExtraLarge +import dev.love.winter.designsystem.tokens.BodyExtraSmall +import dev.love.winter.designsystem.tokens.BodyLarge +import dev.love.winter.designsystem.tokens.BodyMedium +import dev.love.winter.designsystem.tokens.BodySmall +import dev.love.winter.designsystem.tokens.CaptionLarge +import dev.love.winter.designsystem.tokens.CaptionMedium +import dev.love.winter.designsystem.tokens.CaptionSmall +import dev.love.winter.designsystem.tokens.FontLarge +import dev.love.winter.designsystem.tokens.FontMedium +import dev.love.winter.designsystem.tokens.FontSmall +import dev.love.winter.designsystem.tokens.TitleLarge +import dev.love.winter.designsystem.tokens.TitleMedium +import dev.love.winter.designsystem.tokens.TitleSmall -/** - * Typography tokens - * - * Use the display font style for large headings or prominent text that requires emphasis. - * Display is ideal for grabbing the user's attention and making a bold statement. Avoid using this style for long texts. - */ - -val FontLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 28.sp, - lineHeight = 34.sp, -) - -val FontMedium = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 24.sp, - lineHeight = 30.sp, -) - -val FontSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 18.sp, - lineHeight = 24.sp, -) - -/** - * Title tokens - * - * Use the title font style when you need a clear visual hierarchy without overwhelming the layout. - * You can apply this style in short texts that need to stand out when compared to body text, - * like section titles, card titles, page titles, etc. - */ -val TitleLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 16.sp, - lineHeight = 22.sp, -) - -val TitleMedium = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 14.sp, - lineHeight = 18.sp, -) - -val TitleSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 12.sp, - lineHeight = 16.sp, -) - -/** - * Body tokens - * - * The body font style is ideal for regular text content, such as paragraphs, or descriptions. - * The body styles are suitable both for long and short text, where readability and legibility are essential. - */ -val BodyExtraLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 18.sp, - lineHeight = 24.sp, -) - -val BodyLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 16.sp, - lineHeight = 22.sp, -) - -val BodyMedium = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 14.sp, - lineHeight = 18.sp, -) - -val BodySmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 12.sp, - lineHeight = 16.sp, -) - -val BodyExtraSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Normal, - fontSize = 10.sp, - lineHeight = 14.sp, -) - -/** - * Action tokens - * - * The action font style is suitable for text elements that represent interactive or actionable items, - * such as buttons, input, and links. Use it to distinguish interactive elements from regular text. - */ -val ActionLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 16.sp, - lineHeight = 20.sp, -) - -val ActionMedium = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 14.sp, - lineHeight = 18.sp, -) - -val ActionSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.SemiBold, - fontSize = 12.sp, - lineHeight = 16.sp, -) - -/** - * Caption tokens - * - * The caption font style is used for supporting text that provides context and complements visual elements, - * like icons, images, tags, etc. Avoid using this style in long texts. - * - * Note: Use .uppercase() modifier on Text to apply all caps style. - */ -val CaptionLarge = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 14.sp, - lineHeight = 18.sp, - letterSpacing = 0.56.sp, -) - -val CaptionMedium = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 12.sp, - lineHeight = 16.sp, - letterSpacing = 0.48.sp, -) - -val CaptionSmall = TextStyle( - fontFamily = FontFamily.Default, - fontWeight = FontWeight.Medium, - fontSize = 10.sp, - lineHeight = 14.sp, - letterSpacing = 0.4.sp, -) - -/** - * Scheme - */ @Immutable -data class TypographyScheme( +data class Typography( val displayLarge: TextStyle, val displayMedium: TextStyle, val displaySmall: TextStyle, @@ -187,7 +42,7 @@ data class TypographyScheme( val captionSmall: TextStyle, ) -val Typography = TypographyScheme( +internal val TypographyTheme = Typography( displayLarge = FontLarge, displayMedium = FontMedium, displaySmall = FontSmall, @@ -207,6 +62,6 @@ val Typography = TypographyScheme( captionSmall = CaptionSmall, ) -val LocalTypography = staticCompositionLocalOf { - Typography +internal val LocalTypography = staticCompositionLocalOf { + TypographyTheme } diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/BorderRadiusToken.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/BorderRadiusToken.kt new file mode 100644 index 0000000..1e1a798 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/BorderRadiusToken.kt @@ -0,0 +1,28 @@ +package dev.love.winter.designsystem.tokens + +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.ui.unit.dp + +/** + * Border radius tokens + * + * Border radius tokens are applied to elements with rounded corners, + * such as buttons, cards, input fields, and containers, to soften their edges + * and create a more pleasing appearance. + * + * Usage guidelines: + * - Extra Small: Very subtle rounded corners + * - Small: Smallest elements or nested components + * - Medium: Most components, small-to-medium components and containers + * - Large: Medium-to-large components and containers + * - Extra Large: Biggest elements, especially on tablet screens + * - Pill: Components that are completely rounded on their sides + */ + +internal val BorderRadiusExtraSmall = RoundedCornerShape(2.dp) +internal val BorderRadiusSmall = RoundedCornerShape(4.dp) +internal val BorderRadiusMedium = RoundedCornerShape(8.dp) +internal val BorderRadiusLarge = RoundedCornerShape(16.dp) +internal val BorderRadiusExtraLarge = RoundedCornerShape(24.dp) +internal val BorderRadiusPill = CircleShape diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/ColorToken.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/ColorToken.kt new file mode 100644 index 0000000..7c58bd9 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/ColorToken.kt @@ -0,0 +1,275 @@ +package dev.love.winter.designsystem.tokens + +import androidx.compose.ui.graphics.Color + +// Brand - Primary +internal val Primary50 = Color(0xFFF1F1FF) +internal val Primary100 = Color(0xFFDBDFFF) +internal val Primary200 = Color(0xFFC1C8FF) +internal val Primary300 = Color(0xFF9397FF) +internal val Primary400 = Color(0xFF7278FF) +internal val Primary500 = Color(0xFF5653FF) +internal val Primary600 = Color(0xFF4745E4) +internal val Primary700 = Color(0xFF3B39AF) +internal val Primary800 = Color(0xFF2B2A85) +internal val Primary900 = Color(0xFF131243) + +// Blue (Use when brand color is no longer blue) +internal val Blue50 = Color(0xFFF1F1FF) +internal val Blue100 = Color(0xFFDBDFFF) +internal val Blue200 = Color(0xFFC1C8FF) +internal val Blue300 = Color(0xFF9397FF) +internal val Blue400 = Color(0xFF7278FF) +internal val Blue500 = Color(0xFF5653FF) +internal val Blue600 = Color(0xFF4745E4) +internal val Blue700 = Color(0xFF3B39AF) +internal val Blue800 = Color(0xFF2B2A85) +internal val Blue900 = Color(0xFF131243) + +// Neutral - Grey +internal val Grey50 = Color(0xFFFDFDFD) +internal val Grey100 = Color(0xFFF4F4F5) +internal val Grey200 = Color(0xFFE7E7EA) +internal val Grey300 = Color(0xFFD9D9DC) +internal val Grey400 = Color(0xFFBFC0C9) +internal val Grey500 = Color(0xFF8D8F9B) +internal val Grey600 = Color(0xFF60626C) +internal val Grey700 = Color(0xFF484951) +internal val Grey800 = Color(0xFF313237) +internal val Grey900 = Color(0xFF18181B) + +// Semantic - Green +internal val Green50 = Color(0xFFECFAF3) +internal val Green100 = Color(0xFFC3EEDB) +internal val Green200 = Color(0xFFA5E6CA) +internal val Green300 = Color(0xFF7CDAB1) +internal val Green400 = Color(0xFF63D3A2) +internal val Green500 = Color(0xFF3CC88B) +internal val Green600 = Color(0xFF37B67E) +internal val Green700 = Color(0xFF247E57) +internal val Green800 = Color(0xFF115B3A) +internal val Green900 = Color(0xFF0F3122) + +// Semantic - Yellow +internal val Yellow50 = Color(0xFFFFF7E9) +internal val Yellow100 = Color(0xFFFFEAC7) +internal val Yellow200 = Color(0xFFFFDA9A) +internal val Yellow300 = Color(0xFFFFCD78) +internal val Yellow400 = Color(0xFFFFBD49) +internal val Yellow500 = Color(0xFFFFAF24) +internal val Yellow600 = Color(0xFFF2A522) +internal val Yellow700 = Color(0xFFC7881A) +internal val Yellow800 = Color(0xFF825911) +internal val Yellow900 = Color(0xFF4A340E) + +// Semantic - Red +internal val Red50 = Color(0xFFFCEBEB) +internal val Red100 = Color(0xFFFFD7D7) +internal val Red200 = Color(0xFFF2A1A1) +internal val Red300 = Color(0xFFEC7676) +internal val Red400 = Color(0xFFE85B5B) +internal val Red500 = Color(0xFFE23232) +internal val Red600 = Color(0xFFCE2E2E) +internal val Red700 = Color(0xFFA02424) +internal val Red800 = Color(0xFF6C1A1A) +internal val Red900 = Color(0xFF401111) + +/** + * Component Token - Background (Light Theme) + */ +internal val BackgroundLight = Grey50 +internal val BackgroundContainerLight = Grey100 +internal val BackgroundObjectLight = Grey200 +internal val BackgroundModalLight = Grey50 +internal val BackgroundBrandLight = Primary500 +internal val BackgroundBrandSubtleLight = Primary50 +internal val BackgroundPositiveLight = Green50 +internal val BackgroundWarningLight = Yellow50 +internal val BackgroundNegativeLight = Red50 +internal val BackgroundContrastLight = Grey900 +internal val BackgroundDisabledLight = Grey100 +internal val BackgroundOverlayLight = Grey900.copy(alpha = 0.5f) + +/** + * Component Token - Background (Dark Theme) + */ +internal val BackgroundDark = Grey900 +internal val BackgroundContainerDark = Grey800 +internal val BackgroundObjectDark = Grey700 +internal val BackgroundModalDark = Grey800 +internal val BackgroundBrandDark = Primary500 +internal val BackgroundBrandSubtleDark = Primary900 +internal val BackgroundPositiveDark = Green900 +internal val BackgroundWarningDark = Yellow900 +internal val BackgroundNegativeDark = Red900 +internal val BackgroundContrastDark = Grey50 +internal val BackgroundDisabledDark = Grey800 +internal val BackgroundOverlayDark = Grey900.copy(alpha = 0.7f) + +/** + * Component Token - Stroke (Light Theme) + */ +internal val StrokeNeutralSubtleLight = Grey100 +internal val StrokeNeutralLight = Grey200 +internal val StrokeNeutralStrongLight = Grey300 +internal val StrokeBrandLight = Primary500 +internal val StrokePositiveLight = Green500 +internal val StrokeWarningLight = Yellow500 +internal val StrokeNegativeLight = Red500 + +/** + * Component Token - Stroke (Dark Theme) + */ +internal val StrokeNeutralSubtleDark = Grey800 +internal val StrokeNeutralDark = Grey700 +internal val StrokeNeutralStrongDark = Grey600 +internal val StrokeBrandDark = Primary600 +internal val StrokePositiveDark = Green600 +internal val StrokeWarningDark = Yellow600 +internal val StrokeNegativeDark = Red600 + +/** + * Component Token - Text (Light Theme) + */ +internal val TextTitleLight = Grey900 +internal val TextSubtitleLight = Grey700 +internal val TextBodyLight = Grey800 +internal val TextCaptionLight = Grey600 +internal val TextPlaceholderLight = Grey500 +internal val TextDisabledLight = Grey400 +internal val TextOnColorDarkLight = Grey50 +internal val TextOnColorLightLight = Grey900 +internal val TextOnContrastLight = Grey50 +internal val TextLinkLight = Primary600 +internal val TextBrandLight = Primary500 +internal val TextPositiveLight = Green200 +internal val TextWarningLight = Yellow700 +internal val TextNegativeLight = Red600 + +/** + * Component Token - Text (Dark Theme) + */ +internal val TextTitleDark = Grey50 +internal val TextSubtitleDark = Grey200 +internal val TextBodyDark = Grey100 +internal val TextCaptionDark = Grey300 +internal val TextPlaceholderDark = Grey500 +internal val TextDisabledDark = Grey600 +internal val TextOnColorDarkDark = Grey50 +internal val TextOnColorLightDark = Grey900 +internal val TextOnContrastDark = Grey900 +internal val TextLinkDark = Primary300 +internal val TextBrandDark = Primary500 +internal val TextPositiveDark = Green700 +internal val TextWarningDark = Yellow200 +internal val TextNegativeDark = Red200 + +/** + * Component Token - Icon (Light Theme) + */ +internal val IconNeutralSubtleLight = Grey500 +internal val IconNeutralLight = Grey600 +internal val IconNeutralStrongLight = Grey900 +internal val IconBrandLight = Primary500 +internal val IconPositiveLight = Green600 +internal val IconWarningLight = Yellow600 +internal val IconNegativeLight = Red600 +internal val IconOnColorDarkLight = Grey50 +internal val IconOnColorLightLight = Grey900 +internal val IconOnContrastLight = Grey50 +internal val IconDisabledLight = Grey400 + +/** + * Component Token - Icon (Dark Theme) + */ +internal val IconNeutralSubtleDark = Grey500 +internal val IconNeutralDark = Grey300 +internal val IconNeutralStrongDark = Grey300 +internal val IconBrandDark = Primary500 +internal val IconPositiveDark = Green600 +internal val IconWarningDark = Yellow500 +internal val IconNegativeDark = Red500 +internal val IconOnColorDarkDark = Grey50 +internal val IconOnColorLightDark = Grey900 +internal val IconOnContrastDark = Grey900 +internal val IconDisabledDark = Grey600 + +/** + * Component Token - Button (Light Theme) + */ +internal val ButtonPrimaryDefaultLight = Grey900 +internal val ButtonPrimaryActiveLight = Grey800 +internal val ButtonPrimaryDisabledLight = Grey100 +internal val ButtonSecondaryDefaultLight = Grey600 +internal val ButtonSecondaryActiveLight = Grey700 +internal val ButtonSecondaryDisabledLight = Grey800 +internal val ButtonTertiaryDefaultLight = Grey900 +internal val ButtonTertiaryActiveLight = Grey700 +internal val ButtonTertiaryDisabledLight = Grey400 +internal val ButtonBrandDefaultLight = Primary500 +internal val ButtonBrandActiveLight = Primary600 +internal val ButtonBrandDisabledLight = Grey100 +internal val ButtonCriticalDefaultLight = Red600 +internal val ButtonCriticalActiveLight = Red700 +internal val ButtonCriticalDisabledLight = Grey100 + +/** + * Component Token - Button (Dark Theme) + */ +internal val ButtonPrimaryDefaultDark = Grey50 +internal val ButtonPrimaryActiveDark = Grey200 +internal val ButtonPrimaryDisabledDark = Grey800 +internal val ButtonSecondaryDefaultDark = Grey300 +internal val ButtonSecondaryActiveDark = Grey400 +internal val ButtonSecondaryDisabledDark = Grey100 +internal val ButtonTertiaryDefaultDark = Grey50 +internal val ButtonTertiaryActiveDark = Grey300 +internal val ButtonTertiaryDisabledDark = Grey600 +internal val ButtonBrandDefaultDark = Primary500 +internal val ButtonBrandActiveDark = Primary600 +internal val ButtonBrandDisabledDark = Grey800 +internal val ButtonCriticalDefaultDark = Red600 +internal val ButtonCriticalActiveDark = Red700 +internal val ButtonCriticalDisabledDark = Grey800 + +/** + * Component Token - Input (Light Theme) + */ +internal val InputDefaultLight = Grey300 +internal val InputActiveLight = Grey300 +internal val InputActiveCursorLight = Primary500 +internal val InputSelectedLight = Grey900 +internal val InputPositiveLight = Green500 +internal val InputNegativeLight = Red500 +internal val InputDisabledLight = Grey300 + +/** + * Component Token - Input (Dark Theme) + */ +internal val InputDefaultDark = Grey700 +internal val InputActiveDark = Primary500 +internal val InputActiveCursorDark = Primary200 +internal val InputSelectedDark = Grey50 +internal val InputPositiveDark = Green300 +internal val InputNegativeDark = Red300 +internal val InputDisabledDark = Grey700 + +/** + * Component Token - Tag (Light Theme) + */ +internal val TagNeutralLight = Grey200 +internal val TagBrandStrongLight = Primary500 +internal val TagBrandSubtleLight = Primary100 +internal val TagPositiveLight = Green100 +internal val TagWarningLight = Yellow100 +internal val TagNegativeLight = Red100 + +/** + * Component Token - Tag (Dark Theme) + */ +internal val TagNeutralDark = Grey700 +internal val TagBrandStrongDark = Primary600 +internal val TagBrandSubtleDark = Primary100 +internal val TagPositiveDark = Green100 +internal val TagWarningDark = Yellow100 +internal val TagNegativeDark = Red100 diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/IconToken.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/IconToken.kt new file mode 100644 index 0000000..d9a1f47 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/IconToken.kt @@ -0,0 +1,119 @@ +package dev.love.winter.designsystem.tokens + +import androidx.annotation.DrawableRes +import androidx.compose.runtime.Immutable + +/** + * Icon tokens + * + * Icons are graphic assets that improve usability by providing extra meaning + * to actions and components, making them more visually appealing and easier to understand. + * + * Guidelines: + * - Size: 24px base + * - Stroke: 1.5px + * - Use Icon grid for consistency + */ + +@Immutable +data class IconResource( + @param:DrawableRes val filled: Int, + @param:DrawableRes val outlined: Int, +) + +@Immutable +data class GlobalIcon( + val home: IconResource, + val settings: IconResource, + val profile: IconResource, + val highlights: IconResource, + val notification: IconResource, + val search: IconResource, +) + +@Immutable +data class NavigationIcon( + val arrowUp: IconResource, + val arrowDown: IconResource, + val arrowLeft: IconResource, + val arrowRight: IconResource, + val arrowUpRight: IconResource, + val chevronUp: IconResource, + val chevronDown: IconResource, + val chevronLeft: IconResource, + val chevronRight: IconResource, + val close: IconResource, + val filter: IconResource, + val sort: IconResource, + val logout: IconResource, + val menu: IconResource, + val menuHamburger: IconResource, + val more: IconResource, + val link: IconResource, +) + +@Immutable +data class InputIcon( + val edit: IconResource, + val delete: IconResource, + val plus: IconResource, + val minus: IconResource, + val check: IconResource, + val eye: IconResource, + val eyeOff: IconResource, + val heart: IconResource, + val star: IconResource, + val bookmark: IconResource, + val download: IconResource, + val upload: IconResource, +) + +@Immutable +data class DateTimeIcon( + val calendar: IconResource, + val calendarDays: IconResource, + val clock: IconResource, +) + +@Immutable +data class MessageIcon( + val send: IconResource, + val chat: IconResource, + val mail: IconResource, + val archive: IconResource, + val camera: IconResource, + val paperclip: IconResource, + val microphone: IconResource, +) + +@Immutable +data class PurchaseIcon( + val bag: IconResource, + val cart: IconResource, + val tag: IconResource, + val creditCard: IconResource, + val wallet: IconResource, +) + +@Immutable +data class LocationIcon( + val map: IconResource, + val mapPin: IconResource, + val navigation: IconResource, + val globe: IconResource, +) + +@Immutable +data class NotificationIcon( + val info: IconResource, + val success: IconResource, + val warning: IconResource, + val error: IconResource, +) + +@Immutable +data class LogoIcon( + val google: IconResource, + val facebook: IconResource, + val apple: IconResource, +) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/SpacingToken.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/SpacingToken.kt new file mode 100644 index 0000000..94933bc --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/SpacingToken.kt @@ -0,0 +1,23 @@ +package dev.love.winter.designsystem.tokens + +import androidx.compose.ui.unit.dp + +/** + * Spacing tokens + * + * Spacing tokens guarantee consistent spacing and alignment between elements + * while providing better readability, clarity, and balance. + * + * Usage guidelines: + * - For related items, use smaller spacing values + * - For unrelated items, use larger spacing values + * - When stacking components, use the same spacing between all elements in the group + */ + +internal val SpacingExtraExtraSmall = 4.dp +internal val SpacingExtraSmall = 8.dp +internal val SpacingSmall = 16.dp +internal val SpacingMedium = 24.dp +internal val SpacingLarge = 32.dp +internal val SpacingExtraLarge = 40.dp +internal val SpacingExtraExtraLarge = 48.dp diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/TypographyToken.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/TypographyToken.kt new file mode 100644 index 0000000..10a0d54 --- /dev/null +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/tokens/TypographyToken.kt @@ -0,0 +1,161 @@ +package dev.love.winter.designsystem.tokens + +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +/** + * Typography tokens + * + * Use the display font style for large headings or prominent text that requires emphasis. + * Display is ideal for grabbing the user's attention and making a bold statement. + * Avoid using this style for long texts. + */ + +internal val FontLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 28.sp, + lineHeight = 34.sp, +) + +internal val FontMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 24.sp, + lineHeight = 30.sp, +) + +internal val FontSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 18.sp, + lineHeight = 24.sp, +) + +/** + * Title tokens + * + * Use the title font style when you need a clear visual hierarchy without overwhelming the layout. + * You can apply this style in short texts that need to stand out when compared to body text, + * like section titles, card titles, page titles, etc. + */ +internal val TitleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 22.sp, +) + +internal val TitleMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 18.sp, +) + +internal val TitleSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp, +) + +/** + * Body tokens + * + * The body font style is ideal for regular text content, such as paragraphs, or descriptions. + * The body styles are suitable both for long and short text, where readability and legibility are essential. + */ +internal val BodyExtraLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 18.sp, + lineHeight = 24.sp, +) + +internal val BodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 22.sp, +) + +internal val BodyMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 14.sp, + lineHeight = 18.sp, +) + +internal val BodySmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 12.sp, + lineHeight = 16.sp, +) + +internal val BodyExtraSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 10.sp, + lineHeight = 14.sp, +) + +/** + * Action tokens + * + * The action font style is suitable for text elements that represent interactive or actionable items, + * such as buttons, input, and links. Use it to distinguish interactive elements from regular text. + */ +internal val ActionLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 16.sp, + lineHeight = 20.sp, +) + +internal val ActionMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 18.sp, +) + +internal val ActionSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.SemiBold, + fontSize = 12.sp, + lineHeight = 16.sp, +) + +/** + * Caption tokens + * + * The caption font style is used for supporting text that provides context and complements visual elements, + * like icons, images, tags, etc. Avoid using this style in long texts. + */ +internal val CaptionLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 14.sp, + lineHeight = 18.sp, + letterSpacing = 0.56.sp, +) + +internal val CaptionMedium = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 12.sp, + lineHeight = 16.sp, + letterSpacing = 0.48.sp, +) + +internal val CaptionSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 10.sp, + lineHeight = 14.sp, + letterSpacing = 0.4.sp, +) From baea700609017f8366141bfa10b30eebfd33e9f3 Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sun, 26 Oct 2025 12:01:55 +0900 Subject: [PATCH 28/29] Remove system bars appearance control, already controlled in enableEdgeToEdge() --- .../dev/love/winter/designsystem/theme/Theme.kt | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt index ad99259..d269e08 100644 --- a/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt +++ b/core-android/design-system/src/main/java/dev/love/winter/designsystem/theme/Theme.kt @@ -1,17 +1,11 @@ package dev.love.winter.designsystem.theme -import android.app.Activity -import android.view.Window import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.SideEffect import androidx.compose.runtime.compositionLocalOf -import androidx.compose.ui.platform.LocalInspectionMode -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat internal val LocalDarkTheme = compositionLocalOf { false } @@ -20,14 +14,6 @@ fun WinterTheme( darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit, ) { - if (!LocalInspectionMode.current) { - val view = LocalView.current - SideEffect { - val window: Window = (view.context as Activity).window - WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme - WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = !darkTheme - } - } val designSystemColorTheme: Colors = if (darkTheme) { DarkColorTheme } else { From d1391dfa9c12727a4aff9624053faa8087bc0f9d Mon Sep 17 00:00:00 2001 From: winter-love-dev Date: Sun, 26 Oct 2025 12:07:10 +0900 Subject: [PATCH 29/29] Add design-system document --- core-android/design-system/README.md | 76 ++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 core-android/design-system/README.md diff --git a/core-android/design-system/README.md b/core-android/design-system/README.md new file mode 100644 index 0000000..a7620d7 --- /dev/null +++ b/core-android/design-system/README.md @@ -0,0 +1,76 @@ +# Design System + +## Overview + +This module provides the design system foundation for the LanguageStudy application, implementing a scalable and maintainable design token system. +It establishes a consistent visual language across the app through systematically organized design tokens and reusable components. + +## Responsibilities + +- Define design tokens (colors, typography, spacing, etc.) as code following industry best practices +- Compose and maintain app themes with support for light and dark modes +- Implement and maintain UI components built on top of design tokens +- Provide foundation utilities for common design system needs + +# Design Tokens + +Design tokens are essential in creating and maintaining a consistent design language in our projects. +They contain the values you'll use to construct Ul elements, such as colors, typography, spacing, border radius, and icons. + +## Primitive tokens + +> name-variant +> primary-900 + +The primitive tokens have a simple name structure with two levels: name and variation. + +## Component tokens + +> type-category-variant +> color-background-band-subtle-... + +The component tokens are the ones applied in the interface and always inherit a primitive token. +The names of component tokens explain how they are used, +so they are composed of three levels: type, category, and variation. +It's possible to have more than one variation in the same token, like "brand-subtle". + +## Tokens + +- Colors +- Typography +- Spacing +- BorderRadius +- Icon + +# Module Structure + +``` +design-system/ +├── tokens/ # Design token definitions (primitive & component values) +│ ├── ColorToken.kt +│ ├── TypographyToken.kt +│ └── IconToken.kt ... +│ +├── theme/ # Theme aggregation (composing tokens into themes) +│ ├── Theme.kt +│ ├── Colors.kt +│ ├── Typography.kt +│ └── Icon.kt ... +│ +├── foundation/ # Foundation utilities +│ └── ModifierExtensions, Ripple +│ +└── component/ # UI components + ├── Button.kt + └── TextField.kt +``` + +## Package Descriptions + +- **tokens**: Raw design token values (colors, typography scales, spacing units) +- **theme**: Aggregated theme objects accessible via `WinterTheme` +- **foundation**: Core utilities and helpers for the design system +- **component**: Reusable UI components built with design tokens + +# Usage +