package com.craigvg.lichun_android.ui.components.buttons import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.LocalView import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import com.craigvg.lichun_android.ui.theme.AppColors import com.craigvg.lichun_android.utils.HapticFeedback /** * Icon button with circular gradient background, shadow, and haptic feedback. * Ported from iOS CozyIconButton.swift */ @Composable fun CozyIconButton( icon: ImageVector, contentDescription: String?, onClick: () -> Unit, modifier: Modifier = Modifier, color: Color = AppColors.primary, size: Dp = 44.dp ) { val view = LocalView.current val iconSize = size * 0.45f val darkerColor = color.copy( red = (color.red * 0.9f).coerceIn(0f, 1f), green = (color.green * 0.9f).coerceIn(0f, 1f), blue = (color.blue * 0.9f).coerceIn(0f, 1f) ) androidx.compose.material3.IconButton( onClick = { HapticFeedback.light(view) onClick() }, modifier = modifier.size(size) ) { Box( modifier = Modifier .size(size) .shadow( elevation = 6.dp, shape = CircleShape, ambientColor = color.copy(alpha = 0.4f), spotColor = color.copy(alpha = 0.4f) ) .background( brush = Brush.linearGradient(colors = listOf(color, darkerColor)), shape = CircleShape ), contentAlignment = Alignment.Center ) { Icon( imageVector = icon, contentDescription = contentDescription, tint = Color.White, modifier = Modifier.size(iconSize) ) } } }