From ade14e28fc4eb01b0785c7349ece90e183033a7d Mon Sep 17 00:00:00 2001 From: ulfrxdev Date: Sat, 6 Jun 2026 10:28:05 +0200 Subject: [PATCH] Fix glass style in meal plan editor --- .../ui/components/sheet/RecipeBottomSheet.kt | 27 +---- .../mealplaneditor/MealPlanEditorEntry.kt | 104 ++++++++++-------- 2 files changed, 64 insertions(+), 67 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/components/sheet/RecipeBottomSheet.kt b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/components/sheet/RecipeBottomSheet.kt index 0296ef2..397a7a8 100644 --- a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/components/sheet/RecipeBottomSheet.kt +++ b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/components/sheet/RecipeBottomSheet.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -37,9 +36,6 @@ import com.composables.core.Scrim import com.composables.core.Sheet import com.composables.core.SheetDetent import com.composables.core.rememberModalBottomSheetState -import dev.ulfrx.recipe.ui.components.glass.GlassBackdropSource -import dev.ulfrx.recipe.ui.components.glass.LocalGlassBackdropState -import dev.ulfrx.recipe.ui.components.glass.rememberGlassBackdropState import dev.ulfrx.recipe.ui.theme.RecipeTheme import org.jetbrains.compose.resources.stringResource import recipe.composeapp.generated.resources.Res @@ -88,25 +84,12 @@ fun RecipeBottomSheet( @Composable private fun BottomSheetScope.SheetBody(content: @Composable BoxScope.() -> Unit) { - val backdrop = rememberGlassBackdropState() - val spacing = RecipeTheme.spacing + Box(modifier = Modifier.fillMaxWidth().fillMaxHeight(SHEET_HEIGHT_FRACTION)) { + Box(modifier = Modifier.fillMaxSize(), content = content) - CompositionLocalProvider(LocalGlassBackdropState provides backdrop) { - Box( - modifier = - Modifier - .fillMaxWidth() - .fillMaxHeight(SHEET_HEIGHT_FRACTION) - .background(RecipeTheme.colors.background), - ) { - GlassBackdropSource(state = backdrop, modifier = Modifier.fillMaxSize()) { - Box(modifier = Modifier.fillMaxSize(), content = content) - } - - SheetHandle( - modifier = Modifier.align(Alignment.TopCenter).padding(top = spacing.sm), - ) - } + SheetHandle( + modifier = Modifier.align(Alignment.TopCenter).padding(top = RecipeTheme.spacing.sm), + ) } } diff --git a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/screens/mealplaneditor/MealPlanEditorEntry.kt b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/screens/mealplaneditor/MealPlanEditorEntry.kt index b274fa4..7aaeb59 100644 --- a/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/screens/mealplaneditor/MealPlanEditorEntry.kt +++ b/composeApp/src/commonMain/kotlin/dev/ulfrx/recipe/ui/screens/mealplaneditor/MealPlanEditorEntry.kt @@ -1,5 +1,6 @@ package dev.ulfrx.recipe.ui.screens.mealplaneditor +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row @@ -8,6 +9,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.text.BasicText import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -17,6 +19,9 @@ import com.composables.icons.lucide.ArrowLeft import com.composables.icons.lucide.Lucide import com.composables.icons.lucide.Plus import dev.ulfrx.recipe.ui.components.glass.CircleGlassButton +import dev.ulfrx.recipe.ui.components.glass.GlassBackdropSource +import dev.ulfrx.recipe.ui.components.glass.LocalGlassBackdropState +import dev.ulfrx.recipe.ui.components.glass.rememberGlassBackdropState import dev.ulfrx.recipe.ui.theme.RecipeTheme import org.jetbrains.compose.resources.stringResource import recipe.composeapp.generated.resources.Res @@ -30,58 +35,67 @@ internal fun MealPlanEditorScreen( onBack: () -> Unit, onConfirm: (PlannedMealUi) -> Unit, ) { + val backdrop = rememberGlassBackdropState() val state by viewModel.state.collectAsStateWithLifecycle() val spacing = RecipeTheme.spacing - Box(modifier = Modifier.fillMaxSize()) { - when (val s = state) { - is MealPlanEditorState.Editing -> { - MealPlanEditorContent( - editing = s, - catalog = sampleAddableIngredients, - topChromeInset = TopActionsTopInset, - topChromeHeight = TopPillHeight, - onSelectDate = viewModel::selectDate, - onSetCalendarExpanded = viewModel::setCalendarExpanded, - onSelectSlot = viewModel::selectSlot, - onSetServings = viewModel::setServings, - onSelectSubstitution = viewModel::selectSubstitution, - onRemoveRecipeIngredient = viewModel::removeRecipeIngredient, - onRemoveAddedIngredient = viewModel::removeAddedIngredient, - onRestoreRemoved = viewModel::restoreRemovedIngredients, - onAddIngredient = viewModel::addIngredient, - ) + CompositionLocalProvider(LocalGlassBackdropState provides backdrop) { + Box( + modifier = + Modifier + .fillMaxSize() + .background(RecipeTheme.colors.background), + ) { + when (val s = state) { + is MealPlanEditorState.Editing -> { + GlassBackdropSource(state = backdrop, modifier = Modifier.fillMaxSize()) { + MealPlanEditorContent( + editing = s, + catalog = sampleAddableIngredients, + topChromeInset = TopActionsTopInset, + topChromeHeight = TopPillHeight, + onSelectDate = viewModel::selectDate, + onSetCalendarExpanded = viewModel::setCalendarExpanded, + onSelectSlot = viewModel::selectSlot, + onSetServings = viewModel::setServings, + onSelectSubstitution = viewModel::selectSubstitution, + onRemoveRecipeIngredient = viewModel::removeRecipeIngredient, + onRemoveAddedIngredient = viewModel::removeAddedIngredient, + onRestoreRemoved = viewModel::restoreRemovedIngredients, + onAddIngredient = viewModel::addIngredient, + ) + } - EditorChromeRow( - showConfirm = true, - onBack = onBack, - onConfirm = { viewModel.confirm()?.let(onConfirm) }, - modifier = - Modifier - .align(Alignment.TopCenter) - .fillMaxWidth() - .padding(top = TopActionsTopInset, start = spacing.lg, end = spacing.lg), - ) - } - - MealPlanEditorState.NotFound -> { - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - BasicText( - text = stringResource(Res.string.meal_plan_editor_not_found), - style = RecipeTheme.typography.body, + EditorChromeRow( + showConfirm = true, + onBack = onBack, + onConfirm = { viewModel.confirm()?.let(onConfirm) }, + modifier = + Modifier + .align(Alignment.TopCenter) + .fillMaxWidth() + .padding(top = TopActionsTopInset, start = spacing.lg, end = spacing.lg), ) } - EditorChromeRow( - showConfirm = false, - onBack = onBack, - onConfirm = {}, - modifier = - Modifier - .align(Alignment.TopCenter) - .fillMaxWidth() - .padding(top = TopActionsTopInset, start = spacing.lg, end = spacing.lg), - ) + MealPlanEditorState.NotFound -> { + BasicText( + text = stringResource(Res.string.meal_plan_editor_not_found), + style = RecipeTheme.typography.body, + modifier = Modifier.align(Alignment.Center), + ) + + EditorChromeRow( + showConfirm = false, + onBack = onBack, + onConfirm = {}, + modifier = + Modifier + .align(Alignment.TopCenter) + .fillMaxWidth() + .padding(top = TopActionsTopInset, start = spacing.lg, end = spacing.lg), + ) + } } } }