diff --git a/composeApp/src/commonMain/kotlin/net/newpipe/app/App.kt b/composeApp/src/commonMain/kotlin/net/newpipe/app/App.kt index b6cfe27b1..dd5d556c7 100644 --- a/composeApp/src/commonMain/kotlin/net/newpipe/app/App.kt +++ b/composeApp/src/commonMain/kotlin/net/newpipe/app/App.kt @@ -5,14 +5,14 @@ package net.newpipe.app -import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import net.newpipe.app.theme.AppTheme import org.jetbrains.compose.ui.tooling.preview.Preview @Composable @Preview fun App() { - MaterialTheme { + AppTheme { } } diff --git a/composeApp/src/commonMain/kotlin/net/newpipe/app/theme/Color.kt b/composeApp/src/commonMain/kotlin/net/newpipe/app/theme/Color.kt new file mode 100644 index 000000000..5bb59ee2e --- /dev/null +++ b/composeApp/src/commonMain/kotlin/net/newpipe/app/theme/Color.kt @@ -0,0 +1,81 @@ +/* + * SPDX-FileCopyrightText: 2024 NewPipe contributors + * SPDX-FileCopyrightText: 2026 NewPipe e.V. + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package net.newpipe.app.theme + +import androidx.compose.ui.graphics.Color + +val primaryLight = Color(0xFF904A45) +val onPrimaryLight = Color(0xFFFFFFFF) +val primaryContainerLight = Color(0xFFFFDAD6) +val onPrimaryContainerLight = Color(0xFF3B0908) +val secondaryLight = Color(0xFF775653) +val onSecondaryLight = Color(0xFFFFFFFF) +val secondaryContainerLight = Color(0xFFFFDAD6) +val onSecondaryContainerLight = Color(0xFF2C1513) +val tertiaryLight = Color(0xFF725B2E) +val onTertiaryLight = Color(0xFFFFFFFF) +val tertiaryContainerLight = Color(0xFFFEDEA6) +val onTertiaryContainerLight = Color(0xFF261900) +val errorLight = Color(0xFFBA1A1A) +val onErrorLight = Color(0xFFFFFFFF) +val errorContainerLight = Color(0xFFFFDAD6) +val onErrorContainerLight = Color(0xFF410002) +val backgroundLight = Color(0xFFFFF8F7) +val onBackgroundLight = Color(0xFF231918) +val surfaceLight = Color(0xFFFFF8F7) +val onSurfaceLight = Color(0xFF231918) +val surfaceVariantLight = Color(0xFFF5DDDB) +val onSurfaceVariantLight = Color(0xFF534342) +val outlineLight = Color(0xFF857371) +val outlineVariantLight = Color(0xFFD8C2BF) +val scrimLight = Color(0xFF000000) +val inverseSurfaceLight = Color(0xFF392E2D) +val inverseOnSurfaceLight = Color(0xFFFFEDEB) +val inversePrimaryLight = Color(0xFFFFB3AC) +val surfaceDimLight = Color(0xFFE8D6D4) +val surfaceBrightLight = Color(0xFFFFF8F7) +val surfaceContainerLowestLight = Color(0xFFFFFFFF) +val surfaceContainerLowLight = Color(0xFFFFF0EF) +val surfaceContainerLight = Color(0xFFFCEAE8) +val surfaceContainerHighLight = Color(0xFFF6E4E2) +val surfaceContainerHighestLight = Color(0xFFF1DEDC) + +val primaryDark = Color(0xFFFFB3AC) +val onPrimaryDark = Color(0xFF571E1B) +val primaryContainerDark = Color(0xFF73332F) +val onPrimaryContainerDark = Color(0xFFFFDAD6) +val secondaryDark = Color(0xFFE7BDB8) +val onSecondaryDark = Color(0xFF442927) +val secondaryContainerDark = Color(0xFF5D3F3C) +val onSecondaryContainerDark = Color(0xFFFFDAD6) +val tertiaryDark = Color(0xFFE1C38C) +val onTertiaryDark = Color(0xFF402D04) +val tertiaryContainerDark = Color(0xFF584419) +val onTertiaryContainerDark = Color(0xFFFEDEA6) +val errorDark = Color(0xFFFFB4AB) +val onErrorDark = Color(0xFF690005) +val errorContainerDark = Color(0xFF93000A) +val onErrorContainerDark = Color(0xFFFFDAD6) +val backgroundDark = Color(0xFF1A1110) +val onBackgroundDark = Color(0xFFF1DEDC) +val surfaceDark = Color(0xFF1A1110) +val onSurfaceDark = Color(0xFFF1DEDC) +val surfaceVariantDark = Color(0xFF534342) +val onSurfaceVariantDark = Color(0xFFD8C2BF) +val outlineDark = Color(0xFFA08C8A) +val outlineVariantDark = Color(0xFF534342) +val scrimDark = Color(0xFF000000) +val inverseSurfaceDark = Color(0xFFF1DEDC) +val inverseOnSurfaceDark = Color(0xFF392E2D) +val inversePrimaryDark = Color(0xFF904A45) +val surfaceDimDark = Color(0xFF1A1110) +val surfaceBrightDark = Color(0xFF423735) +val surfaceContainerLowestDark = Color(0xFF140C0B) +val surfaceContainerLowDark = Color(0xFF231918) +val surfaceContainerDark = Color(0xFF271D1C) +val surfaceContainerHighDark = Color(0xFF322827) +val surfaceContainerHighestDark = Color(0xFF3D3231) diff --git a/composeApp/src/commonMain/kotlin/net/newpipe/app/theme/Theme.kt b/composeApp/src/commonMain/kotlin/net/newpipe/app/theme/Theme.kt new file mode 100644 index 000000000..2d4356bd6 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/net/newpipe/app/theme/Theme.kt @@ -0,0 +1,100 @@ +/* + * SPDX-FileCopyrightText: 2024 NewPipe contributors + * SPDX-FileCopyrightText: 2026 NewPipe e.V. + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package net.newpipe.app.theme + +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 + +private val lightScheme = lightColorScheme( + primary = primaryLight, + onPrimary = onPrimaryLight, + primaryContainer = primaryContainerLight, + onPrimaryContainer = onPrimaryContainerLight, + secondary = secondaryLight, + onSecondary = onSecondaryLight, + secondaryContainer = secondaryContainerLight, + onSecondaryContainer = onSecondaryContainerLight, + tertiary = tertiaryLight, + onTertiary = onTertiaryLight, + tertiaryContainer = tertiaryContainerLight, + onTertiaryContainer = onTertiaryContainerLight, + error = errorLight, + onError = onErrorLight, + errorContainer = errorContainerLight, + onErrorContainer = onErrorContainerLight, + background = backgroundLight, + onBackground = onBackgroundLight, + surface = surfaceLight, + onSurface = onSurfaceLight, + surfaceVariant = surfaceVariantLight, + onSurfaceVariant = onSurfaceVariantLight, + outline = outlineLight, + outlineVariant = outlineVariantLight, + scrim = scrimLight, + inverseSurface = inverseSurfaceLight, + inverseOnSurface = inverseOnSurfaceLight, + inversePrimary = inversePrimaryLight, + surfaceDim = surfaceDimLight, + surfaceBright = surfaceBrightLight, + surfaceContainerLowest = surfaceContainerLowestLight, + surfaceContainerLow = surfaceContainerLowLight, + surfaceContainer = surfaceContainerLight, + surfaceContainerHigh = surfaceContainerHighLight, + surfaceContainerHighest = surfaceContainerHighestLight, +) + +private val darkScheme = darkColorScheme( + primary = primaryDark, + onPrimary = onPrimaryDark, + primaryContainer = primaryContainerDark, + onPrimaryContainer = onPrimaryContainerDark, + secondary = secondaryDark, + onSecondary = onSecondaryDark, + secondaryContainer = secondaryContainerDark, + onSecondaryContainer = onSecondaryContainerDark, + tertiary = tertiaryDark, + onTertiary = onTertiaryDark, + tertiaryContainer = tertiaryContainerDark, + onTertiaryContainer = onTertiaryContainerDark, + error = errorDark, + onError = onErrorDark, + errorContainer = errorContainerDark, + onErrorContainer = onErrorContainerDark, + background = backgroundDark, + onBackground = onBackgroundDark, + surface = surfaceDark, + onSurface = onSurfaceDark, + surfaceVariant = surfaceVariantDark, + onSurfaceVariant = onSurfaceVariantDark, + outline = outlineDark, + outlineVariant = outlineVariantDark, + scrim = scrimDark, + inverseSurface = inverseSurfaceDark, + inverseOnSurface = inverseOnSurfaceDark, + inversePrimary = inversePrimaryDark, + surfaceDim = surfaceDimDark, + surfaceBright = surfaceBrightDark, + surfaceContainerLowest = surfaceContainerLowestDark, + surfaceContainerLow = surfaceContainerLowDark, + surfaceContainer = surfaceContainerDark, + surfaceContainerHigh = surfaceContainerHighDark, + surfaceContainerHighest = surfaceContainerHighestDark, +) + +@Composable +fun AppTheme(useDarkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit) { + MaterialTheme( + colorScheme = when { + !useDarkTheme -> lightScheme + else -> darkScheme + }, + content = content + ) +}