package com.suno.android.common_ui.components.drawer import androidx.compose.material3.DrawerState import androidx.compose.material3.DrawerValue import androidx.compose.material3.ModalNavigationDrawer import androidx.compose.material3.rememberDrawerState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.unit.LayoutDirection enum class DrawerSide { Start, End, } @Composable fun ModalDrawer( drawerContent: @Composable () -> Unit, modifier: Modifier = Modifier, drawerState: DrawerState = rememberDrawerState(DrawerValue.Closed), drawerSide: DrawerSide, gesturesEnabled: Boolean = true, content: @Composable () -> Unit, ) { val actualLayoutDirection = LocalLayoutDirection.current CompositionLocalProvider( LocalLayoutDirection provides when (drawerSide) { DrawerSide.Start -> LayoutDirection.Ltr DrawerSide.End -> LayoutDirection.Rtl }, ) { ModalNavigationDrawer( drawerState = drawerState, modifier = modifier, gesturesEnabled = gesturesEnabled, drawerContent = { CompositionLocalProvider( LocalLayoutDirection provides actualLayoutDirection, ) { drawerContent() } }, content = { CompositionLocalProvider( LocalLayoutDirection provides actualLayoutDirection, ) { content() } }, ) } } @Composable fun OptionalModalDrawer( enabled: Boolean, drawerContent: @Composable () -> Unit, modifier: Modifier = Modifier, drawerState: DrawerState = rememberDrawerState(DrawerValue.Closed), drawerSide: DrawerSide, gesturesEnabled: Boolean = true, content: @Composable () -> Unit, ) { if (enabled) { ModalDrawer( drawerContent = drawerContent, modifier = modifier, drawerState = drawerState, drawerSide = drawerSide, gesturesEnabled = gesturesEnabled, content = content, ) } else { content() } }