Prechádzať zdrojové kódy

code improvements

code improvements

code improvements

code improvements

code improvements

code improvements
milan jurkulák 2 rokov pred
rodič
commit
6d19087694
34 zmenil súbory, kde vykonal 151 pridanie a 95 odobranie
  1. 6 6
      build.gradle.kts
  2. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsBottomBar.kt
  3. 17 17
      src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsMenu.kt
  4. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/charts/DonutChart.kt
  5. 4 9
      src/main/kotlin/eu/mjdev/desktop/components/controlcenter/ControlCenter.kt
  6. 2 3
      src/main/kotlin/eu/mjdev/desktop/components/controlcenter/pages/MainSettingsPage.kt
  7. 4 2
      src/main/kotlin/eu/mjdev/desktop/components/custom/MeasurableComponent.kt
  8. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/custom/MeasureUnconstrainedView.kt
  9. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/desktop/widgets/MemoryChart.kt
  10. 15 13
      src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/DesktopPanel.kt
  11. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopMenuIcon.kt
  12. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopPanelFavoriteApps.kt
  13. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopPanelLanguage.kt
  14. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/draggable/DraggableView.kt
  15. 6 4
      src/main/kotlin/eu/mjdev/desktop/components/file/FolderIcon.kt
  16. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/file/FolderView.kt
  17. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/fonticon/FontIcon.kt
  18. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/icon/ShapedIcon.kt
  19. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/image/GifView.kt
  20. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/image/ImageAny.kt
  21. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/menu/ContextMenu.kt
  22. 3 1
      src/main/kotlin/eu/mjdev/desktop/components/qrcode/QrCodeView.kt
  23. 3 0
      src/main/kotlin/eu/mjdev/desktop/components/text/AutoResizeText.kt
  24. 1 0
      src/main/kotlin/eu/mjdev/desktop/components/text/CircleText.kt
  25. 0 19
      src/main/kotlin/eu/mjdev/desktop/components/text/FontSizeRange.kt
  26. 2 0
      src/main/kotlin/eu/mjdev/desktop/components/tooltip/Tooltip.kt
  27. 3 1
      src/main/kotlin/eu/mjdev/desktop/components/video/VideoView.kt
  28. 3 1
      src/main/kotlin/eu/mjdev/desktop/components/web/ComposeWebView.kt
  29. 2 2
      src/main/kotlin/eu/mjdev/desktop/helpers/internal/Palette.kt
  30. 25 16
      src/main/kotlin/eu/mjdev/desktop/provider/DesktopProvider.kt
  31. 4 0
      src/main/kotlin/eu/mjdev/desktop/windows/ChromeWindow.kt
  32. 3 0
      src/main/kotlin/eu/mjdev/desktop/windows/FullScreenWindow.kt
  33. 2 0
      src/main/kotlin/eu/mjdev/desktop/windows/Window.kt
  34. 12 1
      src/main/kotlin/eu/mjdev/desktop/windows/WindowEx.kt

+ 6 - 6
build.gradle.kts

@@ -211,13 +211,13 @@ compose {
                     modules("jdk.security.auth")
                 }
                 targetFormats(
-//                    TargetFormat.Dmg,
-//                    TargetFormat.Msi,
+                    TargetFormat.Dmg,
+                    TargetFormat.Msi,
                     TargetFormat.Deb,
-//                    TargetFormat.Exe,
-//                    TargetFormat.AppImage,
-//                    TargetFormat.Pkg,
-//                    TargetFormat.Rpm
+                    TargetFormat.Exe,
+                    TargetFormat.AppImage,
+                    TargetFormat.Pkg,
+                    TargetFormat.Rpm
                 )
 //                buildTypes.release.proguard {
 //                    configurationFiles.from("compose-desktop.pro")

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsBottomBar.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.appsmenu
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.padding
@@ -17,6 +18,8 @@ import eu.mjdev.desktop.components.icon.ShapedIcon
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun AppsBottomBar(
     api: DesktopProvider = LocalDesktop.current,

+ 17 - 17
src/main/kotlin/eu/mjdev/desktop/components/appsmenu/AppsMenu.kt

@@ -2,6 +2,7 @@ package eu.mjdev.desktop.components.appsmenu
 
 import androidx.compose.animation.EnterTransition
 import androidx.compose.animation.ExitTransition
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.gestures.Orientation
@@ -40,6 +41,7 @@ import eu.mjdev.desktop.windows.ChromeWindowState.Companion.rememberChromeWindow
 
 @Suppress("FunctionName")
 @OptIn(ExperimentalComposeUiApi::class)
+@Preview
 @Composable
 fun AppsMenu(
     api: DesktopProvider = LocalDesktop.current,
@@ -95,7 +97,7 @@ fun AppsMenu(
                 )
                 .dropShadow(
                     RoundedCornerShape(24.dp),
-                    borderColor.value.alpha(0.5f),
+                    borderColor.alpha(0.5f),
                     0.dp,
                     0.dp,
                     4.dp,
@@ -110,18 +112,16 @@ fun AppsMenu(
                 modifier = Modifier
                     .fillMaxSize()
                     .padding(menuPadding)
-                    .background(backgroundColor.value.copy(alpha = 0.7f), RoundedCornerShape(24.dp))
-                    .border(2.dp, borderColor.value, RoundedCornerShape(24.dp))
+                    .background(backgroundColor.copy(alpha = 0.7f), RoundedCornerShape(24.dp))
+                    .border(2.dp, borderColor, RoundedCornerShape(24.dp))
                     .clip(RoundedCornerShape(24.dp))
             ) {
                 Column(
                     modifier = Modifier.fillMaxSize()
                 ) {
                     UserAvatar(
+                        modifier = Modifier.background(backgroundColor),
                         avatarSize = 64.dp,
-                        backgroundColor = backgroundColor.value,
-                        iconTintColor = iconsTintColor.value,
-                        textColor = textColor.value,
                         orientation = Orientation.Horizontal,
                         onUserAvatarClick = onUserAvatarClick
                     )
@@ -133,7 +133,7 @@ fun AppsMenu(
                                 start = 2.dp,
                                 end = 2.dp
                             ),
-                        color = borderColor.value,
+                        color = borderColor,
                         thickness = 2.dp
                     )
                     LazyColumn(
@@ -147,9 +147,9 @@ fun AppsMenu(
                                 items(items) { item ->
                                     AppsMenuCategory(
                                         category = item as Category,
-                                        backgroundColor = backgroundColor.value,
-                                        iconTint = textColor.value,
-                                        textColor = textColor.value,
+                                        backgroundColor = backgroundColor,
+                                        iconTint = textColor,
+                                        textColor = textColor,
                                         onClick = { onCategoryClick(item) },
                                         onContextMenuClick = { onCategoryContextMenuClick(item) }
                                     )
@@ -160,9 +160,9 @@ fun AppsMenu(
                                 items(items) { item ->
                                     AppsMenuApp(
                                         app = item as App,
-                                        backgroundColor = backgroundColor.value,
-                                        iconTint = textColor.value,
-                                        textColor = textColor.value,
+                                        backgroundColor = backgroundColor,
+                                        iconTint = textColor,
+                                        textColor = textColor,
                                         onClick = {
                                             onAppClick(item)
                                         },
@@ -189,16 +189,16 @@ fun AppsMenu(
                                 start = 2.dp,
                                 end = 2.dp
                             ),
-                        color = borderColor.value,
+                        color = borderColor,
                         thickness = 2.dp
                     )
                     AppsBottomBar(
                         modifier = Modifier
                             .fillMaxWidth()
                             .wrapContentHeight()
-                            .background(backgroundColor.value),
-                        iconColor = borderColor.value,
-                        iconBackgroundColor = iconsTintColor.value,
+                            .background(backgroundColor),
+                        iconColor = borderColor,
+                        iconBackgroundColor = iconsTintColor,
                         backButtonVisible = items.first() is App,
                         onBackClick = {
                             items = api.appsProvider.appCategories

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/charts/DonutChart.kt

@@ -2,6 +2,7 @@ package eu.mjdev.desktop.components.charts
 
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.TweenSpec
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
@@ -17,6 +18,7 @@ import kotlinx.coroutines.delay
 import kotlinx.coroutines.isActive
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun DonutChart(
     modifier: Modifier = Modifier,

+ 4 - 9
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/ControlCenter.kt

@@ -2,6 +2,7 @@ package eu.mjdev.desktop.components.controlcenter
 
 import androidx.compose.animation.EnterTransition
 import androidx.compose.animation.ExitTransition
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.Orientation.Horizontal
@@ -30,12 +31,9 @@ import eu.mjdev.desktop.extensions.Compose.rememberCalculated
 import eu.mjdev.desktop.extensions.Compose.rememberState
 import eu.mjdev.desktop.helpers.animation.Animations.ControlCenterEnterAnimation
 import eu.mjdev.desktop.helpers.animation.Animations.ControlCenterExitAnimation
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberBackgroundColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberBorderColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberIconTintColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberTextColor
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
+import eu.mjdev.desktop.provider.DesktopProvider.Companion.withDesktopScope
 import eu.mjdev.desktop.windows.ChromeWindow
 import eu.mjdev.desktop.windows.ChromeWindowState
 import eu.mjdev.desktop.windows.ChromeWindowState.Companion.rememberChromeWindowState
@@ -44,6 +42,7 @@ import kotlinx.coroutines.launch
 
 @OptIn(ExperimentalFoundationApi::class)
 @Suppress("FunctionName", "DEPRECATION")
+@Preview
 @Composable
 fun ControlCenter(
     api: DesktopProvider = LocalDesktop.current,
@@ -54,13 +53,9 @@ fun ControlCenter(
     exitAnimation: ExitTransition = ControlCenterExitAnimation,
     onFocusChange: (Boolean) -> Unit = {},
     onContextMenuClick: () -> Unit = {}
-) {
-    val backgroundColor by rememberBackgroundColor(api)
+) = withDesktopScope {
     val backgroundAlpha by remember { api.currentUser.theme.controlCenterBackgroundAlphaState }
     val backgroundInvoker = remember { { backgroundColor } }
-    val textColor by rememberTextColor(api)
-    val borderColor by rememberBorderColor(api)
-    val iconsTintColor by rememberIconTintColor(api)
     val controlCenterExpandedWidth by remember { api.currentUser.theme.controlCenterExpandedWidthState }
     val controlCenterDividerWidth by remember { api.currentUser.theme.controlCenterDividerWidthState }
     val controlCenterIconSize by remember { api.currentUser.theme.controlCenterIconSizeState }

+ 2 - 3
src/main/kotlin/eu/mjdev/desktop/components/controlcenter/pages/MainSettingsPage.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.controlcenter.pages
 
+import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.layout.*
 import androidx.compose.material.Divider
@@ -39,9 +40,7 @@ fun MainSettingsPage() = ControlCenterPage(
                 .rectShadow(8.dp, borderColor.copy(alpha = 0.3f))
         ) {
             UserAvatar(
-                backgroundColor = backgroundColor,
-                iconTintColor = iconsTintColor,
-                textColor = textColor,
+                modifier = Modifier.background(backgroundColor),
                 avatarSize = 128.dp,
                 orientation = Orientation.Vertical,
                 onUserAvatarClick = {

+ 4 - 2
src/main/kotlin/eu/mjdev/desktop/components/custom/MeasurableComponent.kt

@@ -1,17 +1,19 @@
 package eu.mjdev.desktop.components.custom
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.layout.SubcomposeLayout
 import androidx.compose.ui.unit.DpSize
 import androidx.compose.ui.unit.dp
 
+@Suppress("FunctionName", "unused")
+@Preview
 @Composable
 fun MeasurableComponent(
     key: Any,
     onMeasure: (size: DpSize) -> Unit = {},
     content: @Composable () -> Unit = {},
-) = SubcomposeLayout(
-) { constraints ->
+) = SubcomposeLayout { constraints ->
     subcompose(
         key,
         content

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/custom/MeasureUnconstrainedView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.custom
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.layout.SubcomposeLayout
@@ -7,6 +8,7 @@ import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.Dp
 
 @Suppress("FunctionName", "unused")
+@Preview
 @Composable
 fun MeasureUnconstrainedView(
     viewToMeasure: @Composable () -> Unit,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/desktop/widgets/MemoryChart.kt

@@ -2,6 +2,7 @@ package eu.mjdev.desktop.components.desktop.widgets
 
 import androidx.compose.animation.core.AnimationSpec
 import androidx.compose.animation.core.TweenSpec
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.ui.Modifier
@@ -18,6 +19,7 @@ import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun MemoryChart(
     modifier: Modifier = Modifier,

+ 15 - 13
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/DesktopPanel.kt

@@ -2,6 +2,7 @@ package eu.mjdev.desktop.components.desktoppanel
 
 import androidx.compose.animation.EnterTransition
 import androidx.compose.animation.ExitTransition
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.TooltipArea
 import androidx.compose.foundation.TooltipPlacement
@@ -44,6 +45,7 @@ import eu.mjdev.desktop.windows.ChromeWindowState.Companion.rememberChromeWindow
 
 @OptIn(ExperimentalFoundationApi::class)
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun DesktopPanel(
     api: DesktopProvider = LocalDesktop.current,
@@ -132,11 +134,11 @@ fun DesktopPanel(
                     modifier = Modifier.fillMaxWidth().wrapContentHeight(),
                     tooltip = {
                         Tooltip(
-                            textColor = textColor.value,
-                            borderColor = borderColor.value,
+                            textColor = textColor,
+                            borderColor = borderColor,
                             state = tooltipState,
                             converter = tooltipConverter,
-                            backgroundColor = backgroundColor.value
+                            backgroundColor = backgroundColor
                         )
                     },
                     tooltipPlacement = TooltipPlacement.CursorPoint(
@@ -157,14 +159,14 @@ fun DesktopPanel(
                                 .background(
                                     brush = Brush.verticalGradient(
                                         colors = listOf(
-                                            backgroundColor.value.copy(alpha = 0.3f),
-                                            backgroundColor.value.copy(alpha = 0.7f),
-                                            backgroundColor.value.copy(alpha = 0.8f),
+                                            backgroundColor.copy(alpha = 0.3f),
+                                            backgroundColor.copy(alpha = 0.7f),
+                                            backgroundColor.copy(alpha = 0.8f),
                                         )
                                     )
                                 )
                                 .topShadow(
-                                    color = borderColor.value.alpha(0.3f),
+                                    color = borderColor.alpha(0.3f),
                                     blur = 4.dp
                                 )
                                 .onPlaced(panelState::onPlaced),
@@ -173,7 +175,7 @@ fun DesktopPanel(
                                 modifier = Modifier
                                     .fillMaxWidth()
                                     .height(2.dp),
-                                color = borderColor.value,
+                                color = borderColor,
                                 thickness = 2.dp
                             )
                             Box(
@@ -184,8 +186,8 @@ fun DesktopPanel(
                                 if (showMenuIcon) {
                                     DesktopMenuIcon(
                                         modifier = Modifier.align(Alignment.CenterStart),
-                                        iconColor = borderColor.value,
-                                        iconBackgroundColor = iconsTintColor.value,
+                                        iconColor = borderColor,
+                                        iconBackgroundColor = iconsTintColor,
                                         iconSize = iconSize,
                                         iconPadding = iconPadding,
                                         iconOuterPadding = iconOuterPadding,
@@ -196,9 +198,9 @@ fun DesktopPanel(
                                 }
                                 DesktopPanelFavoriteApps(
                                     modifier = Modifier.align(Alignment.Center),
-                                    iconColor = borderColor.value,
-                                    iconBackgroundColor = iconsTintColor.value,
-                                    iconColorRunning = iconsTintColor.value.lighter(0.3f),
+                                    iconColor = borderColor,
+                                    iconBackgroundColor = iconsTintColor,
+                                    iconColorRunning = iconsTintColor.lighter(0.3f),
                                     iconSize = iconSize,
                                     iconPadding = iconPadding,
                                     iconOuterPadding = iconOuterPadding,

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopMenuIcon.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.desktoppanel.applets
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.*
 import androidx.compose.material.Divider
@@ -10,6 +11,8 @@ import androidx.compose.ui.unit.DpSize
 import androidx.compose.ui.unit.dp
 import eu.mjdev.desktop.components.desktoppanel.DesktopPanelIcon
 
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun DesktopMenuIcon(
     modifier: Modifier = Modifier,

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopPanelFavoriteApps.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.desktoppanel.applets
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.PaddingValues
@@ -19,6 +20,8 @@ import eu.mjdev.desktop.extensions.Compose.rememberCalculated
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun DesktopPanelFavoriteApps(
     modifier: Modifier = Modifier,

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/desktoppanel/applets/DesktopPanelLanguage.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.desktoppanel.applets
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
@@ -7,6 +8,8 @@ import eu.mjdev.desktop.components.desktoppanel.DesktopPanelText
 import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun DesktopPanelLanguage(
     modifier: Modifier = Modifier,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/draggable/DraggableView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.draggable
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.background
 import androidx.compose.foundation.gestures.detectDragGestures
 import androidx.compose.foundation.gestures.detectTapGestures
@@ -20,6 +21,7 @@ import eu.mjdev.desktop.extensions.Compose.rememberState
 import eu.mjdev.desktop.extensions.Modifier.conditional
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun DraggableView(
     modifier: Modifier = Modifier,

+ 6 - 4
src/main/kotlin/eu/mjdev/desktop/components/file/FolderIcon.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.file
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -27,6 +28,7 @@ import eu.mjdev.desktop.extensions.Modifier.circleBorder
 
 @OptIn(ExperimentalFoundationApi::class)
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun FolderIcon(
     path: File,
@@ -65,13 +67,13 @@ fun FolderIcon(
         ) {
             Box(
                 modifier = Modifier.size(computedSize)
-                    .circleBorder(2.dp, textColor.value)
+                    .circleBorder(2.dp, textColor)
             ) {
                 FontIcon(
                     iconId = iconId,
                     iconSize = iconSize,
-                    iconColor = textColor.value,
-                    iconBackgroundColor = iconsTintColor.value.alpha(0.4f),
+                    iconColor = textColor,
+                    iconBackgroundColor = iconsTintColor.alpha(0.4f),
                     outerPadding = PaddingValues(8.dp),
                     innerPadding = PaddingValues(8.dp),
                     onClick = onClick,
@@ -82,7 +84,7 @@ fun FolderIcon(
                 modifier = Modifier.width(computedSize.width)
                     .padding(start = 4.dp),
                 text = customName ?: path.name ?: "",
-                color = textColor.value,
+                color = textColor,
                 fontWeight = FontWeight.Bold,
                 overflow = Ellipsis,
                 minLines = 2,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/file/FolderView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.file
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.gestures.Orientation
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
@@ -33,6 +34,7 @@ import java.io.File
 // X11GraphicsEnvironment
 @Suppress("FunctionName")
 @OptIn(ExperimentalLayoutApi::class)
+@Preview
 @Composable
 fun FolderView(
     modifier: Modifier = Modifier,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/fonticon/FontIcon.kt

@@ -2,6 +2,7 @@
 
 package eu.mjdev.desktop.components.fonticon
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.runtime.Composable
@@ -16,6 +17,7 @@ import eu.mjdev.desktop.components.text.AutoResizeText
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun FontIcon(
     iconId: Int,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/icon/ShapedIcon.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.icon
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.*
@@ -21,6 +22,7 @@ import eu.mjdev.desktop.extensions.Compose.size
 
 @Suppress("DEPRECATION")
 @OptIn(ExperimentalFoundationApi::class)
+@Preview
 @Composable
 fun ShapedIcon(
     modifier: Modifier = Modifier,

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/image/GifView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.image
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.Canvas
 import androidx.compose.foundation.layout.BoxWithConstraints
 import androidx.compose.runtime.*
@@ -12,6 +13,8 @@ import java.awt.image.BufferedImage
 import java.io.File
 import java.io.FileInputStream
 
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun GifView(
     modifier: Modifier = Modifier,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/image/ImageAny.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.image
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.Box
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
@@ -23,6 +24,7 @@ import java.io.File
 import androidx.compose.foundation.Image as ComposeImage
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun ImageAny(
     src: Any?,

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/menu/ContextMenu.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.menu
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.background
 import androidx.compose.foundation.shape.RoundedCornerShape
 import androidx.compose.material.CursorDropdownMenu
@@ -12,6 +13,8 @@ import androidx.compose.ui.unit.dp
 import eu.mjdev.desktop.extensions.Compose.SuperDarkGray
 
 // todo
+@Suppress("unused", "FunctionName")
+@Preview
 @Composable
 fun ContextMenu(
     backgroundColor: Color = Color.SuperDarkGray,

+ 3 - 1
src/main/kotlin/eu/mjdev/desktop/components/qrcode/QrCodeView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.qrcode
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.PaddingValues
@@ -14,7 +15,8 @@ import io.github.alexzhirkevich.qrose.options.*
 import io.github.alexzhirkevich.qrose.rememberQrCodePainter
 
 // todo : params
-@Suppress("unused")
+@Suppress("unused", "FunctionName")
+@Preview
 @Composable
 fun QrCodeView(
     modifier: Modifier = Modifier,

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/components/text/AutoResizeText.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.text
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.BoxWithConstraints
 import androidx.compose.material.Text
 import androidx.compose.runtime.*
@@ -15,6 +16,8 @@ import androidx.compose.ui.unit.sp
 import kotlin.math.min
 
 // todo may be need refactor
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun AutoResizeText(
     text: String,

+ 1 - 0
src/main/kotlin/eu/mjdev/desktop/components/text/CircleText.kt

@@ -21,6 +21,7 @@ import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import eu.mjdev.desktop.extensions.Modifier.clipCircle
 
+@Suppress("unused", "FunctionName")
 @Preview
 @Composable
 fun CircleText(

+ 0 - 19
src/main/kotlin/eu/mjdev/desktop/components/text/FontSizeRange.kt

@@ -1,19 +0,0 @@
-package eu.mjdev.desktop.components.text
-
-import androidx.compose.ui.unit.TextUnit
-import androidx.compose.ui.unit.sp
-
-class FontSizeRange(
-    val min: TextUnit,
-    val max: TextUnit,
-    val step: TextUnit = DEFAULT_TEXT_STEP,
-) {
-    init {
-        require(min < max) { "min should be less than max, $this" }
-        require(step.value > 0) { "step should be greater than 0, $this" }
-    }
-
-    companion object {
-        private val DEFAULT_TEXT_STEP = 1.sp
-    }
-}

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/components/tooltip/Tooltip.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.tooltip
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.background
 import androidx.compose.foundation.border
 import androidx.compose.foundation.layout.Box
@@ -20,6 +21,7 @@ import eu.mjdev.desktop.extensions.Compose.launchedEffect
 import kotlinx.coroutines.delay
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun Tooltip(
     textColor: Color = Color.White,

+ 3 - 1
src/main/kotlin/eu/mjdev/desktop/components/video/VideoView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.video
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.runtime.Composable
@@ -9,7 +10,8 @@ import androidx.compose.ui.graphics.ColorFilter
 import androidx.compose.ui.layout.ContentScale
 import java.io.File
 
-@Suppress("UNUSED_PARAMETER")
+@Suppress("UNUSED_PARAMETER", "FunctionName")
+@Preview
 @Composable
 fun VideoView(
     modifier: Modifier = Modifier,

+ 3 - 1
src/main/kotlin/eu/mjdev/desktop/components/web/ComposeWebView.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.components.web
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.foundation.layout.*
 import androidx.compose.material.CircularProgressIndicator
 import androidx.compose.material.LinearProgressIndicator
@@ -24,7 +25,8 @@ import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 
 // todo improve
-@Suppress("LocalVariableName")
+@Suppress("LocalVariableName", "FunctionName", "unused")
+@Preview
 @Composable
 fun ComposeWebView(
     modifier: Modifier = Modifier,

+ 2 - 2
src/main/kotlin/eu/mjdev/desktop/helpers/internal/Palette.kt

@@ -20,14 +20,14 @@ class Palette(
     val borderFactor: Float = 0.1f,
     val textFactor: Float = 0.6f,
 ) {
-    val backgroundColorState = mutableStateOf(baseColor)
+    val backgroundColorState: MutableState<Color> = mutableStateOf(baseColor)
     var backgroundColor
         get() = backgroundColorState.value
         set(value) {
             backgroundColorState.value = value
         }
 
-    val textColorState = mutableStateOf(if (isLight) Color.Black else Color.White)
+    val textColorState: MutableState<Color> = mutableStateOf(if (isLight) Color.Black else Color.White)
     var textColor
         get() = textColorState.value
         set(value) {

+ 25 - 16
src/main/kotlin/eu/mjdev/desktop/provider/DesktopProvider.kt

@@ -11,12 +11,9 @@ import eu.mjdev.desktop.data.User
 import eu.mjdev.desktop.extensions.Compose.asyncImageLoader
 import eu.mjdev.desktop.helpers.adb.AdbDiscover.Companion.adbDevicesHandler
 import eu.mjdev.desktop.helpers.internal.Palette
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberBackgroundColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberBorderColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberIconTintColor
-import eu.mjdev.desktop.helpers.internal.Palette.Companion.rememberTextColor
 import eu.mjdev.desktop.helpers.managers.*
 import eu.mjdev.desktop.helpers.system.Command
+import eu.mjdev.desktop.helpers.system.OsRelease
 import eu.mjdev.desktop.helpers.system.UserDirs
 import eu.mjdev.desktop.provider.AIProvider.AiPluginGemini
 import kotlinx.coroutines.CoroutineScope
@@ -42,7 +39,9 @@ class DesktopProvider(
     val homeDir
         get() = File("/home/${currentUser.name}")
 
-    val userDirs  = UserDirs(this)
+    val userDirs = UserDirs(this)
+
+    val osDetails = OsRelease(this)
 
     val palette: Palette = Palette(scope, currentUser.theme.backgroundColor)
 
@@ -139,13 +138,27 @@ class DesktopProvider(
         exitProcess(0)
     }
 
+    // theme support
     class DesktopScope(
-        val api: DesktopProvider,
-        val backgroundColor: State<Color>,
-        val iconsTintColor: State<Color>,
-        val textColor: State<Color>,
-        val borderColor: State<Color>
-    )
+        val api: DesktopProvider
+    ) {
+        val scope
+            get() = api.scope
+        val backgroundColorState
+            get() = api.palette.backgroundColorState
+        val backgroundColor
+            get() = api.palette.backgroundColor
+        val iconsTintColorState
+            get() = api.palette.iconsTintColor
+        val iconsTintColor
+            get() = api.palette.iconsTintColor
+        val textColorState
+            get() = api.palette.textColorState
+        val textColor
+            get() = textColorState.value
+        val borderColor
+            get() = api.palette.borderColor
+    }
 
     companion object {
         private val CONTROL_CENTER_PAGES = listOf(
@@ -174,12 +187,8 @@ class DesktopProvider(
         @Composable
         fun withDesktopScope(
             api: DesktopProvider = LocalDesktop.current,
-            backgroundColor: MutableState<Color> = rememberBackgroundColor(api),
-            iconsTintColor: State<Color> = rememberIconTintColor(api),
-            textColor: State<Color> = rememberTextColor(api),
-            borderColor: State<Color> = rememberBorderColor(api),
             block: @Composable DesktopScope.() -> Unit
-        ) = DesktopScope(api, backgroundColor, iconsTintColor, textColor, borderColor).apply {
+        ) = DesktopScope(api).apply {
             block()
         }
     }

+ 4 - 0
src/main/kotlin/eu/mjdev/desktop/windows/ChromeWindow.kt

@@ -1,6 +1,7 @@
 package eu.mjdev.desktop.windows
 
 import androidx.compose.animation.*
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.input.key.KeyEvent
@@ -15,6 +16,7 @@ import eu.mjdev.desktop.windows.ChromeWindowState.Companion.updateAnimState
 import eu.mjdev.desktop.windows.ChromeWindowState.Companion.updateWindowState
 
 @Suppress("FunctionName", "unused")
+@Preview
 @Composable
 fun ChromeWindow(
     size: DpSize = DpSize(Dp.Unspecified, Dp.Unspecified),
@@ -59,6 +61,7 @@ fun ChromeWindow(
 )
 
 @Suppress("unused", "FunctionName")
+@Preview
 @Composable
 fun ChromeWindow(
     position: WindowPosition = WindowPosition.Aligned(Alignment.Center),
@@ -102,6 +105,7 @@ fun ChromeWindow(
 )
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun ChromeWindow(
     windowState: ChromeWindowState = rememberChromeWindowState(),

+ 3 - 0
src/main/kotlin/eu/mjdev/desktop/windows/FullScreenWindow.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.windows
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.input.key.KeyEvent
@@ -9,6 +10,8 @@ import eu.mjdev.desktop.provider.DesktopProvider
 import eu.mjdev.desktop.provider.DesktopProvider.Companion.LocalDesktop
 import eu.mjdev.desktop.windows.ChromeWindowState.Companion.rememberChromeWindowState
 
+@Suppress("FunctionName")
+@Preview
 @Composable
 fun FullScreenWindow(
     api: DesktopProvider = LocalDesktop.current,

+ 2 - 0
src/main/kotlin/eu/mjdev/desktop/windows/Window.kt

@@ -1,5 +1,6 @@
 package eu.mjdev.desktop.windows
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
 import androidx.compose.runtime.*
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.ExperimentalComposeUiApi
@@ -19,6 +20,7 @@ import javax.swing.JFrame
 import kotlin.math.roundToInt
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun Window(
 //    onOpen: (window: ComposeWindow) -> Unit = {},

+ 12 - 1
src/main/kotlin/eu/mjdev/desktop/windows/WindowEx.kt

@@ -1,18 +1,29 @@
 package eu.mjdev.desktop.windows
 
+import androidx.compose.desktop.ui.tooling.preview.Preview
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
 import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
 import androidx.compose.ui.awt.ComposeWindow
+import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.input.key.KeyEvent
+import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
 import androidx.compose.ui.window.FrameWindowScope
+import eu.mjdev.desktop.extensions.Modifier.rectShadow
 import eu.mjdev.desktop.windows.ChromeWindowState.Companion.rememberChromeWindowState
 
 @Suppress("FunctionName")
+@Preview
 @Composable
 fun WindowEx(
     onCreate: (window: ComposeWindow) -> Unit = {},
     onCloseRequest: () -> Unit,
-    state: ChromeWindowState =  rememberChromeWindowState(),
+    state: ChromeWindowState = rememberChromeWindowState(),
     visible: Boolean = true,
     title: String = "Untitled",
     icon: Painter? = null,