Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

대시보드 디자인 개선안 반영 #74

Merged
merged 19 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ fun DobeDobeBottomSheetScaffold(
topBar = topBar,
snackbarHost = snackbarHost,
content = content,
sheetContainerColor = DobeDobeTheme.colors.white,
containerColor = DobeDobeTheme.colors.white,
sheetContainerColor = DobeDobeTheme.colors.gray50,
containerColor = DobeDobeTheme.colors.gray50,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,41 +1,53 @@
package com.chipichipi.dobedobe.core.designsystem.component

import androidx.annotation.DrawableRes
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.semantics.role
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.chipichipi.dobedobe.core.designsystem.icon.DobeDobeIcons
import com.chipichipi.dobedobe.core.designsystem.theme.DobeDobeTheme

@Composable
fun DobeDobeCheckBox(
size: Dp,
checked: Boolean,
modifier: Modifier = Modifier,
onCheckedChange: ((Boolean) -> Unit)? = null,
enabled: Boolean = true,
@DrawableRes checkedIconRes: Int = DobeDobeIcons.Checked,
@DrawableRes uncheckedIconRes: Int = DobeDobeIcons.Unchecked,
) {
IconButton(
onClick = { onCheckedChange?.invoke(!checked) },
Box(
modifier = modifier
.size(44.dp)
.semantics {
role = Role.Checkbox
},
enabled = enabled,
.size(size)
.clickable(
onClick = { onCheckedChange?.invoke(!checked) },
enabled = enabled,
role = Role.Checkbox,
interactionSource = remember { MutableInteractionSource() },
indication = ripple(
bounded = false,
radius = size / 2,
),
),
contentAlignment = Alignment.Center,
) {
val iconRes = if (checked) checkedIconRes else uncheckedIconRes

Icon(
imageVector = ImageVector.vectorResource(iconRes),
contentDescription = "checked",
Expand All @@ -49,8 +61,8 @@ fun DobeDobeCheckBox(
private fun DobeDobeCheckBoxPreview() {
DobeDobeTheme {
Column {
DobeDobeCheckBox(checked = true, enabled = true)
DobeDobeCheckBox(checked = false, enabled = true)
DobeDobeCheckBox(checked = true, enabled = true, size = 36.dp)
DobeDobeCheckBox(checked = false, enabled = true, size = 36.dp)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ object DobeDobeIcons {
val Setting = R.drawable.ic_setting_24
val ArrowForward = R.drawable.ic_arrow_forward_24
val Tap = R.drawable.ic_tap_24
val Year2025 = R.drawable.ic_year_36
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ data class DobeDobeTypography internal constructor(
heading1: TextStyle = TextStyle(
fontFamily = systemFontFamily,
fontWeight = FontWeight.SemiBold,
fontSize = 22.sp,
lineHeight = 33.sp,
fontSize = 20.sp,
lineHeight = 30.sp,
letterSpacing = -(0.396).sp,
lineHeightStyle = LineHeightStyle(
alignment = LineHeightStyle.Alignment.Proportional,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package com.chipichipi.dobedobe.core.designsystem.util

import android.graphics.BlurMaskFilter
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithCache
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Paint
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.drawOutline
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp

fun Modifier.dropShadow(
shape: Shape,
color: Color,
blur: Dp,
offsetY: Dp = 0.dp,
offsetX: Dp = 0.dp,
spread: Dp = 0.dp,
) = this.drawWithCache {
val spreadPx = spread.toPx()
val blurPx = blur.toPx()

val shadowSize = Size(
width = size.width + spreadPx,
height = size.height + spreadPx,
)
val shadowOutline = shape.createOutline(
size = shadowSize,
layoutDirection = layoutDirection,
density = this,
)

val paint = Paint().apply {
this.color = color
}

if (blurPx > 0) {
paint.asFrameworkPaint().apply {
maskFilter = BlurMaskFilter(blurPx, BlurMaskFilter.Blur.NORMAL)
}
}

onDrawBehind {
drawIntoCanvas { canvas ->
canvas.save()
(spreadPx / 2f).let {
canvas.translate(offsetX.toPx() - it, offsetY.toPx() - it)
}
canvas.drawOutline(shadowOutline, paint)
canvas.restore()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -204,31 +204,42 @@ private fun DashboardBody(
),
scaffoldState = bottomSheetScaffoldState,
sheetContent = {
val isExpanded by remember {
derivedStateOf { bottomSheetScaffoldState.bottomSheetState.targetValue == SheetValue.Expanded }
val isNotPartiallyExpanded by remember {
derivedStateOf {
bottomSheetScaffoldState.bottomSheetState.let { state ->
state.currentValue == SheetValue.Expanded || state.targetValue == SheetValue.Expanded
}
}
}
val coroutineScope = rememberCoroutineScope()

GoalBottomSheetContent(
isExpanded = isExpanded,
isNotPartiallyExpanded = isNotPartiallyExpanded,
goals = uiState.goals,
onGoalToggled = onGoalToggled,
onAddGoalClicked = navigateToAddGoal,
onGoalClicked = navigateToGoalDetail,
onTapSearchBar = navigateToSearchGoal,
onInfoCardClicked = {
coroutineScope.launch {
if (!isNotPartiallyExpanded) {
bottomSheetScaffoldState.bottomSheetState.expand()
}
}
},
modifier = Modifier
.padding(top = 8.dp),
)

BackHandler(
enabled = isExpanded,
enabled = isNotPartiallyExpanded,
) {
coroutineScope.launch {
bottomSheetScaffoldState.bottomSheetState.partialExpand()
}
}
},
sheetPeekHeight = 330.dp,
sheetPeekHeight = 215.dp,
) { innerPadding ->
Box(
modifier = Modifier
Expand Down
Loading