feat: add teal arctique theme with full M3 color scheme, typography, shapes, spacing tokens
- Complete light/dark color schemes (all M3 slots) - Typography scale (headlineLarge through labelMedium) - Shape tokens (small 8dp, medium 12dp, large 16dp) - Dimens spacing object (xs through xxl) - Add material-icons-extended dependency
This commit is contained in:
@@ -37,6 +37,7 @@ kotlin {
|
||||
implementation(compose.runtime)
|
||||
implementation(compose.foundation)
|
||||
implementation(compose.material3)
|
||||
implementation(compose.materialIconsExtended)
|
||||
implementation(compose.components.uiToolingPreview)
|
||||
implementation(libs.ktor.client.core)
|
||||
implementation(libs.ktor.client.content.negotiation)
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// MyIce Kotlin Multiplatform — schedule/convocation viewer
|
||||
// Copyright (C) 2026 parano.ch
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
package ch.parano.myicek.ui.theme
|
||||
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
||||
object Dimens {
|
||||
val xs = 4.dp
|
||||
val sm = 8.dp
|
||||
val md = 12.dp
|
||||
val lg = 16.dp
|
||||
val xl = 24.dp
|
||||
val xxl = 32.dp
|
||||
}
|
||||
@@ -18,28 +18,83 @@
|
||||
package ch.parano.myicek.ui.theme
|
||||
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Shapes
|
||||
import androidx.compose.material3.Typography
|
||||
import androidx.compose.material3.darkColorScheme
|
||||
import androidx.compose.material3.lightColorScheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
||||
private val Indigo = Color(0xFF3F51B5)
|
||||
private val IndigoLight = Color(0xFF7986CB)
|
||||
private val IndigoDark = Color(0xFF303F9F)
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
|
||||
private val LightColors = lightColorScheme(
|
||||
primary = Indigo,
|
||||
onPrimary = Color.White,
|
||||
primaryContainer = IndigoDark,
|
||||
secondary = IndigoLight,
|
||||
primary = Color(0xFF0D9488),
|
||||
onPrimary = Color(0xFFFFFFFF),
|
||||
primaryContainer = Color(0xFF99F6E4),
|
||||
onPrimaryContainer = Color(0xFF134E4A),
|
||||
secondary = Color(0xFF475569),
|
||||
onSecondary = Color(0xFFFFFFFF),
|
||||
secondaryContainer = Color(0xFFE2E8F0),
|
||||
onSecondaryContainer = Color(0xFF1E293B),
|
||||
tertiary = Color(0xFF0EA5E9),
|
||||
onTertiary = Color(0xFFFFFFFF),
|
||||
tertiaryContainer = Color(0xFFE0F2FE),
|
||||
onTertiaryContainer = Color(0xFF075985),
|
||||
error = Color(0xFFDC2626),
|
||||
onError = Color(0xFFFFFFFF),
|
||||
errorContainer = Color(0xFFFEE2E2),
|
||||
onErrorContainer = Color(0xFF7F1D1D),
|
||||
background = Color(0xFFFAFAFA),
|
||||
onBackground = Color(0xFF1C1917),
|
||||
surface = Color(0xFFFFFFFF),
|
||||
onSurface = Color(0xFF1C1917),
|
||||
surfaceVariant = Color(0xFFF1F5F9),
|
||||
onSurfaceVariant = Color(0xFF475569),
|
||||
outline = Color(0xFFCBD5E1),
|
||||
)
|
||||
|
||||
private val DarkColors = darkColorScheme(
|
||||
primary = IndigoLight,
|
||||
onPrimary = Color.Black,
|
||||
primaryContainer = Indigo,
|
||||
secondary = Indigo,
|
||||
primary = Color(0xFF2DD4BF),
|
||||
onPrimary = Color(0xFF003833),
|
||||
primaryContainer = Color(0xFF0D9488),
|
||||
onPrimaryContainer = Color(0xFF99F6E4),
|
||||
secondary = Color(0xFF94A3B8),
|
||||
onSecondary = Color(0xFF1E293B),
|
||||
secondaryContainer = Color(0xFF334155),
|
||||
onSecondaryContainer = Color(0xFFE2E8F0),
|
||||
tertiary = Color(0xFF0EA5E9),
|
||||
onTertiary = Color(0xFF003547),
|
||||
background = Color(0xFF0F172A),
|
||||
onBackground = Color(0xFFF1F5F9),
|
||||
surface = Color(0xFF1E293B),
|
||||
onSurface = Color(0xFFF1F5F9),
|
||||
surfaceVariant = Color(0xFF334155),
|
||||
onSurfaceVariant = Color(0xFF94A3B8),
|
||||
outline = Color(0xFF475569),
|
||||
error = Color(0xFFF87171),
|
||||
onError = Color(0xFF7F1D1D),
|
||||
errorContainer = Color(0xFF7F1D1D),
|
||||
onErrorContainer = Color(0xFFFECACA),
|
||||
)
|
||||
|
||||
private val AppTypography = Typography(
|
||||
headlineLarge = TextStyle(fontSize = 28.sp, fontWeight = FontWeight.Bold),
|
||||
titleLarge = TextStyle(fontSize = 22.sp, fontWeight = FontWeight.SemiBold),
|
||||
titleMedium = TextStyle(fontSize = 16.sp, fontWeight = FontWeight.SemiBold),
|
||||
bodyLarge = TextStyle(fontSize = 15.sp, fontWeight = FontWeight.Normal),
|
||||
bodyMedium = TextStyle(fontSize = 14.sp, fontWeight = FontWeight.Normal),
|
||||
bodySmall = TextStyle(fontSize = 13.sp, fontWeight = FontWeight.Normal),
|
||||
labelMedium = TextStyle(fontSize = 12.sp, fontWeight = FontWeight.Medium),
|
||||
)
|
||||
|
||||
private val AppShapes = Shapes(
|
||||
small = RoundedCornerShape(8.dp),
|
||||
medium = RoundedCornerShape(12.dp),
|
||||
large = RoundedCornerShape(16.dp),
|
||||
)
|
||||
|
||||
@Composable
|
||||
@@ -49,6 +104,8 @@ fun MyIceTheme(
|
||||
) {
|
||||
MaterialTheme(
|
||||
colorScheme = if (darkTheme) DarkColors else LightColors,
|
||||
typography = AppTypography,
|
||||
shapes = AppShapes,
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user