package com.suno.android.common_ui.components.waveform import androidx.compose.foundation.background import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.draggable import androidx.compose.foundation.gestures.rememberDraggableState import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.width import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.suno.android.common_ui.R import com.suno.android.common_ui.components.timebox.TimeBoxPlaceableScope import com.suno.android.common_ui.theme.ExtendedTheme import kotlin.time.Duration @Composable fun TimeBoxPlaceableScope.StartOnlyCropHandle( startTime: Duration, duration: Duration, onStartTimeDrag: (delta: Duration) -> Unit, modifier: Modifier = Modifier, onDragEnd: () -> Unit = {}, ) { val density = LocalDensity.current var isStartDragging by remember { mutableStateOf(false) } var isEndDragging by remember { mutableStateOf(false) } var isCropperDragging by remember { mutableStateOf(false) } CompositionLocalProvider( LocalLayoutDirection provides LayoutDirection.Ltr, ) { Row( modifier = modifier .atTime(startTime to duration) .clip(MaterialTheme.shapes.small), ) { CropHandle( painter = painterResource(R.drawable.extend_left), contentDescription = stringResource(com.suno.android.common_res.R.string.extend_left), modifier = Modifier .fillMaxHeight() .width(24.dp) .draggable( orientation = Orientation.Horizontal, state = rememberDraggableState { delta -> val timeDelta = with(density) { delta.toDp() / resolution } onStartTimeDrag(timeDelta) }, onDragStarted = { isStartDragging = true }, onDragStopped = { isStartDragging = false if (!isEndDragging && !isCropperDragging) { onDragEnd() } }, ), ) Box( contentAlignment = Alignment.TopCenter, modifier = Modifier .fillMaxHeight() .weight(1f), ) { Spacer( modifier = Modifier .matchParentSize() .background(color = ExtendedTheme.colors.sunoPink.copy(alpha = .5f)), ) } } } }