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