From 297e285f3287cdb9881f3f35da0b51286817a11a Mon Sep 17 00:00:00 2001 From: moondev03 Date: Fri, 3 Apr 2026 15:00:28 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor:=20Snackbar=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=9C=84=EC=B9=98=20=EC=9D=B4=EB=8F=99=20(`modal`?= =?UTF-8?q?=20=EC=84=9C=EB=B8=8C=20=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/team/prezel/ui/DoubleBackToExitHandler.kt | 4 ++-- .../prezel/core/designsystem/component/PrezelNavigationBar.kt | 2 +- .../component/{ => modal}/snackbar/PrezelSnackbar.kt | 2 +- .../component/{ => modal}/snackbar/SnackbarHost.kt | 2 +- .../com/team/prezel/feature/login/impl/landing/LoginScreen.kt | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) rename Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/{ => modal}/snackbar/PrezelSnackbar.kt (98%) rename Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/{ => modal}/snackbar/SnackbarHost.kt (96%) diff --git a/Prezel/app/src/main/java/com/team/prezel/ui/DoubleBackToExitHandler.kt b/Prezel/app/src/main/java/com/team/prezel/ui/DoubleBackToExitHandler.kt index 711a582b..182126b8 100644 --- a/Prezel/app/src/main/java/com/team/prezel/ui/DoubleBackToExitHandler.kt +++ b/Prezel/app/src/main/java/com/team/prezel/ui/DoubleBackToExitHandler.kt @@ -10,8 +10,8 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalResources import com.team.prezel.R -import com.team.prezel.core.designsystem.component.snackbar.dismissById -import com.team.prezel.core.designsystem.component.snackbar.showPrezelSnackbar +import com.team.prezel.core.designsystem.component.modal.snackbar.dismissById +import com.team.prezel.core.designsystem.component.modal.snackbar.showPrezelSnackbar import com.team.prezel.core.navigation.NavigationState import com.team.prezel.core.ui.LocalSnackbarHostState diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelNavigationBar.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelNavigationBar.kt index 17d92030..36c67036 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelNavigationBar.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelNavigationBar.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp -import com.team.prezel.core.designsystem.component.snackbar.PrezelSnackbarHost +import com.team.prezel.core.designsystem.component.modal.snackbar.PrezelSnackbarHost import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.theme.PrezelTheme diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/PrezelSnackbar.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/snackbar/PrezelSnackbar.kt similarity index 98% rename from Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/PrezelSnackbar.kt rename to Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/snackbar/PrezelSnackbar.kt index 9b0bb701..04510ca2 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/PrezelSnackbar.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/snackbar/PrezelSnackbar.kt @@ -1,4 +1,4 @@ -package com.team.prezel.core.designsystem.component.snackbar +package com.team.prezel.core.designsystem.component.modal.snackbar import androidx.annotation.DrawableRes import androidx.compose.foundation.layout.Row diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/SnackbarHost.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/snackbar/SnackbarHost.kt similarity index 96% rename from Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/SnackbarHost.kt rename to Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/snackbar/SnackbarHost.kt index 41d297ac..30a94fce 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/SnackbarHost.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/snackbar/SnackbarHost.kt @@ -1,4 +1,4 @@ -package com.team.prezel.core.designsystem.component.snackbar +package com.team.prezel.core.designsystem.component.modal.snackbar import androidx.annotation.DrawableRes import androidx.compose.material3.SnackbarDuration diff --git a/Prezel/feature/login/impl/src/main/java/com/team/prezel/feature/login/impl/landing/LoginScreen.kt b/Prezel/feature/login/impl/src/main/java/com/team/prezel/feature/login/impl/landing/LoginScreen.kt index 67a8a4c0..bb6ebecc 100644 --- a/Prezel/feature/login/impl/src/main/java/com/team/prezel/feature/login/impl/landing/LoginScreen.kt +++ b/Prezel/feature/login/impl/src/main/java/com/team/prezel/feature/login/impl/landing/LoginScreen.kt @@ -36,7 +36,7 @@ import com.team.prezel.core.designsystem.component.actions.button.config.ButtonH import com.team.prezel.core.designsystem.component.actions.button.config.ButtonSize import com.team.prezel.core.designsystem.component.actions.button.config.ButtonType import com.team.prezel.core.designsystem.component.actions.button.config.PrezelButtonDefaults -import com.team.prezel.core.designsystem.component.snackbar.showPrezelSnackbar +import com.team.prezel.core.designsystem.component.modal.snackbar.showPrezelSnackbar import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.theme.PrezelTheme From ed473b6f0f39b1e982b0f16b569df4a3fcd873fd Mon Sep 17 00:00:00 2001 From: moondev03 Date: Fri, 3 Apr 2026 17:42:09 +0900 Subject: [PATCH 2/5] =?UTF-8?q?refactor:=20PrezelTheme=EC=9D=98=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=83=89?= =?UTF-8?q?=EC=83=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/team/prezel/core/designsystem/theme/PrezelTheme.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/theme/PrezelTheme.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/theme/PrezelTheme.kt index 5871eb49..c775a347 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/theme/PrezelTheme.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/theme/PrezelTheme.kt @@ -69,7 +69,7 @@ fun PrezelTheme( LocalPrezelSpacing provides PrezelSpacing, LocalPrezelStroke provides PrezelStroke, LocalTextStyle provides typographyScheme.body3Regular, - LocalContentColor provides colorScheme.textLarge, + LocalContentColor provides colorScheme.textRegular, content = content, ) } From d7b9736ba468b13c06cddb22a5457dfb8362fc1e Mon Sep 17 00:00:00 2001 From: moondev03 Date: Fri, 3 Apr 2026 17:42:36 +0900 Subject: [PATCH 3/5] =?UTF-8?q?feat:=20PrezelDialog=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/modal/dialog/PrezelDialog.kt | 108 ++++++++++++++++++ .../modal/dialog/PrezelDialogScope.kt | 73 ++++++++++++ 2 files changed, 181 insertions(+) create mode 100644 Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt create mode 100644 Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt new file mode 100644 index 00000000..501f7dbe --- /dev/null +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt @@ -0,0 +1,108 @@ +package com.team.prezel.core.designsystem.component.modal.dialog + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import com.team.prezel.core.designsystem.preview.BasicPreview +import com.team.prezel.core.designsystem.theme.PrezelTheme + +@Composable +fun PrezelDialog( + title: String, + description: String, + onDismiss: () -> Unit, + modifier: Modifier = Modifier, + content: @Composable PrezelDialogScope.() -> Unit, +) { + val scope = remember { PrezelDialogScope() } + + Dialog( + onDismissRequest = onDismiss, + properties = DialogProperties( + dismissOnClickOutside = false, + usePlatformDefaultWidth = false, + ), + ) { + Column( + modifier = modifier + .fillMaxWidth() + .padding(horizontal = PrezelTheme.spacing.V20) + .clip(shape = PrezelTheme.shapes.V12) + .background(color = PrezelTheme.colors.bgRegular) + .padding(horizontal = PrezelTheme.spacing.V24), + ) { + DialogContent( + title = title, + description = description, + ) + + ActionSection { scope.content() } + } + } +} + +@Composable +private fun DialogContent( + title: String, + description: String, + modifier: Modifier = Modifier, +) { + Column( + modifier = modifier.padding(vertical = PrezelTheme.spacing.V24), + ) { + Text(text = title, style = PrezelTheme.typography.title2Bold, color = PrezelTheme.colors.textLarge) + Spacer(modifier = Modifier.height(PrezelTheme.spacing.V12)) + Text(text = description, style = PrezelTheme.typography.body3Medium, color = PrezelTheme.colors.textRegular) + } +} + +@Composable +private fun ActionSection( + modifier: Modifier = Modifier, + content: @Composable () -> Unit, +) { + Box( + modifier = modifier + .fillMaxWidth() + .padding(bottom = PrezelTheme.spacing.V20), + ) { + Row( + modifier = Modifier.align(Alignment.CenterEnd), + horizontalArrangement = Arrangement.spacedBy(PrezelTheme.spacing.V32), + ) { + content() + } + } +} + +@BasicPreview +@Composable +private fun PrezelDialogPreview() { + PrezelTheme { + Box(modifier = Modifier.fillMaxSize()) { + PrezelDialog( + title = "Title", + description = "Description", + onDismiss = {}, + ) { + Action(label = "Action2") {} + Action(label = "Action1", type = PrezelDialogScope.ActionType.Good) {} + } + } + } +} diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt new file mode 100644 index 00000000..fb0ef381 --- /dev/null +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt @@ -0,0 +1,73 @@ +package com.team.prezel.core.designsystem.component.modal.dialog + +import androidx.compose.foundation.layout.LayoutScopeMarker +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.team.prezel.core.designsystem.component.base.PrezelTouchArea +import com.team.prezel.core.designsystem.preview.BasicPreview +import com.team.prezel.core.designsystem.preview.PreviewSection +import com.team.prezel.core.designsystem.preview.PreviewValueRow +import com.team.prezel.core.designsystem.theme.PrezelTheme + +@LayoutScopeMarker +class PrezelDialogScope { + enum class ActionType { + Default, + Good, + Bad, + } + + @Composable + fun Action( + label: String, + type: ActionType = ActionType.Default, + onClick: () -> Unit, + ) { + val labelColor = labelColor(type = type) + + PrezelTouchArea( + onClick = onClick, + shape = PrezelTheme.shapes.V4, + ) { + Text( + text = label, + style = PrezelTheme.typography.body2Medium, + color = labelColor, + modifier = Modifier.padding(vertical = PrezelTheme.spacing.V8), + ) + } + } + + @Composable + private fun labelColor(type: ActionType) = + when (type) { + ActionType.Default -> PrezelTheme.colors.textRegular + ActionType.Good -> PrezelTheme.colors.feedbackGoodRegular + ActionType.Bad -> PrezelTheme.colors.feedbackBadRegular + } +} + +@BasicPreview +@Composable +private fun PrezelDialogActionPreview() { + PrezelTheme { + PreviewSection( + title = "Dialog Action", + description = "Dialog에 사용되는 리소스입니다.", + ) { + with(PrezelDialogScope()) { + PreviewValueRow(name = "Default Action") { + Action(label = "Action", type = PrezelDialogScope.ActionType.Default) {} + } + PreviewValueRow(name = "Good Action") { + Action(label = "Action", type = PrezelDialogScope.ActionType.Good) {} + } + PreviewValueRow(name = "Bad Action") { + Action(label = "Action", type = PrezelDialogScope.ActionType.Bad) {} + } + } + } + } +} From 6e545297b0c3b8c18058f653e193b8c58f5f1ca8 Mon Sep 17 00:00:00 2001 From: moondev03 Date: Fri, 3 Apr 2026 17:46:09 +0900 Subject: [PATCH 4/5] =?UTF-8?q?refactor:=20PrezelDialog=20ActionType=20?= =?UTF-8?q?=EC=97=B4=EA=B1=B0=ED=98=95=20=EB=AA=85=EB=AA=85=20=EA=B7=9C?= =?UTF-8?q?=EC=B9=99=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/modal/dialog/PrezelDialog.kt | 2 +- .../modal/dialog/PrezelDialogScope.kt | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt index 501f7dbe..c76e6db4 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialog.kt @@ -101,7 +101,7 @@ private fun PrezelDialogPreview() { onDismiss = {}, ) { Action(label = "Action2") {} - Action(label = "Action1", type = PrezelDialogScope.ActionType.Good) {} + Action(label = "Action1", type = PrezelDialogScope.ActionType.GOOD) {} } } } diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt index fb0ef381..ab87ab6e 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt @@ -14,15 +14,15 @@ import com.team.prezel.core.designsystem.theme.PrezelTheme @LayoutScopeMarker class PrezelDialogScope { enum class ActionType { - Default, - Good, - Bad, + DEFAULT, + GOOD, + BAD, } @Composable fun Action( label: String, - type: ActionType = ActionType.Default, + type: ActionType = ActionType.DEFAULT, onClick: () -> Unit, ) { val labelColor = labelColor(type = type) @@ -43,9 +43,9 @@ class PrezelDialogScope { @Composable private fun labelColor(type: ActionType) = when (type) { - ActionType.Default -> PrezelTheme.colors.textRegular - ActionType.Good -> PrezelTheme.colors.feedbackGoodRegular - ActionType.Bad -> PrezelTheme.colors.feedbackBadRegular + ActionType.DEFAULT -> PrezelTheme.colors.textRegular + ActionType.GOOD -> PrezelTheme.colors.feedbackGoodRegular + ActionType.BAD -> PrezelTheme.colors.feedbackBadRegular } } @@ -59,13 +59,13 @@ private fun PrezelDialogActionPreview() { ) { with(PrezelDialogScope()) { PreviewValueRow(name = "Default Action") { - Action(label = "Action", type = PrezelDialogScope.ActionType.Default) {} + Action(label = "Action", type = PrezelDialogScope.ActionType.DEFAULT) {} } PreviewValueRow(name = "Good Action") { - Action(label = "Action", type = PrezelDialogScope.ActionType.Good) {} + Action(label = "Action", type = PrezelDialogScope.ActionType.GOOD) {} } PreviewValueRow(name = "Bad Action") { - Action(label = "Action", type = PrezelDialogScope.ActionType.Bad) {} + Action(label = "Action", type = PrezelDialogScope.ActionType.BAD) {} } } } From 11d6868cf7459295e41b146dfe217af56f896a92 Mon Sep 17 00:00:00 2001 From: moondev03 Date: Fri, 3 Apr 2026 18:11:26 +0900 Subject: [PATCH 5/5] =?UTF-8?q?refactor:=20PrezelDialog=20=EB=82=B4=20?= =?UTF-8?q?=EC=95=A1=EC=85=98=20=EB=B2=84=ED=8A=BC=EC=97=90=20=EC=A0=91?= =?UTF-8?q?=EA=B7=BC=EC=84=B1=20Role=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/modal/dialog/PrezelDialogScope.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt index ab87ab6e..40ae94b3 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/modal/dialog/PrezelDialogScope.kt @@ -5,6 +5,9 @@ import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.role +import androidx.compose.ui.semantics.semantics import com.team.prezel.core.designsystem.component.base.PrezelTouchArea import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.preview.PreviewSection @@ -30,6 +33,7 @@ class PrezelDialogScope { PrezelTouchArea( onClick = onClick, shape = PrezelTheme.shapes.V4, + modifier = Modifier.semantics { role = Role.Button }, ) { Text( text = label,