diff --git a/composeApp/build.gradle.kts b/composeApp/build.gradle.kts index 540f0ad..4585680 100644 --- a/composeApp/build.gradle.kts +++ b/composeApp/build.gradle.kts @@ -32,6 +32,7 @@ kotlin { implementation(compose.ui) implementation(compose.components.resources) implementation(compose.components.uiToolingPreview) + implementation(libs.compose.ui.text.googlefonts) } desktopMain.dependencies { implementation(compose.desktop.currentOs) diff --git a/composeApp/src/androidMain/res/values-v23/font_certs.xml b/composeApp/src/androidMain/res/values-v23/font_certs.xml new file mode 100644 index 0000000..207b62f --- /dev/null +++ b/composeApp/src/androidMain/res/values-v23/font_certs.xml @@ -0,0 +1,32 @@ + + + + + @array/com_google_android_gms_fonts_certs_dev + @array/com_google_android_gms_fonts_certs_prod + + + + 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 + + + diff --git a/composeApp/src/commonMain/composeResources/drawable/moon.xml b/composeApp/src/commonMain/composeResources/drawable/moon.xml new file mode 100644 index 0000000..c2cc691 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/moon.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/drawable/sun.xml b/composeApp/src/commonMain/composeResources/drawable/sun.xml new file mode 100644 index 0000000..1401fae --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/sun.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/drawable/window-close.xml b/composeApp/src/commonMain/composeResources/drawable/window-close.xml new file mode 100644 index 0000000..1712a92 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/window-close.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/drawable/window-maximize.xml b/composeApp/src/commonMain/composeResources/drawable/window-maximize.xml new file mode 100644 index 0000000..10bba82 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/window-maximize.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/composeApp/src/commonMain/composeResources/drawable/window-minimize.xml b/composeApp/src/commonMain/composeResources/drawable/window-minimize.xml new file mode 100644 index 0000000..a10ec48 --- /dev/null +++ b/composeApp/src/commonMain/composeResources/drawable/window-minimize.xml @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ui/selector.kt b/composeApp/src/commonMain/kotlin/ui/selector.kt index 22267fe..e9b63b4 100644 --- a/composeApp/src/commonMain/kotlin/ui/selector.kt +++ b/composeApp/src/commonMain/kotlin/ui/selector.kt @@ -1,21 +1,93 @@ package ui +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.OutlinedCard import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawWithContent +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.nativeCanvas +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.drawText +import androidx.compose.ui.text.rememberTextMeasurer +import androidx.compose.ui.unit.TextUnit +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import domain.Animals import domain.Item import domain.ItemClass import domain.ItemClassCompanion +import org.jetbrains.compose.ui.tooling.preview.Preview +import kotlin.math.min @Composable fun > Selector( modifier: Modifier = Modifier, category: ItemClassCompanion, options: List>, - selectedItem: Item, + selectedItem: Item?, onSelectItem: (Item) -> Unit ) { - OutlinedCard(modifier = modifier) { + if (selectedItem != null) { + DrawItem(selectedItem) + } else { + OutlinedCard(modifier = modifier.aspectRatio(1f)) { + } } +} + +@Composable +fun > DrawItem(item: Item, modifier: Modifier = Modifier) { + OutlinedCard(modifier = modifier.aspectRatio(1f)) { + var textSize by remember { mutableStateOf(12.sp) } + val emoji = item.symbol + + val textMeasurer = rememberTextMeasurer() + + Canvas( + modifier = Modifier.fillMaxSize(1f), + onDraw = { + val textSize = textMeasurer.measure(text = emoji) + val fontSize = min( + size.width / textSize.size.width, + size.height / textSize.size.height + ).toSp() + + drawText( + textMeasurer = textMeasurer, + text = emoji, + style = TextStyle(fontSize = fontSize), + topLeft = Offset( + x = size.width / 2 - 100f - (textSize.size.width / 2), + y = size.height / 2 - (textSize.size.height / 2) + ) + ) + } + ) + } +} + +@Preview +@Composable +fun SelectorPreview() { + val size = 6 + val options = remember { Animals.items.shuffled().take(size) } + var selectedItem by remember { mutableStateOf?>(Item(options.random())) } +// var selectedItem by remember { mutableStateOf?>(null) } +// Selector( +// category = Animals, +// options = Animals.items.map { Item(it) }, +// selectedItem = selectedItem, +// onSelectItem = { selectedItem = it } +// ) + DrawItem(selectedItem!!) } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/ui/theme/Color.kt b/composeApp/src/commonMain/kotlin/ui/theme/Color.kt new file mode 100644 index 0000000..8f0cc20 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/ui/theme/Color.kt @@ -0,0 +1,225 @@ +package ui.theme +import androidx.compose.ui.graphics.Color + +val primaryLight = Color(0xFF6D5E0F) +val onPrimaryLight = Color(0xFFFFFFFF) +val primaryContainerLight = Color(0xFFF8E287) +val onPrimaryContainerLight = Color(0xFF221B00) +val secondaryLight = Color(0xFF665E40) +val onSecondaryLight = Color(0xFFFFFFFF) +val secondaryContainerLight = Color(0xFFEEE2BC) +val onSecondaryContainerLight = Color(0xFF211B04) +val tertiaryLight = Color(0xFF166683) +val onTertiaryLight = Color(0xFFFFFFFF) +val tertiaryContainerLight = Color(0xFFC0E8FF) +val onTertiaryContainerLight = Color(0xFF001E2B) +val errorLight = Color(0xFFBA1A1A) +val onErrorLight = Color(0xFFFFFFFF) +val errorContainerLight = Color(0xFFFFDAD6) +val onErrorContainerLight = Color(0xFF410002) +val backgroundLight = Color(0xFFFFF9EE) +val onBackgroundLight = Color(0xFF1E1B13) +val surfaceLight = Color(0xFFFFF9EE) +val onSurfaceLight = Color(0xFF1E1B13) +val surfaceVariantLight = Color(0xFFEAE2D0) +val onSurfaceVariantLight = Color(0xFF4B4739) +val outlineLight = Color(0xFF7C7767) +val outlineVariantLight = Color(0xFFCDC6B4) +val scrimLight = Color(0xFF000000) +val inverseSurfaceLight = Color(0xFF333027) +val inverseOnSurfaceLight = Color(0xFFF7F0E2) +val inversePrimaryLight = Color(0xFFDBC66E) +val surfaceDimLight = Color(0xFFE0D9CC) +val surfaceBrightLight = Color(0xFFFFF9EE) +val surfaceContainerLowestLight = Color(0xFFFFFFFF) +val surfaceContainerLowLight = Color(0xFFFAF3E5) +val surfaceContainerLight = Color(0xFFF4EDDF) +val surfaceContainerHighLight = Color(0xFFEEE8DA) +val surfaceContainerHighestLight = Color(0xFFE8E2D4) + +val primaryLightMediumContrast = Color(0xFF4F4200) +val onPrimaryLightMediumContrast = Color(0xFFFFFFFF) +val primaryContainerLightMediumContrast = Color(0xFF857425) +val onPrimaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val secondaryLightMediumContrast = Color(0xFF4A4327) +val onSecondaryLightMediumContrast = Color(0xFFFFFFFF) +val secondaryContainerLightMediumContrast = Color(0xFF7D7455) +val onSecondaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val tertiaryLightMediumContrast = Color(0xFF004960) +val onTertiaryLightMediumContrast = Color(0xFFFFFFFF) +val tertiaryContainerLightMediumContrast = Color(0xFF357C9B) +val onTertiaryContainerLightMediumContrast = Color(0xFFFFFFFF) +val errorLightMediumContrast = Color(0xFF8C0009) +val onErrorLightMediumContrast = Color(0xFFFFFFFF) +val errorContainerLightMediumContrast = Color(0xFFDA342E) +val onErrorContainerLightMediumContrast = Color(0xFFFFFFFF) +val backgroundLightMediumContrast = Color(0xFFFFF9EE) +val onBackgroundLightMediumContrast = Color(0xFF1E1B13) +val surfaceLightMediumContrast = Color(0xFFFFF9EE) +val onSurfaceLightMediumContrast = Color(0xFF1E1B13) +val surfaceVariantLightMediumContrast = Color(0xFFEAE2D0) +val onSurfaceVariantLightMediumContrast = Color(0xFF474335) +val outlineLightMediumContrast = Color(0xFF645F50) +val outlineVariantLightMediumContrast = Color(0xFF807A6B) +val scrimLightMediumContrast = Color(0xFF000000) +val inverseSurfaceLightMediumContrast = Color(0xFF333027) +val inverseOnSurfaceLightMediumContrast = Color(0xFFF7F0E2) +val inversePrimaryLightMediumContrast = Color(0xFFDBC66E) +val surfaceDimLightMediumContrast = Color(0xFFE0D9CC) +val surfaceBrightLightMediumContrast = Color(0xFFFFF9EE) +val surfaceContainerLowestLightMediumContrast = Color(0xFFFFFFFF) +val surfaceContainerLowLightMediumContrast = Color(0xFFFAF3E5) +val surfaceContainerLightMediumContrast = Color(0xFFF4EDDF) +val surfaceContainerHighLightMediumContrast = Color(0xFFEEE8DA) +val surfaceContainerHighestLightMediumContrast = Color(0xFFE8E2D4) + +val primaryLightHighContrast = Color(0xFF292200) +val onPrimaryLightHighContrast = Color(0xFFFFFFFF) +val primaryContainerLightHighContrast = Color(0xFF4F4200) +val onPrimaryContainerLightHighContrast = Color(0xFFFFFFFF) +val secondaryLightHighContrast = Color(0xFF282209) +val onSecondaryLightHighContrast = Color(0xFFFFFFFF) +val secondaryContainerLightHighContrast = Color(0xFF4A4327) +val onSecondaryContainerLightHighContrast = Color(0xFFFFFFFF) +val tertiaryLightHighContrast = Color(0xFF002634) +val onTertiaryLightHighContrast = Color(0xFFFFFFFF) +val tertiaryContainerLightHighContrast = Color(0xFF004960) +val onTertiaryContainerLightHighContrast = Color(0xFFFFFFFF) +val errorLightHighContrast = Color(0xFF4E0002) +val onErrorLightHighContrast = Color(0xFFFFFFFF) +val errorContainerLightHighContrast = Color(0xFF8C0009) +val onErrorContainerLightHighContrast = Color(0xFFFFFFFF) +val backgroundLightHighContrast = Color(0xFFFFF9EE) +val onBackgroundLightHighContrast = Color(0xFF1E1B13) +val surfaceLightHighContrast = Color(0xFFFFF9EE) +val onSurfaceLightHighContrast = Color(0xFF000000) +val surfaceVariantLightHighContrast = Color(0xFFEAE2D0) +val onSurfaceVariantLightHighContrast = Color(0xFF272418) +val outlineLightHighContrast = Color(0xFF474335) +val outlineVariantLightHighContrast = Color(0xFF474335) +val scrimLightHighContrast = Color(0xFF000000) +val inverseSurfaceLightHighContrast = Color(0xFF333027) +val inverseOnSurfaceLightHighContrast = Color(0xFFFFFFFF) +val inversePrimaryLightHighContrast = Color(0xFFFFECA2) +val surfaceDimLightHighContrast = Color(0xFFE0D9CC) +val surfaceBrightLightHighContrast = Color(0xFFFFF9EE) +val surfaceContainerLowestLightHighContrast = Color(0xFFFFFFFF) +val surfaceContainerLowLightHighContrast = Color(0xFFFAF3E5) +val surfaceContainerLightHighContrast = Color(0xFFF4EDDF) +val surfaceContainerHighLightHighContrast = Color(0xFFEEE8DA) +val surfaceContainerHighestLightHighContrast = Color(0xFFE8E2D4) + +val primaryDark = Color(0xFFDBC66E) +val onPrimaryDark = Color(0xFF3A3000) +val primaryContainerDark = Color(0xFF534600) +val onPrimaryContainerDark = Color(0xFFF8E287) +val secondaryDark = Color(0xFFD1C6A1) +val onSecondaryDark = Color(0xFF363016) +val secondaryContainerDark = Color(0xFF4E472A) +val onSecondaryContainerDark = Color(0xFFEEE2BC) +val tertiaryDark = Color(0xFF8DCFF1) +val onTertiaryDark = Color(0xFF003547) +val tertiaryContainerDark = Color(0xFF004D66) +val onTertiaryContainerDark = Color(0xFFC0E8FF) +val errorDark = Color(0xFFFFB4AB) +val onErrorDark = Color(0xFF690005) +val errorContainerDark = Color(0xFF93000A) +val onErrorContainerDark = Color(0xFFFFDAD6) +val backgroundDark = Color(0xFF15130B) +val onBackgroundDark = Color(0xFFE8E2D4) +val surfaceDark = Color(0xFF15130B) +val onSurfaceDark = Color(0xFFE8E2D4) +val surfaceVariantDark = Color(0xFF4B4739) +val onSurfaceVariantDark = Color(0xFFCDC6B4) +val outlineDark = Color(0xFF969080) +val outlineVariantDark = Color(0xFF4B4739) +val scrimDark = Color(0xFF000000) +val inverseSurfaceDark = Color(0xFFE8E2D4) +val inverseOnSurfaceDark = Color(0xFF333027) +val inversePrimaryDark = Color(0xFF6D5E0F) +val surfaceDimDark = Color(0xFF15130B) +val surfaceBrightDark = Color(0xFF3C3930) +val surfaceContainerLowestDark = Color(0xFF100E07) +val surfaceContainerLowDark = Color(0xFF1E1B13) +val surfaceContainerDark = Color(0xFF222017) +val surfaceContainerHighDark = Color(0xFF2D2A21) +val surfaceContainerHighestDark = Color(0xFF38352B) + +val primaryDarkMediumContrast = Color(0xFFE0CA72) +val onPrimaryDarkMediumContrast = Color(0xFF1C1600) +val primaryContainerDarkMediumContrast = Color(0xFFA3903F) +val onPrimaryContainerDarkMediumContrast = Color(0xFF000000) +val secondaryDarkMediumContrast = Color(0xFFD6CAA5) +val onSecondaryDarkMediumContrast = Color(0xFF1B1602) +val secondaryContainerDarkMediumContrast = Color(0xFF9A916F) +val onSecondaryContainerDarkMediumContrast = Color(0xFF000000) +val tertiaryDarkMediumContrast = Color(0xFF91D3F5) +val onTertiaryDarkMediumContrast = Color(0xFF001924) +val tertiaryContainerDarkMediumContrast = Color(0xFF5599B8) +val onTertiaryContainerDarkMediumContrast = Color(0xFF000000) +val errorDarkMediumContrast = Color(0xFFFFBAB1) +val onErrorDarkMediumContrast = Color(0xFF370001) +val errorContainerDarkMediumContrast = Color(0xFFFF5449) +val onErrorContainerDarkMediumContrast = Color(0xFF000000) +val backgroundDarkMediumContrast = Color(0xFF15130B) +val onBackgroundDarkMediumContrast = Color(0xFFE8E2D4) +val surfaceDarkMediumContrast = Color(0xFF15130B) +val onSurfaceDarkMediumContrast = Color(0xFFFFFAF5) +val surfaceVariantDarkMediumContrast = Color(0xFF4B4739) +val onSurfaceVariantDarkMediumContrast = Color(0xFFD1CAB8) +val outlineDarkMediumContrast = Color(0xFFA9A292) +val outlineVariantDarkMediumContrast = Color(0xFF888373) +val scrimDarkMediumContrast = Color(0xFF000000) +val inverseSurfaceDarkMediumContrast = Color(0xFFE8E2D4) +val inverseOnSurfaceDarkMediumContrast = Color(0xFF2D2A21) +val inversePrimaryDarkMediumContrast = Color(0xFF554700) +val surfaceDimDarkMediumContrast = Color(0xFF15130B) +val surfaceBrightDarkMediumContrast = Color(0xFF3C3930) +val surfaceContainerLowestDarkMediumContrast = Color(0xFF100E07) +val surfaceContainerLowDarkMediumContrast = Color(0xFF1E1B13) +val surfaceContainerDarkMediumContrast = Color(0xFF222017) +val surfaceContainerHighDarkMediumContrast = Color(0xFF2D2A21) +val surfaceContainerHighestDarkMediumContrast = Color(0xFF38352B) + +val primaryDarkHighContrast = Color(0xFFFFFAF5) +val onPrimaryDarkHighContrast = Color(0xFF000000) +val primaryContainerDarkHighContrast = Color(0xFFE0CA72) +val onPrimaryContainerDarkHighContrast = Color(0xFF000000) +val secondaryDarkHighContrast = Color(0xFFFFFAF5) +val onSecondaryDarkHighContrast = Color(0xFF000000) +val secondaryContainerDarkHighContrast = Color(0xFFD6CAA5) +val onSecondaryContainerDarkHighContrast = Color(0xFF000000) +val tertiaryDarkHighContrast = Color(0xFFF7FBFF) +val onTertiaryDarkHighContrast = Color(0xFF000000) +val tertiaryContainerDarkHighContrast = Color(0xFF91D3F5) +val onTertiaryContainerDarkHighContrast = Color(0xFF000000) +val errorDarkHighContrast = Color(0xFFFFF9F9) +val onErrorDarkHighContrast = Color(0xFF000000) +val errorContainerDarkHighContrast = Color(0xFFFFBAB1) +val onErrorContainerDarkHighContrast = Color(0xFF000000) +val backgroundDarkHighContrast = Color(0xFF15130B) +val onBackgroundDarkHighContrast = Color(0xFFE8E2D4) +val surfaceDarkHighContrast = Color(0xFF15130B) +val onSurfaceDarkHighContrast = Color(0xFFFFFFFF) +val surfaceVariantDarkHighContrast = Color(0xFF4B4739) +val onSurfaceVariantDarkHighContrast = Color(0xFFFFFAF5) +val outlineDarkHighContrast = Color(0xFFD1CAB8) +val outlineVariantDarkHighContrast = Color(0xFFD1CAB8) +val scrimDarkHighContrast = Color(0xFF000000) +val inverseSurfaceDarkHighContrast = Color(0xFFE8E2D4) +val inverseOnSurfaceDarkHighContrast = Color(0xFF000000) +val inversePrimaryDarkHighContrast = Color(0xFF322A00) +val surfaceDimDarkHighContrast = Color(0xFF15130B) +val surfaceBrightDarkHighContrast = Color(0xFF3C3930) +val surfaceContainerLowestDarkHighContrast = Color(0xFF100E07) +val surfaceContainerLowDarkHighContrast = Color(0xFF1E1B13) +val surfaceContainerDarkHighContrast = Color(0xFF222017) +val surfaceContainerHighDarkHighContrast = Color(0xFF2D2A21) +val surfaceContainerHighestDarkHighContrast = Color(0xFF38352B) + + + + + + + diff --git a/composeApp/src/commonMain/kotlin/ui/theme/Theme.kt b/composeApp/src/commonMain/kotlin/ui/theme/Theme.kt new file mode 100644 index 0000000..7141627 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/ui/theme/Theme.kt @@ -0,0 +1,274 @@ +package ui.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 +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.Color + +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, +) + +private val mediumContrastLightColorScheme = lightColorScheme( + primary = primaryLightMediumContrast, + onPrimary = onPrimaryLightMediumContrast, + primaryContainer = primaryContainerLightMediumContrast, + onPrimaryContainer = onPrimaryContainerLightMediumContrast, + secondary = secondaryLightMediumContrast, + onSecondary = onSecondaryLightMediumContrast, + secondaryContainer = secondaryContainerLightMediumContrast, + onSecondaryContainer = onSecondaryContainerLightMediumContrast, + tertiary = tertiaryLightMediumContrast, + onTertiary = onTertiaryLightMediumContrast, + tertiaryContainer = tertiaryContainerLightMediumContrast, + onTertiaryContainer = onTertiaryContainerLightMediumContrast, + error = errorLightMediumContrast, + onError = onErrorLightMediumContrast, + errorContainer = errorContainerLightMediumContrast, + onErrorContainer = onErrorContainerLightMediumContrast, + background = backgroundLightMediumContrast, + onBackground = onBackgroundLightMediumContrast, + surface = surfaceLightMediumContrast, + onSurface = onSurfaceLightMediumContrast, + surfaceVariant = surfaceVariantLightMediumContrast, + onSurfaceVariant = onSurfaceVariantLightMediumContrast, + outline = outlineLightMediumContrast, + outlineVariant = outlineVariantLightMediumContrast, + scrim = scrimLightMediumContrast, + inverseSurface = inverseSurfaceLightMediumContrast, + inverseOnSurface = inverseOnSurfaceLightMediumContrast, + inversePrimary = inversePrimaryLightMediumContrast, + surfaceDim = surfaceDimLightMediumContrast, + surfaceBright = surfaceBrightLightMediumContrast, + surfaceContainerLowest = surfaceContainerLowestLightMediumContrast, + surfaceContainerLow = surfaceContainerLowLightMediumContrast, + surfaceContainer = surfaceContainerLightMediumContrast, + surfaceContainerHigh = surfaceContainerHighLightMediumContrast, + surfaceContainerHighest = surfaceContainerHighestLightMediumContrast, +) + +private val highContrastLightColorScheme = lightColorScheme( + primary = primaryLightHighContrast, + onPrimary = onPrimaryLightHighContrast, + primaryContainer = primaryContainerLightHighContrast, + onPrimaryContainer = onPrimaryContainerLightHighContrast, + secondary = secondaryLightHighContrast, + onSecondary = onSecondaryLightHighContrast, + secondaryContainer = secondaryContainerLightHighContrast, + onSecondaryContainer = onSecondaryContainerLightHighContrast, + tertiary = tertiaryLightHighContrast, + onTertiary = onTertiaryLightHighContrast, + tertiaryContainer = tertiaryContainerLightHighContrast, + onTertiaryContainer = onTertiaryContainerLightHighContrast, + error = errorLightHighContrast, + onError = onErrorLightHighContrast, + errorContainer = errorContainerLightHighContrast, + onErrorContainer = onErrorContainerLightHighContrast, + background = backgroundLightHighContrast, + onBackground = onBackgroundLightHighContrast, + surface = surfaceLightHighContrast, + onSurface = onSurfaceLightHighContrast, + surfaceVariant = surfaceVariantLightHighContrast, + onSurfaceVariant = onSurfaceVariantLightHighContrast, + outline = outlineLightHighContrast, + outlineVariant = outlineVariantLightHighContrast, + scrim = scrimLightHighContrast, + inverseSurface = inverseSurfaceLightHighContrast, + inverseOnSurface = inverseOnSurfaceLightHighContrast, + inversePrimary = inversePrimaryLightHighContrast, + surfaceDim = surfaceDimLightHighContrast, + surfaceBright = surfaceBrightLightHighContrast, + surfaceContainerLowest = surfaceContainerLowestLightHighContrast, + surfaceContainerLow = surfaceContainerLowLightHighContrast, + surfaceContainer = surfaceContainerLightHighContrast, + surfaceContainerHigh = surfaceContainerHighLightHighContrast, + surfaceContainerHighest = surfaceContainerHighestLightHighContrast, +) + +private val mediumContrastDarkColorScheme = darkColorScheme( + primary = primaryDarkMediumContrast, + onPrimary = onPrimaryDarkMediumContrast, + primaryContainer = primaryContainerDarkMediumContrast, + onPrimaryContainer = onPrimaryContainerDarkMediumContrast, + secondary = secondaryDarkMediumContrast, + onSecondary = onSecondaryDarkMediumContrast, + secondaryContainer = secondaryContainerDarkMediumContrast, + onSecondaryContainer = onSecondaryContainerDarkMediumContrast, + tertiary = tertiaryDarkMediumContrast, + onTertiary = onTertiaryDarkMediumContrast, + tertiaryContainer = tertiaryContainerDarkMediumContrast, + onTertiaryContainer = onTertiaryContainerDarkMediumContrast, + error = errorDarkMediumContrast, + onError = onErrorDarkMediumContrast, + errorContainer = errorContainerDarkMediumContrast, + onErrorContainer = onErrorContainerDarkMediumContrast, + background = backgroundDarkMediumContrast, + onBackground = onBackgroundDarkMediumContrast, + surface = surfaceDarkMediumContrast, + onSurface = onSurfaceDarkMediumContrast, + surfaceVariant = surfaceVariantDarkMediumContrast, + onSurfaceVariant = onSurfaceVariantDarkMediumContrast, + outline = outlineDarkMediumContrast, + outlineVariant = outlineVariantDarkMediumContrast, + scrim = scrimDarkMediumContrast, + inverseSurface = inverseSurfaceDarkMediumContrast, + inverseOnSurface = inverseOnSurfaceDarkMediumContrast, + inversePrimary = inversePrimaryDarkMediumContrast, + surfaceDim = surfaceDimDarkMediumContrast, + surfaceBright = surfaceBrightDarkMediumContrast, + surfaceContainerLowest = surfaceContainerLowestDarkMediumContrast, + surfaceContainerLow = surfaceContainerLowDarkMediumContrast, + surfaceContainer = surfaceContainerDarkMediumContrast, + surfaceContainerHigh = surfaceContainerHighDarkMediumContrast, + surfaceContainerHighest = surfaceContainerHighestDarkMediumContrast, +) + +private val highContrastDarkColorScheme = darkColorScheme( + primary = primaryDarkHighContrast, + onPrimary = onPrimaryDarkHighContrast, + primaryContainer = primaryContainerDarkHighContrast, + onPrimaryContainer = onPrimaryContainerDarkHighContrast, + secondary = secondaryDarkHighContrast, + onSecondary = onSecondaryDarkHighContrast, + secondaryContainer = secondaryContainerDarkHighContrast, + onSecondaryContainer = onSecondaryContainerDarkHighContrast, + tertiary = tertiaryDarkHighContrast, + onTertiary = onTertiaryDarkHighContrast, + tertiaryContainer = tertiaryContainerDarkHighContrast, + onTertiaryContainer = onTertiaryContainerDarkHighContrast, + error = errorDarkHighContrast, + onError = onErrorDarkHighContrast, + errorContainer = errorContainerDarkHighContrast, + onErrorContainer = onErrorContainerDarkHighContrast, + background = backgroundDarkHighContrast, + onBackground = onBackgroundDarkHighContrast, + surface = surfaceDarkHighContrast, + onSurface = onSurfaceDarkHighContrast, + surfaceVariant = surfaceVariantDarkHighContrast, + onSurfaceVariant = onSurfaceVariantDarkHighContrast, + outline = outlineDarkHighContrast, + outlineVariant = outlineVariantDarkHighContrast, + scrim = scrimDarkHighContrast, + inverseSurface = inverseSurfaceDarkHighContrast, + inverseOnSurface = inverseOnSurfaceDarkHighContrast, + inversePrimary = inversePrimaryDarkHighContrast, + surfaceDim = surfaceDimDarkHighContrast, + surfaceBright = surfaceBrightDarkHighContrast, + surfaceContainerLowest = surfaceContainerLowestDarkHighContrast, + surfaceContainerLow = surfaceContainerLowDarkHighContrast, + surfaceContainer = surfaceContainerDarkHighContrast, + surfaceContainerHigh = surfaceContainerHighDarkHighContrast, + surfaceContainerHighest = surfaceContainerHighestDarkHighContrast, +) + +@Immutable +data class ColorFamily( + val color: Color, + val onColor: Color, + val colorContainer: Color, + val onColorContainer: Color +) + +val unspecified_scheme = ColorFamily( + Color.Unspecified, Color.Unspecified, Color.Unspecified, Color.Unspecified +) + +@Composable +fun AppTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable() () -> Unit +) { + val colorScheme = when { + darkTheme -> darkScheme + else -> lightScheme + } +// val view = LocalView.current +// if (!view.isInEditMode) { +// SideEffect { +// val window = (view.context as Activity).window +// window.statusBarColor = colorScheme.primary.toArgb() +// WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme +// } +// } + + MaterialTheme( + colorScheme = colorScheme, +// typography = AppTypography, + content = content + ) +} + diff --git a/composeApp/src/commonMain/kotlin/ui/theme/Type.kt b/composeApp/src/commonMain/kotlin/ui/theme/Type.kt new file mode 100644 index 0000000..ac78c17 --- /dev/null +++ b/composeApp/src/commonMain/kotlin/ui/theme/Type.kt @@ -0,0 +1,52 @@ +package ui.theme + +//import androidx.compose.material3.Typography +//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 androidx.compose.ui.text.googlefonts.GoogleFont +//import androidx.compose.ui.text.googlefonts.Font +// +//val provider = GoogleFont.Provider( +// providerAuthority = "com.google.android.gms.fonts", +// providerPackage = "com.google.android.gms", +// certificates = "MIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=" +//) +// +//val bodyFontFamily = FontFamily( +// Font( +// googleFont = GoogleFont("Roboto"), +// fontProvider = provider, +// ) +//) +// +//val displayFontFamily = FontFamily( +// Font( +// googleFont = GoogleFont("Shadows Into Light Two"), +// fontProvider = provider, +// ) +//) +// +//// Default Material 3 typography values +//val baseline = Typography() +// +//val AppTypography = Typography( +// displayLarge = baseline.displayLarge.copy(fontFamily = displayFontFamily), +// displayMedium = baseline.displayMedium.copy(fontFamily = displayFontFamily), +// displaySmall = baseline.displaySmall.copy(fontFamily = displayFontFamily), +// headlineLarge = baseline.headlineLarge.copy(fontFamily = displayFontFamily), +// headlineMedium = baseline.headlineMedium.copy(fontFamily = displayFontFamily), +// headlineSmall = baseline.headlineSmall.copy(fontFamily = displayFontFamily), +// titleLarge = baseline.titleLarge.copy(fontFamily = displayFontFamily), +// titleMedium = baseline.titleMedium.copy(fontFamily = displayFontFamily), +// titleSmall = baseline.titleSmall.copy(fontFamily = displayFontFamily), +// bodyLarge = baseline.bodyLarge.copy(fontFamily = bodyFontFamily), +// bodyMedium = baseline.bodyMedium.copy(fontFamily = bodyFontFamily), +// bodySmall = baseline.bodySmall.copy(fontFamily = bodyFontFamily), +// labelLarge = baseline.labelLarge.copy(fontFamily = bodyFontFamily), +// labelMedium = baseline.labelMedium.copy(fontFamily = bodyFontFamily), +// labelSmall = baseline.labelSmall.copy(fontFamily = bodyFontFamily), +//) + diff --git a/composeApp/src/desktopMain/kotlin/desktop window.kt b/composeApp/src/desktopMain/kotlin/desktop window.kt new file mode 100644 index 0000000..ef7c8cc --- /dev/null +++ b/composeApp/src/desktopMain/kotlin/desktop window.kt @@ -0,0 +1,108 @@ +import androidx.compose.desktop.ui.tooling.preview.Preview +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.window.WindowDraggableArea +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Switch +import androidx.compose.material3.SwitchDefaults +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.WindowPlacement +import androidx.compose.ui.window.WindowScope +import androidx.compose.ui.window.WindowState +import org.jetbrains.compose.resources.ExperimentalResourceApi +import org.jetbrains.compose.resources.painterResource +import ui.theme.AppTheme + +@Composable +@OptIn(ExperimentalMaterial3Api::class, ExperimentalResourceApi::class) +fun WindowScope.App( + useDarkMode: Boolean, + topBar: @Composable () -> Unit, + content: @Composable () -> Unit +) { + AppTheme(darkTheme = useDarkMode) { + Scaffold( + topBar = { + WindowDraggableArea { + topBar() + } + } + ) { paddingValues -> + content() + } + } +} + +@Composable +fun AppBar( + useDarkMode: Boolean, + setDarkMode: (Boolean) -> Unit, + onCloseRequest: () -> Unit, + windowState: WindowState, +) { + TopAppBar( + navigationIcon = { + // TODO Icon(painterResource(Res.drawable.heart), null) + }, + title = { Text(text = "Health Check Monitor") }, + actions = { + Switch( + checked = useDarkMode, + onCheckedChange = setDarkMode, + thumbContent = { + Icon( + painter = painterResource( + if (useDarkMode) { + Res.drawable.sun + } else { + Res.drawable.moon + } + ), + contentDescription = null, + modifier = Modifier.size(SwitchDefaults.IconSize), + ) + } + ) + Spacer(Modifier.width(8.dp)) + IconButton( + onClick = { windowState.isMinimized = !windowState.isMinimized } + ) { + Icon( + painter = painterResource(Res.drawable.window_minimize), + contentDescription = null, + modifier = Modifier.size(SwitchDefaults.IconSize), + ) + } + IconButton( + onClick = { + windowState.placement = + if (windowState.placement == WindowPlacement.Maximized) + WindowPlacement.Floating else WindowPlacement.Maximized + } + ) { + Icon( + painter = painterResource(Res.drawable.window_maximize), + contentDescription = null, + modifier = Modifier.size(SwitchDefaults.IconSize), + ) + } + IconButton( + onClick = onCloseRequest + ) { + Icon( + painter = painterResource(Res.drawable.window_close), + contentDescription = null, + modifier = Modifier.size(SwitchDefaults.IconSize), + ) + } + }, + ) +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2ef47b4..6eec9fa 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,21 +4,20 @@ android-compileSdk = "34" android-minSdk = "24" android-targetSdk = "34" androidx-activityCompose = "1.9.0" -compose = "1.6.7" +compose = "1.6.8" compose-plugin = "1.6.11" kotlin = "1.9.24" [libraries] -#junit = { module = "junit:junit", version = "4.13.2"} atrium = { module = "ch.tutteli.atrium:atrium-fluent", version = "1.2.0" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activityCompose" } compose-ui-tooling = { module = "androidx.compose.ui:ui-tooling", version.ref = "compose" } compose-ui-tooling-preview = { module = "androidx.compose.ui:ui-tooling-preview", version.ref = "compose" } +compose-ui-text-googlefonts = { module = "androidx.compose.ui:ui-text-google-fonts", version.ref = "compose" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" } androidLibrary = { id = "com.android.library", version.ref = "agp" } jetbrainsCompose = { id = "org.jetbrains.compose", version.ref = "compose-plugin" } kotlinMultiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } -compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } jetbrainsKotlinJvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } \ No newline at end of file