package com.craigvg.lichun_android.ui.components.navigation import androidx.compose.animation.* import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.unit.dp import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.ui.theme.AppSpacing import com.craigvg.lichun_android.ui.theme.AppTypography data class QuickAction( val icon: ImageVector, val label: String, val onClick: () -> Unit ) @Composable fun QuickActionsMenu( actions: List, isExpanded: Boolean, onToggle: () -> Unit, modifier: Modifier = Modifier ) { Column( modifier = modifier, horizontalAlignment = Alignment.End, verticalArrangement = Arrangement.spacedBy(AppSpacing.sm) ) { AnimatedVisibility( visible = isExpanded, enter = fadeIn() + expandVertically(), exit = fadeOut() + shrinkVertically() ) { Column( horizontalAlignment = Alignment.End, verticalArrangement = Arrangement.spacedBy(AppSpacing.sm) ) { actions.forEach { action -> Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(AppSpacing.sm) ) { Card( shape = RoundedCornerShape(AppSpacing.smallCornerRadius), colors = CardDefaults.cardColors(containerColor = AppColors.surfaceElevated), elevation = CardDefaults.cardElevation(defaultElevation = 4.dp) ) { Text( text = action.label, style = AppTypography.caption, color = AppColors.primaryText, modifier = Modifier.padding(horizontal = AppSpacing.sm, vertical = AppSpacing.xs) ) } FloatingActionButton( onClick = action.onClick, modifier = Modifier.size(40.dp), containerColor = AppColors.primary, contentColor = Color.White, shape = CircleShape ) { Icon( imageVector = action.icon, contentDescription = action.label, modifier = Modifier.size(20.dp) ) } } } } } FloatingActionButton( onClick = onToggle, containerColor = AppColors.primary, contentColor = Color.White, shape = CircleShape ) { Icon( imageVector = if (isExpanded) Icons.Default.Close else Icons.Default.Add, contentDescription = if (isExpanded) "Close menu" else "Open menu" ) } } }