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.runtime)
|
||||||
implementation(compose.foundation)
|
implementation(compose.foundation)
|
||||||
implementation(compose.material3)
|
implementation(compose.material3)
|
||||||
|
implementation(compose.materialIconsExtended)
|
||||||
implementation(compose.components.uiToolingPreview)
|
implementation(compose.components.uiToolingPreview)
|
||||||
implementation(libs.ktor.client.core)
|
implementation(libs.ktor.client.core)
|
||||||
implementation(libs.ktor.client.content.negotiation)
|
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
|
package ch.parano.myicek.ui.theme
|
||||||
|
|
||||||
import androidx.compose.foundation.isSystemInDarkTheme
|
import androidx.compose.foundation.isSystemInDarkTheme
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.material3.Shapes
|
||||||
|
import androidx.compose.material3.Typography
|
||||||
import androidx.compose.material3.darkColorScheme
|
import androidx.compose.material3.darkColorScheme
|
||||||
import androidx.compose.material3.lightColorScheme
|
import androidx.compose.material3.lightColorScheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.text.TextStyle
|
||||||
private val Indigo = Color(0xFF3F51B5)
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
private val IndigoLight = Color(0xFF7986CB)
|
import androidx.compose.ui.unit.dp
|
||||||
private val IndigoDark = Color(0xFF303F9F)
|
import androidx.compose.ui.unit.sp
|
||||||
|
|
||||||
private val LightColors = lightColorScheme(
|
private val LightColors = lightColorScheme(
|
||||||
primary = Indigo,
|
primary = Color(0xFF0D9488),
|
||||||
onPrimary = Color.White,
|
onPrimary = Color(0xFFFFFFFF),
|
||||||
primaryContainer = IndigoDark,
|
primaryContainer = Color(0xFF99F6E4),
|
||||||
secondary = IndigoLight,
|
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(
|
private val DarkColors = darkColorScheme(
|
||||||
primary = IndigoLight,
|
primary = Color(0xFF2DD4BF),
|
||||||
onPrimary = Color.Black,
|
onPrimary = Color(0xFF003833),
|
||||||
primaryContainer = Indigo,
|
primaryContainer = Color(0xFF0D9488),
|
||||||
secondary = Indigo,
|
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
|
@Composable
|
||||||
@@ -49,6 +104,8 @@ fun MyIceTheme(
|
|||||||
) {
|
) {
|
||||||
MaterialTheme(
|
MaterialTheme(
|
||||||
colorScheme = if (darkTheme) DarkColors else LightColors,
|
colorScheme = if (darkTheme) DarkColors else LightColors,
|
||||||
|
typography = AppTypography,
|
||||||
|
shapes = AppShapes,
|
||||||
content = content,
|
content = content,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user