Update Dependencies

Re-add package and notarize workflow tasks
Update code for Compose updates
This commit is contained in:
Syer10
2021-10-22 15:17:09 -04:00
parent c4e13fb5cb
commit b82c849d56
14 changed files with 94 additions and 80 deletions

View File

@@ -30,7 +30,7 @@ jobs:
arch: x64 arch: x64
os: macOS-latest os: macOS-latest
shell: bash shell: bash
build: packageUberJarForCurrentOS # packageDmg notarizeDmg build: packageUberJarForCurrentOS packageDmg notarizeDmg
setupCl: ./scripts/SetupClUnix.sh setupCl: ./scripts/SetupClUnix.sh
- runtime: win-x64 - runtime: win-x64

View File

@@ -8,10 +8,10 @@ import org.jmailen.gradle.kotlinter.tasks.FormatTask
import org.jmailen.gradle.kotlinter.tasks.LintTask import org.jmailen.gradle.kotlinter.tasks.LintTask
plugins { plugins {
kotlin("jvm") version "1.5.30" kotlin("jvm") version "1.5.31"
kotlin("kapt") version "1.5.30" kotlin("kapt") version "1.5.31"
kotlin("plugin.serialization") version "1.5.30" kotlin("plugin.serialization") version "1.5.31"
id("org.jetbrains.compose") version "1.0.0-alpha4-build328" id("org.jetbrains.compose") version "1.0.0-beta1"
id("com.github.gmazzo.buildconfig") version "3.0.3" id("com.github.gmazzo.buildconfig") version "3.0.3"
id("org.jmailen.kotlinter") version "3.6.0" id("org.jmailen.kotlinter") version "3.6.0"
id("com.github.ben-manes.versions") version "0.39.0" id("com.github.ben-manes.versions") version "0.39.0"
@@ -33,8 +33,8 @@ dependencies {
implementation(compose.materialIconsExtended) implementation(compose.materialIconsExtended)
implementation(compose("org.jetbrains.compose.ui:ui-util")) implementation(compose("org.jetbrains.compose.ui:ui-util"))
implementation("ca.gosyer:compose-router:0.24.2-jetbrains-2") implementation("ca.gosyer:compose-router:0.24.2-jetbrains-2")
implementation("ca.gosyer:accompanist-pager:0.14.0") implementation("ca.gosyer:accompanist-pager:0.18.1")
implementation("ca.gosyer:accompanist-flowlayout:0.14.0") implementation("ca.gosyer:accompanist-flowlayout:0.18.1")
// UI (Swing) // UI (Swing)
implementation("com.github.weisj:darklaf-core:2.7.3") implementation("com.github.weisj:darklaf-core:2.7.3")
@@ -58,7 +58,7 @@ dependencies {
kapt("com.github.stephanenicolas.toothpick:toothpick-compiler:$toothpickVersion") kapt("com.github.stephanenicolas.toothpick:toothpick-compiler:$toothpickVersion")
// Http client // Http client
val ktorVersion = "1.6.3" val ktorVersion = "1.6.4"
implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-okhttp:$ktorVersion") implementation("io.ktor:ktor-client-okhttp:$ktorVersion")
implementation("io.ktor:ktor-client-serialization:$ktorVersion") implementation("io.ktor:ktor-client-serialization:$ktorVersion")

View File

@@ -6,10 +6,10 @@
package ca.gosyer.data.ui.model package ca.gosyer.data.ui.model
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.WindowPlacement import androidx.compose.ui.window.WindowPlacement
import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.WindowPosition
import androidx.compose.ui.window.WindowSize
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@Serializable @Serializable
@@ -26,13 +26,13 @@ data class WindowSettings(
if (maximized == true) { if (maximized == true) {
return WindowGet( return WindowGet(
WindowPosition.PlatformDefault, WindowPosition.PlatformDefault,
WindowSize(800.dp, 600.dp), DpSize(800.dp, 600.dp),
WindowPlacement.Maximized WindowPlacement.Maximized
) )
} else if (fullscreen == true) { } else if (fullscreen == true) {
return WindowGet( return WindowGet(
WindowPosition.PlatformDefault, WindowPosition.PlatformDefault,
WindowSize(800.dp, 600.dp), DpSize(800.dp, 600.dp),
WindowPlacement.Fullscreen WindowPlacement.Fullscreen
) )
} }
@@ -42,7 +42,7 @@ data class WindowSettings(
} else { } else {
WindowPosition.PlatformDefault WindowPosition.PlatformDefault
} }
val size = WindowSize((width ?: 800).dp, (height ?: 600).dp) val size = DpSize((width ?: 800).dp, (height ?: 600).dp)
return WindowGet( return WindowGet(
offset, offset,
size, size,
@@ -60,7 +60,7 @@ data class WindowSettings(
data class WindowGet( data class WindowGet(
val offset: WindowPosition, val offset: WindowPosition,
val size: WindowSize, val size: DpSize,
val placement: WindowPlacement val placement: WindowPlacement
) )
} }

View File

@@ -29,10 +29,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.Key
import androidx.compose.ui.input.key.KeyEvent import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.key
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Window import androidx.compose.ui.window.Window
import androidx.compose.ui.window.WindowPosition import androidx.compose.ui.window.WindowPosition
import androidx.compose.ui.window.WindowSize
import androidx.compose.ui.window.rememberWindowState import androidx.compose.ui.window.rememberWindowState
import ca.gosyer.common.di.AppScope import ca.gosyer.common.di.AppScope
import ca.gosyer.data.translation.XmlResourceBundle import ca.gosyer.data.translation.XmlResourceBundle
@@ -46,7 +46,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi
@Suppress("FunctionName") @Suppress("FunctionName")
fun WindowDialog( fun WindowDialog(
title: String = "Dialog", title: String = "Dialog",
size: WindowSize = WindowSize(400.dp, 200.dp), size: DpSize = DpSize(400.dp, 200.dp),
onCloseRequest: (() -> Unit)? = null, onCloseRequest: (() -> Unit)? = null,
forceFocus: Boolean = true, forceFocus: Boolean = true,
showNegativeButton: Boolean = true, showNegativeButton: Boolean = true,
@@ -130,7 +130,7 @@ fun WindowDialog(
@OptIn(DelicateCoroutinesApi::class) @OptIn(DelicateCoroutinesApi::class)
fun WindowDialog( fun WindowDialog(
title: String = "Dialog", title: String = "Dialog",
size: WindowSize = WindowSize(400.dp, 200.dp), size: DpSize = DpSize(400.dp, 200.dp),
onCloseRequest: (() -> Unit)? = null, onCloseRequest: (() -> Unit)? = null,
forceFocus: Boolean = true, forceFocus: Boolean = true,
keyboardShortcuts: Map<Key, (KeyEvent) -> Boolean> = emptyMap(), keyboardShortcuts: Map<Key, (KeyEvent) -> Boolean> = emptyMap(),

View File

@@ -6,12 +6,11 @@
package ca.gosyer.ui.base.components package ca.gosyer.ui.base.components
import androidx.compose.foundation.BoxWithTooltip import androidx.compose.foundation.TooltipArea
import androidx.compose.foundation.TooltipPlacement import androidx.compose.foundation.TooltipPlacement
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.Surface import androidx.compose.material.Surface
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow import androidx.compose.ui.draw.shadow
import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.DpOffset
@@ -21,15 +20,13 @@ import androidx.compose.ui.unit.dp
fun BoxWithTooltipSurface( fun BoxWithTooltipSurface(
tooltip: @Composable () -> Unit, tooltip: @Composable () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
contentAlignment: Alignment = Alignment.TopStart, delayMillis: Int = 500,
propagateMinConstraints: Boolean = false, tooltipPlacement: TooltipPlacement = TooltipPlacement.CursorPoint(
delay: Int = 500,
offset: TooltipPlacement = TooltipPlacement.CursorPoint(
offset = DpOffset(0.dp, 16.dp) offset = DpOffset(0.dp, 16.dp)
), ),
content: @Composable () -> Unit content: @Composable () -> Unit
) { ) {
BoxWithTooltip( TooltipArea(
{ {
Surface( Surface(
modifier = Modifier.shadow(4.dp), modifier = Modifier.shadow(4.dp),
@@ -39,10 +36,8 @@ fun BoxWithTooltipSurface(
) )
}, },
modifier, modifier,
contentAlignment, delayMillis,
propagateMinConstraints, tooltipPlacement,
delay,
offset,
content content
) )
} }

View File

@@ -62,10 +62,10 @@ import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.input.pointer.PointerInputScope import androidx.compose.ui.input.pointer.PointerInputScope
import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.IntSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastForEachIndexed import androidx.compose.ui.util.fastForEachIndexed
import androidx.compose.ui.window.WindowSize
import ca.gosyer.ui.base.WindowDialog import ca.gosyer.ui.base.WindowDialog
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlin.math.round import kotlin.math.round
@@ -81,7 +81,7 @@ fun ColorPickerDialog(
WindowDialog( WindowDialog(
onCloseRequest = onCloseRequest, onCloseRequest = onCloseRequest,
size = WindowSize(300.dp, 520.dp), size = DpSize(300.dp, 520.dp),
title = title, title = title,
content = { content = {
val showPresetsState by showPresets.collectAsState() val showPresetsState by showPresets.collectAsState()

View File

@@ -7,7 +7,6 @@
package ca.gosyer.ui.base.components package ca.gosyer.ui.base.components
import androidx.compose.foundation.ContextMenuItem import androidx.compose.foundation.ContextMenuItem
import androidx.compose.foundation.ExperimentalDesktopApi
import androidx.compose.foundation.MouseClickScope import androidx.compose.foundation.MouseClickScope
import androidx.compose.foundation.mouseClickable import androidx.compose.foundation.mouseClickable
import androidx.compose.material.CursorDropdownMenu import androidx.compose.material.CursorDropdownMenu
@@ -28,7 +27,6 @@ import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.SemanticsPropertyKey import androidx.compose.ui.semantics.SemanticsPropertyKey
import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.semantics
@OptIn(ExperimentalDesktopApi::class)
fun Modifier.contextMenuClickable( fun Modifier.contextMenuClickable(
items: () -> List<ContextMenuItem>, items: () -> List<ContextMenuItem>,
onClickLabel: String? = null, onClickLabel: String? = null,
@@ -75,7 +73,6 @@ fun Modifier.contextMenuClickable(
) )
} }
@OptIn(ExperimentalDesktopApi::class)
fun Modifier.combinedMouseClickable( fun Modifier.combinedMouseClickable(
enabled: Boolean = true, enabled: Boolean = true,
onClickLabel: String? = null, onClickLabel: String? = null,
@@ -116,7 +113,6 @@ fun Modifier.combinedMouseClickable(
} }
} }
@OptIn(ExperimentalDesktopApi::class)
private object DesktopSemanticsActions { private object DesktopSemanticsActions {
val onRightClick = ActionPropertyKey<MouseClickScope.() -> Boolean>("OnRightClick") val onRightClick = ActionPropertyKey<MouseClickScope.() -> Boolean>("OnRightClick")
val onMiddleClick = ActionPropertyKey<MouseClickScope.() -> Boolean>("OnMiddleClick") val onMiddleClick = ActionPropertyKey<MouseClickScope.() -> Boolean>("OnMiddleClick")

View File

@@ -235,32 +235,31 @@ fun <T> ChoiceDialog(
WindowDialog( WindowDialog(
onCloseRequest = onCloseRequest, onCloseRequest = onCloseRequest,
buttons = buttons, buttons = buttons,
title = title, title = title
content = { ) {
LazyColumn(Modifier.fillMaxSize()) { LazyColumn(Modifier.fillMaxSize()) {
items(items) { (value, text) -> items(items) { (value, text) ->
Row( Row(
modifier = Modifier.requiredHeight(48.dp).fillMaxWidth().clickable( modifier = Modifier.requiredHeight(48.dp).fillMaxWidth().clickable(
onClick = { onClick = {
onSelected(value) onSelected(value)
it() it()
} }
), ),
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
RadioButton( RadioButton(
selected = value == selected, selected = value == selected,
onClick = { onClick = {
onSelected(value) onSelected(value)
it() it()
}, },
) )
Text(text = text, modifier = Modifier.padding(start = 24.dp)) Text(text = text, modifier = Modifier.padding(start = 24.dp))
}
} }
} }
} }
) }
} }
@Composable @Composable

View File

@@ -7,15 +7,20 @@
package ca.gosyer.ui.base.theme package ca.gosyer.ui.base.theme
import androidx.compose.desktop.DesktopMaterialTheme import androidx.compose.desktop.DesktopMaterialTheme
import androidx.compose.foundation.LocalScrollbarStyle
import androidx.compose.foundation.ScrollbarStyle
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.Colors import androidx.compose.material.Colors
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.luminance import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.graphics.takeOrElse import androidx.compose.ui.graphics.takeOrElse
import androidx.compose.ui.unit.dp
import ca.gosyer.data.ui.UiPreferences import ca.gosyer.data.ui.UiPreferences
import ca.gosyer.data.ui.model.ThemeMode import ca.gosyer.data.ui.model.ThemeMode
import ca.gosyer.ui.base.vm.ViewModel import ca.gosyer.ui.base.vm.ViewModel
@@ -36,7 +41,19 @@ fun AppTheme(content: @Composable () -> Unit) {
val colors = vm.getColors() val colors = vm.getColors()
/*val systemUiController = rememberSystemUiController()*/ /*val systemUiController = rememberSystemUiController()*/
DesktopMaterialTheme(colors = colors, content = content) MaterialTheme(colors = colors) {
CompositionLocalProvider(
LocalScrollbarStyle provides ScrollbarStyle(
minimalHeight = 16.dp,
thickness = 8.dp,
shape = MaterialTheme.shapes.small,
hoverDurationMillis = 300,
unhoverColor = MaterialTheme.colors.onSurface.copy(alpha = 0.12f),
hoverColor = MaterialTheme.colors.onSurface.copy(alpha = 0.50f)
),
content = content
)
}
} }
private class AppThemeViewModel @Inject constructor( private class AppThemeViewModel @Inject constructor(

View File

@@ -42,9 +42,9 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.withStyle import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.WindowSize
import androidx.compose.ui.window.rememberWindowState import androidx.compose.ui.window.rememberWindowState
import ca.gosyer.build.BuildConfig import ca.gosyer.build.BuildConfig
import ca.gosyer.data.models.Extension import ca.gosyer.data.models.Extension
@@ -66,7 +66,7 @@ import java.util.Locale
@OptIn(DelicateCoroutinesApi::class) @OptIn(DelicateCoroutinesApi::class)
fun openExtensionsMenu() { fun openExtensionsMenu() {
launchApplication { launchApplication {
val state = rememberWindowState(size = WindowSize(550.dp, 700.dp)) val state = rememberWindowState(size = DpSize(550.dp, 700.dp))
ThemedWindow(::exitApplication, state, title = BuildConfig.NAME) { ThemedWindow(::exitApplication, state, title = BuildConfig.NAME) {
Surface { Surface {
ExtensionsMenu() ExtensionsMenu()

View File

@@ -7,7 +7,8 @@
package ca.gosyer.ui.sources package ca.gosyer.ui.sources
import androidx.compose.animation.Crossfade import androidx.compose.animation.Crossfade
import androidx.compose.foundation.BoxWithTooltip import androidx.compose.foundation.TooltipArea
import androidx.compose.foundation.TooltipPlacement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@@ -34,6 +35,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.shadow import androidx.compose.ui.draw.shadow
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import ca.gosyer.build.BuildConfig import ca.gosyer.build.BuildConfig
import ca.gosyer.ui.base.components.ActionIcon import ca.gosyer.ui.base.components.ActionIcon
@@ -133,7 +135,7 @@ fun SourcesMenu(bundle: Bundle, onSourceSettingsClick: (Long) -> Unit, onMangaCl
Surface(elevation = 1.dp) { Surface(elevation = 1.dp) {
LazyColumn(Modifier.fillMaxHeight().width(64.dp)) { LazyColumn(Modifier.fillMaxHeight().width(64.dp)) {
items(sourceTabs) { source -> items(sourceTabs) { source ->
BoxWithTooltip( TooltipArea(
{ {
Surface( Surface(
modifier = Modifier.shadow(4.dp), modifier = Modifier.shadow(4.dp),
@@ -143,7 +145,10 @@ fun SourcesMenu(bundle: Bundle, onSourceSettingsClick: (Long) -> Unit, onMangaCl
Text(source?.name ?: stringResource("sources_home"), modifier = Modifier.padding(10.dp)) Text(source?.name ?: stringResource("sources_home"), modifier = Modifier.padding(10.dp))
} }
}, },
modifier = Modifier.size(64.dp) modifier = Modifier.size(64.dp),
tooltipPlacement = TooltipPlacement.CursorPoint(
offset = DpOffset(0.dp, 16.dp)
)
) { ) {
Box(Modifier.fillMaxSize()) { Box(Modifier.fillMaxSize()) {
val modifier = Modifier val modifier = Modifier

View File

@@ -6,7 +6,7 @@
package ca.gosyer.ui.sources.components package ca.gosyer.ui.sources.components
import androidx.compose.foundation.BoxWithTooltip import androidx.compose.foundation.TooltipArea
import androidx.compose.foundation.VerticalScrollbar import androidx.compose.foundation.VerticalScrollbar
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
@@ -97,7 +97,7 @@ fun SourceItem(
serverUrl: String, serverUrl: String,
onSourceClicked: (Source) -> Unit onSourceClicked: (Source) -> Unit
) { ) {
BoxWithTooltip( TooltipArea(
{ {
Surface( Surface(
modifier = Modifier.shadow(4.dp), modifier = Modifier.shadow(4.dp),

View File

@@ -7,19 +7,19 @@
package ca.gosyer.util.compose package ca.gosyer.util.compose
import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.toComposeImageBitmap
import ca.gosyer.data.server.Http import ca.gosyer.data.server.Http
import io.ktor.client.request.HttpRequestBuilder import io.ktor.client.request.HttpRequestBuilder
import io.ktor.client.request.get import io.ktor.client.request.get
import io.ktor.utils.io.ByteReadChannel import io.ktor.utils.io.ByteReadChannel
import io.ktor.utils.io.jvm.javaio.copyTo import io.ktor.utils.io.jvm.javaio.copyTo
import org.jetbrains.skija.Image import org.jetbrains.skia.Image
import java.io.ByteArrayOutputStream import java.io.ByteArrayOutputStream
import java.nio.file.Path import java.nio.file.Path
import kotlin.io.path.readBytes import kotlin.io.path.readBytes
fun imageFromFile(file: Path): ImageBitmap { fun imageFromFile(file: Path): ImageBitmap {
return Image.makeFromEncoded(file.readBytes()).asImageBitmap() return Image.makeFromEncoded(file.readBytes()).toComposeImageBitmap()
} }
suspend fun imageFromUrl(client: Http, url: String, block: HttpRequestBuilder.() -> Unit): ImageBitmap { suspend fun imageFromUrl(client: Http, url: String, block: HttpRequestBuilder.() -> Unit): ImageBitmap {
@@ -27,5 +27,5 @@ suspend fun imageFromUrl(client: Http, url: String, block: HttpRequestBuilder.()
client.get<ByteReadChannel>(url, block).copyTo(it) client.get<ByteReadChannel>(url, block).copyTo(it)
it.toByteArray() it.toByteArray()
} }
return Image.makeFromEncoded(bytes).asImageBitmap() return Image.makeFromEncoded(bytes).toComposeImageBitmap()
} }

View File

@@ -29,6 +29,7 @@ fun ThemedWindow(
title: String = "Untitled", title: String = "Untitled",
icon: Painter? = null, icon: Painter? = null,
undecorated: Boolean = false, undecorated: Boolean = false,
transparent: Boolean = false,
resizable: Boolean = true, resizable: Boolean = true,
enabled: Boolean = true, enabled: Boolean = true,
focusable: Boolean = true, focusable: Boolean = true,
@@ -39,18 +40,19 @@ fun ThemedWindow(
) { ) {
val resources = remember { AppScope.getInstance<XmlResourceBundle>() } val resources = remember { AppScope.getInstance<XmlResourceBundle>() }
Window( Window(
onCloseRequest, onCloseRequest = onCloseRequest,
state, state = state,
visible, visible = visible,
title, title = title,
icon, icon = icon,
undecorated, undecorated = undecorated,
resizable, transparent = transparent,
enabled, resizable = resizable,
focusable, enabled = enabled,
alwaysOnTop, focusable = focusable,
onPreviewKeyEvent, alwaysOnTop = alwaysOnTop,
onKeyEvent onPreviewKeyEvent = onPreviewKeyEvent,
onKeyEvent = onKeyEvent
) { ) {
setIcon() setIcon()
CompositionLocalProvider( CompositionLocalProvider(