package com.suno.android.common_ui.components.radial import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.rememberScrollableState import androidx.compose.foundation.gestures.scrollable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.size import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @Composable fun RadialScrollingContent( items: List<@Composable () -> Unit>, innerRadius: Float, originX: Float, originY: Float, ) { var angle by remember { mutableFloatStateOf(0f) } val scrollState = rememberScrollableState { delta -> angle += delta / 10 // Adjust scrolling speed delta } Box( modifier = Modifier .size( size = (2 * innerRadius).dp, ) .scrollable( state = scrollState, orientation = Orientation.Vertical, ), ) { RadialLayout( modifier = Modifier.size((2 * innerRadius).dp), items = items, radius = innerRadius, angle = angle, originX = originX, originY = originY, ) } } @Preview( showSystemUi = true, ) @Composable private fun RadialScrollingContent_Preview() { val testItems: List<@Composable () -> Unit> = (0..100).map { return Text(text = "$it") } RadialScrollingContent( items = testItems, innerRadius = 1000f, originX = 500f, originY = 500f, ) }