Skip to content

Instantly share code, notes, and snippets.

View fvilarino's full-sized avatar

Francesc Vilariño Güell fvilarino

View GitHub Profile
@fvilarino
fvilarino / chip_selector_final.kt
Last active March 18, 2024 00:18
Chip Selector - Final
private const val AnimationDurationMillis = 600
enum class SelectionMode(val index: Int) {
Single(0),
Multiple(1);
companion object {
fun fromIndex(index: Int) = entries.firstOrNull { it.index == index } ?: Single
}
}
@fvilarino
fvilarino / chip_selector_chip_selector.kt
Created March 17, 2024 23:44
Chip Selector - Chip Selector
@OptIn(ExperimentalLayoutApi::class)
@Composable
fun ChipsSelector(
// 1
state: ChipSelectorState,
// 2
modifier: Modifier = Modifier,
horizontalArrangement: Arrangement.Horizontal = Arrangement.spacedBy(16.dp),
verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(16.dp),
) {
@fvilarino
fvilarino / cihp_selector_state_holder_impl.kt
Last active March 18, 2024 00:18
Chip Selector - State Holder Impl
class ChipSelectorStateImpl(
// 1
override val chips: List<String>,
// 2
selectedChips: List<String> = emptyList(),
// 3
val mode: SelectionMode = SelectionMode.Single,
) : ChipSelectorState {
// 4
override var selectedChips by mutableStateOf(selectedChips)
@fvilarino
fvilarino / chip_selector_state_holder_api.kt
Created March 17, 2024 23:12
Cihp Selector - State Holder API
// 1
enum class SelectionMode {
Single,
Multiple,
}
// 2
@Stable
interface ChipSelectorState {
// 3
@fvilarino
fvilarino / chip_selector_text_alpha.kt
Created March 17, 2024 03:40
Chip Selector - Text Alpha
@Composable
fun Chip(
label: String,
isSelected: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
val transition = updateTransition(targetState = isSelected, label = "transition")
// 1
@fvilarino
fvilarino / chip_selector_animated_background.kt
Last active March 17, 2024 03:17
Chip Selector - Animated Background
@Composable
fun Chip(
label: String,
isSelected: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
// omitted for brevity
val transition = updateTransition(targetState = isSelected, label = "transition")
val pathFraction by transition.animateFloat(
@fvilarino
fvilarino / chip_selector_animated_border.kt
Created March 17, 2024 03:03
Chip Selector - Animated Border
@Composable
fun Chip(
label: String,
isSelected: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
val interactionSource = remember { MutableInteractionSource() }
val borderColor = MaterialTheme.colorScheme.onSurface
val backgroundColor = if (isSelected) {
@fvilarino
fvilarino / chip_selector_chip_with_border.kt
Last active March 17, 2024 01:22
Chip Selector - Chip with Border
@Composable
fun Chip(
label: String,
isSelected: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
// 1
val borderColor = MaterialTheme.colorScheme.onSurface
val backgroundColor = if (isSelected) {
@fvilarino
fvilarino / chip_selector_basic_chip.kt
Last active March 17, 2024 00:41
Chip Selector - Basic Chip
@Composable
fun Chip(
// 1
label: String,
// 2
isSelected: Boolean,
// 3
onClick: () -> Unit,
// 4
modifier: Modifier = Modifier
@fvilarino
fvilarino / stability_stable_composables.txt
Created November 29, 2023 23:15
Stability - Stable Composables
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SampleUi(
stable state: State
)
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun PrimitivesMethod(
stable value: Int
stable prompt: String
stable modifier: Modifier? = @static Companion
)
restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun CollectionsMethod(
stable values: Set<Int>