From c0713e433c44b3c1414e9967f11d52e0a9192175 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Fri, 10 Nov 2023 23:22:00 +0800 Subject: [PATCH] feat: add selectable, rippleSelectable, rememberRipple --- .../flexiui/interaction/Interaction.kt | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/interaction/Interaction.kt b/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/interaction/Interaction.kt index e05c13f..fe359a0 100644 --- a/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/interaction/Interaction.kt +++ b/flexiui-core/src/commonMain/kotlin/com/highcapable/flexiui/interaction/Interaction.kt @@ -25,16 +25,25 @@ package com.highcapable.flexiui.interaction import androidx.compose.foundation.Indication import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.material.ripple.rememberRipple import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.semantics.Role +import androidx.compose.ui.unit.Dp import com.highcapable.flexiui.LocalColors import androidx.compose.foundation.clickable as foundationClickable +import androidx.compose.foundation.selection.selectable as foundationSelectable import androidx.compose.foundation.selection.toggleable as foundationToggleable +import androidx.compose.material.ripple.rememberRipple as materialRememberRipple + +@Composable +fun rememberRipple( + bounded: Boolean = true, + radius: Dp = Dp.Unspecified, + color: Color = Interaction.rippleColor +) = materialRememberRipple(bounded, radius, color) @Composable fun Modifier.clickable( @@ -56,6 +65,16 @@ fun Modifier.toggleable( onValueChange: (Boolean) -> Unit ) = foundationToggleable(value, interactionSource, indication, enabled, role, onValueChange) +@Composable +fun Modifier.selectable( + selected: Boolean, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + indication: Indication? = null, + enabled: Boolean = true, + role: Role? = null, + onClick: () -> Unit +) = foundationSelectable(selected, interactionSource, indication, enabled, role, onClick) + @Composable fun Modifier.rippleClickable( rippleColor: Color = Interaction.rippleColor, @@ -92,6 +111,24 @@ fun Modifier.rippleToggleable( onValueChange = onValueChange ) +@Composable +fun Modifier.rippleSelectable( + selected: Boolean, + rippleColor: Color = Interaction.rippleColor, + bounded: Boolean = true, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + enabled: Boolean = true, + role: Role? = null, + onClick: () -> Unit +) = selectable( + selected = selected, + interactionSource = interactionSource, + indication = rememberRipple(bounded = bounded, color = rippleColor), + enabled = enabled, + role = role, + onClick = onClick +) + object Interaction { val rippleColor: Color @Composable