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), ) } }, ) }