From ead851f6d6c7d56bb79cc816232cf0869da16452 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 27 Jan 2026 14:51:03 +0900 Subject: [PATCH 1/6] =?UTF-8?q?feat:=20PrezelImage=20=EA=B3=B5=ED=86=B5=20?= =?UTF-8?q?=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 디자인시스템에 다양한 이미지 소스(URL, Drawable)를 처리할 수 있는 `PrezelImage` 컴포넌트를 추가했습니다. * `PrezelImageSource` sealed interface를 통해 이미지 소스 타입 정의 (Url, Drawable) * `rounded`, `border` 옵션을 통한 이미지 스타일 커스텀 기능 지원 * `PrezelAsyncImage`를 사용한 네트워크 이미지 로딩 및 Drawable 리소스 표시 대응 * 컴포넌트 동작 확인을 위한 Preview 코드 추가 --- .../component/image/PrezelImage.kt | 113 ++++++++++++++++++ .../component/image/PrezelImageSource.kt | 17 +++ 2 files changed, 130 insertions(+) create mode 100644 Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt create mode 100644 Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt new file mode 100644 index 0000000..80db266 --- /dev/null +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt @@ -0,0 +1,113 @@ +package com.team.prezel.core.designsystem.component.image + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import com.team.prezel.core.designsystem.component.PrezelAsyncImage +import com.team.prezel.core.designsystem.icon.PrezelIcons +import com.team.prezel.core.designsystem.preview.ThemePreview +import com.team.prezel.core.designsystem.theme.PrezelTheme + +@Composable +fun PrezelImage( + source: PrezelImageSource, + contentDescription: String, + modifier: Modifier = Modifier, + rounded: Boolean = false, + border: Boolean = false, + onSuccess: () -> Unit = {}, + onError: (Throwable?) -> Unit = {}, +) { + val shape = if (rounded) RoundedCornerShape(12.dp) else RectangleShape + val borderStroke = if (border) BorderStroke(width = 1.dp, color = PrezelTheme.colors.borderRegular) else null + + Box( + modifier = modifier + .size(100.dp) + .clip(shape) + .then(if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier), + contentAlignment = Alignment.Center, + ) { + + when (source) { + is PrezelImageSource.Url -> { + PrezelAsyncImage( + url = source.value, + contentDescription = contentDescription, + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Crop, + onSuccess = onSuccess, + onError = onError, + ) + } + + is PrezelImageSource.Drawable -> { + Image( + painter = painterResource(id = source.resId), + contentDescription = contentDescription, + modifier = Modifier.size(48.dp), + contentScale = ContentScale.Fit, + ) + + LaunchedEffect(Unit) { + onSuccess() + } + } + } + } +} + +@ThemePreview +@Composable +private fun PrezelImagePreview() { + PrezelTheme { + Column( + modifier = Modifier + .background(PrezelTheme.colors.bgRegular) + .padding(16.dp), + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + Text(text = "Drawable / No Round / No Border") + PrezelImage( + source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), + contentDescription = "Drawable / No Round / No Border", + rounded = false, + border = false, + ) + + Text(text = "Drawable / No Round / No Border") + PrezelImage( + source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), + contentDescription = "Drawable / Round / No Border", + rounded = true, + border = false, + ) + + Text(text = "Drawable / Round / Border") + PrezelImage( + source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), + contentDescription = "Drawable / Round / Border", + rounded = true, + border = true, + ) + } + } +} diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt new file mode 100644 index 0000000..a948180 --- /dev/null +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt @@ -0,0 +1,17 @@ +package com.team.prezel.core.designsystem.component.image + +import androidx.compose.runtime.Immutable + +@Immutable +sealed interface PrezelImageSource { + + @Immutable + data class Url( + val value: String, + ) : PrezelImageSource + + @Immutable + data class Drawable( + val resId: Int, + ) : PrezelImageSource +} From 1d228cbf8ca4348acbf156e128eb218885291d25 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 27 Jan 2026 14:54:05 +0900 Subject: [PATCH 2/6] =?UTF-8?q?refactor:=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EC=95=84=EC=9D=B4=EC=BD=98=20?= =?UTF-8?q?=EB=A6=AC=EC=86=8C=EC=8A=A4=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EA=B7=9C=EC=B9=99=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 아이콘 리소스 파일명에 `core_designsystem_` 접두사를 추가하고 관련 코드를 수정했습니다. * `res/drawable` 내 모든 아이콘 파일명 변경 (예: `ic_arrow_left` -> `core_designsystem_ic_arrow_left`) * `PrezelIcons.kt` 내 리소스 참조 경로 업데이트 * `PrezelAvatar.kt` 내 하드코딩된 리소스 참조 수정 * `PrezelImage.kt`, `PrezelImageSource.kt` 내 불필요한 개행 제거 --- .../designsystem/component/PrezelAvatar.kt | 2 +- .../component/image/PrezelImage.kt | 1 - .../component/image/PrezelImageSource.kt | 1 - .../core/designsystem/icon/PrezelIcons.kt | 84 +++++++++---------- ...ml => core_designsystem_ic_arrow_left.xml} | 0 ...n.xml => core_designsystem_ic_balloon.xml} | 0 ...ank.xml => core_designsystem_ic_blank.xml} | 0 ....xml => core_designsystem_ic_calendar.xml} | 0 ...el.xml => core_designsystem_ic_cancel.xml} | 0 ..._designsystem_ic_cancel_circle_filled.xml} | 0 ...esignsystem_ic_cancel_circle_outlined.xml} | 0 ...eck.xml => core_designsystem_ic_check.xml} | 0 ...e_designsystem_ic_check_circle_filled.xml} | 0 ...designsystem_ic_check_circle_outlined.xml} | 0 ... => core_designsystem_ic_chevron_down.xml} | 0 ... => core_designsystem_ic_chevron_left.xml} | 0 ...=> core_designsystem_ic_chevron_right.xml} | 0 ...ml => core_designsystem_ic_chevron_up.xml} | 0 ...e.xml => core_designsystem_ic_college.xml} | 0 ...y.xml => core_designsystem_ic_company.xml} | 0 ...er.xml => core_designsystem_ic_folder.xml} | 0 ...y.xml => core_designsystem_ic_gallery.xml} | 0 ...hand.xml => core_designsystem_ic_hand.xml} | 0 ...home.xml => core_designsystem_ic_home.xml} | 0 ...info.xml => core_designsystem_ic_info.xml} | 0 ...l => core_designsystem_ic_info_circle.xml} | 0 ...kao.xml => core_designsystem_ic_kakao.xml} | 0 ...c_mic.xml => core_designsystem_ic_mic.xml} | 0 ...use.xml => core_designsystem_ic_pause.xml} | 0 ...on.xml => core_designsystem_ic_person.xml} | 0 ...play.xml => core_designsystem_ic_play.xml} | 0 ...plus.xml => core_designsystem_ic_plus.xml} | 0 ...e.xml => core_designsystem_ic_profile.xml} | 0 ...e_designsystem_ic_radio_circle_filled.xml} | 0 ...designsystem_ic_radio_circle_outlined.xml} | 0 ...xml => core_designsystem_ic_recording.xml} | 0 ...set.xml => core_designsystem_ic_reset.xml} | 0 ...te.xml => core_designsystem_ic_rotate.xml} | 0 ...stop.xml => core_designsystem_ic_stop.xml} | 0 ...hy.xml => core_designsystem_ic_trophy.xml} | 0 ...deo.xml => core_designsystem_ic_video.xml} | 0 ...ice.xml => core_designsystem_ic_voice.xml} | 0 ...g.xml => core_designsystem_ic_warning.xml} | 0 ...> core_designsystem_ic_warning_circle.xml} | 0 ...n.xml => core_designsystem_ic_zoom_in.xml} | 0 ....xml => core_designsystem_ic_zoom_out.xml} | 0 46 files changed, 43 insertions(+), 45 deletions(-) rename Prezel/core/designsystem/src/main/res/drawable/{ic_arrow_left.xml => core_designsystem_ic_arrow_left.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_balloon.xml => core_designsystem_ic_balloon.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_blank.xml => core_designsystem_ic_blank.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_calendar.xml => core_designsystem_ic_calendar.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_cancel.xml => core_designsystem_ic_cancel.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_cancel_circle_filled.xml => core_designsystem_ic_cancel_circle_filled.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_cancel_circle_outlined.xml => core_designsystem_ic_cancel_circle_outlined.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_check.xml => core_designsystem_ic_check.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_check_circle_filled.xml => core_designsystem_ic_check_circle_filled.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_check_circle_outlined.xml => core_designsystem_ic_check_circle_outlined.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_chevron_down.xml => core_designsystem_ic_chevron_down.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_chevron_left.xml => core_designsystem_ic_chevron_left.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_chevron_right.xml => core_designsystem_ic_chevron_right.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_chevron_up.xml => core_designsystem_ic_chevron_up.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_college.xml => core_designsystem_ic_college.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_company.xml => core_designsystem_ic_company.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_folder.xml => core_designsystem_ic_folder.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_gallery.xml => core_designsystem_ic_gallery.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_hand.xml => core_designsystem_ic_hand.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_home.xml => core_designsystem_ic_home.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_info.xml => core_designsystem_ic_info.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_info_circle.xml => core_designsystem_ic_info_circle.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_kakao.xml => core_designsystem_ic_kakao.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_mic.xml => core_designsystem_ic_mic.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_pause.xml => core_designsystem_ic_pause.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_person.xml => core_designsystem_ic_person.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_play.xml => core_designsystem_ic_play.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_plus.xml => core_designsystem_ic_plus.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_profile.xml => core_designsystem_ic_profile.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_radio_circle_filled.xml => core_designsystem_ic_radio_circle_filled.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_radio_circle_outlined.xml => core_designsystem_ic_radio_circle_outlined.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_recording.xml => core_designsystem_ic_recording.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_reset.xml => core_designsystem_ic_reset.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_rotate.xml => core_designsystem_ic_rotate.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_stop.xml => core_designsystem_ic_stop.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_trophy.xml => core_designsystem_ic_trophy.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_video.xml => core_designsystem_ic_video.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_voice.xml => core_designsystem_ic_voice.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_warning.xml => core_designsystem_ic_warning.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_warning_circle.xml => core_designsystem_ic_warning_circle.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_zoom_in.xml => core_designsystem_ic_zoom_in.xml} (100%) rename Prezel/core/designsystem/src/main/res/drawable/{ic_zoom_out.xml => core_designsystem_ic_zoom_out.xml} (100%) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt index ed3e9c0..9120b1b 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt @@ -102,7 +102,7 @@ private fun DefaultAvatarIcon( contentDescription: String, ) { Icon( - painter = painterResource(R.drawable.ic_person), + painter = painterResource(R.drawable.core_designsystem_ic_person), contentDescription = contentDescription, modifier = Modifier.size(prezelAvatarIconSize(size)), tint = PrezelTheme.colors.iconDisabled, diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt index 80db266..5967394 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt @@ -46,7 +46,6 @@ fun PrezelImage( .then(if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier), contentAlignment = Alignment.Center, ) { - when (source) { is PrezelImageSource.Url -> { PrezelAsyncImage( diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt index a948180..59700c7 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Immutable @Immutable sealed interface PrezelImageSource { - @Immutable data class Url( val value: String, diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/icon/PrezelIcons.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/icon/PrezelIcons.kt index 1b812d9..a6d7d6d 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/icon/PrezelIcons.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/icon/PrezelIcons.kt @@ -3,46 +3,46 @@ package com.team.prezel.core.designsystem.icon import com.team.prezel.core.designsystem.R object PrezelIcons { - val ArrowLeft = R.drawable.ic_arrow_left - val Balloon = R.drawable.ic_balloon - val Blank = R.drawable.ic_blank - val Calendar = R.drawable.ic_calendar - val Cancel = R.drawable.ic_cancel - val CancelCircleFilled = R.drawable.ic_cancel_circle_filled - val CancelCircleOutlined = R.drawable.ic_cancel_circle_outlined - val Check = R.drawable.ic_check - val CheckCircleFilled = R.drawable.ic_check_circle_filled - val CheckCircleOutlined = R.drawable.ic_check_circle_outlined - val ChevronDown = R.drawable.ic_chevron_down - val ChevronLeft = R.drawable.ic_chevron_left - val ChevronRight = R.drawable.ic_chevron_right - val ChevronUp = R.drawable.ic_chevron_up - val College = R.drawable.ic_college - val Company = R.drawable.ic_company - val Folder = R.drawable.ic_folder - val Gallery = R.drawable.ic_gallery - val Hand = R.drawable.ic_hand - val Home = R.drawable.ic_home - val Info = R.drawable.ic_info - val InfoCircle = R.drawable.ic_info_circle - val Kakao = R.drawable.ic_kakao - val Mic = R.drawable.ic_mic - val Pause = R.drawable.ic_pause - val Person = R.drawable.ic_person - val Play = R.drawable.ic_play - val Plus = R.drawable.ic_plus - val Profile = R.drawable.ic_profile - val RadioCircleFilled = R.drawable.ic_radio_circle_filled - val RadioCircleOutlined = R.drawable.ic_radio_circle_outlined - val Recording = R.drawable.ic_recording - val Reset = R.drawable.ic_reset - val Rotate = R.drawable.ic_rotate - val Stop = R.drawable.ic_stop - val Trophy = R.drawable.ic_trophy - val Video = R.drawable.ic_video - val Voice = R.drawable.ic_voice - val Warning = R.drawable.ic_warning - val WarningCircle = R.drawable.ic_warning_circle - val ZoomIn = R.drawable.ic_zoom_in - val ZoomOut = R.drawable.ic_zoom_out + val ArrowLeft = R.drawable.core_designsystem_ic_arrow_left + val Balloon = R.drawable.core_designsystem_ic_balloon + val Blank = R.drawable.core_designsystem_ic_blank + val Calendar = R.drawable.core_designsystem_ic_calendar + val Cancel = R.drawable.core_designsystem_ic_cancel + val CancelCircleFilled = R.drawable.core_designsystem_ic_cancel_circle_filled + val CancelCircleOutlined = R.drawable.core_designsystem_ic_cancel_circle_outlined + val Check = R.drawable.core_designsystem_ic_check + val CheckCircleFilled = R.drawable.core_designsystem_ic_check_circle_filled + val CheckCircleOutlined = R.drawable.core_designsystem_ic_check_circle_outlined + val ChevronDown = R.drawable.core_designsystem_ic_chevron_down + val ChevronLeft = R.drawable.core_designsystem_ic_chevron_left + val ChevronRight = R.drawable.core_designsystem_ic_chevron_right + val ChevronUp = R.drawable.core_designsystem_ic_chevron_up + val College = R.drawable.core_designsystem_ic_college + val Company = R.drawable.core_designsystem_ic_company + val Folder = R.drawable.core_designsystem_ic_folder + val Gallery = R.drawable.core_designsystem_ic_gallery + val Hand = R.drawable.core_designsystem_ic_hand + val Home = R.drawable.core_designsystem_ic_home + val Info = R.drawable.core_designsystem_ic_info + val InfoCircle = R.drawable.core_designsystem_ic_info_circle + val Kakao = R.drawable.core_designsystem_ic_kakao + val Mic = R.drawable.core_designsystem_ic_mic + val Pause = R.drawable.core_designsystem_ic_pause + val Person = R.drawable.core_designsystem_ic_person + val Play = R.drawable.core_designsystem_ic_play + val Plus = R.drawable.core_designsystem_ic_plus + val Profile = R.drawable.core_designsystem_ic_profile + val RadioCircleFilled = R.drawable.core_designsystem_ic_radio_circle_filled + val RadioCircleOutlined = R.drawable.core_designsystem_ic_radio_circle_outlined + val Recording = R.drawable.core_designsystem_ic_recording + val Reset = R.drawable.core_designsystem_ic_reset + val Rotate = R.drawable.core_designsystem_ic_rotate + val Stop = R.drawable.core_designsystem_ic_stop + val Trophy = R.drawable.core_designsystem_ic_trophy + val Video = R.drawable.core_designsystem_ic_video + val Voice = R.drawable.core_designsystem_ic_voice + val Warning = R.drawable.core_designsystem_ic_warning + val WarningCircle = R.drawable.core_designsystem_ic_warning_circle + val ZoomIn = R.drawable.core_designsystem_ic_zoom_in + val ZoomOut = R.drawable.core_designsystem_ic_zoom_out } diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_arrow_left.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_arrow_left.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_arrow_left.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_arrow_left.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_balloon.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_balloon.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_balloon.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_balloon.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_blank.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_blank.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_blank.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_blank.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_calendar.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_calendar.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_calendar.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_calendar.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_cancel.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_cancel.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_cancel.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_cancel.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_cancel_circle_filled.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_cancel_circle_filled.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_cancel_circle_filled.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_cancel_circle_filled.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_cancel_circle_outlined.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_cancel_circle_outlined.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_cancel_circle_outlined.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_cancel_circle_outlined.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_check.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_check.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_check.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_check.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_check_circle_filled.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_check_circle_filled.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_check_circle_filled.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_check_circle_filled.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_check_circle_outlined.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_check_circle_outlined.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_check_circle_outlined.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_check_circle_outlined.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_chevron_down.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_down.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_chevron_down.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_down.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_chevron_left.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_left.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_chevron_left.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_left.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_chevron_right.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_right.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_chevron_right.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_right.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_chevron_up.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_up.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_chevron_up.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_chevron_up.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_college.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_college.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_college.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_college.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_company.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_company.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_company.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_company.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_folder.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_folder.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_folder.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_folder.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_gallery.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_gallery.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_gallery.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_gallery.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_hand.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_hand.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_hand.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_hand.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_home.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_home.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_home.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_home.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_info.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_info.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_info.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_info.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_info_circle.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_info_circle.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_info_circle.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_info_circle.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_kakao.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_kakao.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_kakao.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_kakao.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_mic.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_mic.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_mic.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_mic.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_pause.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_pause.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_pause.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_pause.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_person.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_person.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_person.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_person.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_play.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_play.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_play.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_play.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_plus.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_plus.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_plus.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_plus.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_profile.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_profile.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_profile.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_profile.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_radio_circle_filled.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_radio_circle_filled.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_radio_circle_filled.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_radio_circle_filled.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_radio_circle_outlined.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_radio_circle_outlined.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_radio_circle_outlined.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_radio_circle_outlined.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_recording.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_recording.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_recording.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_recording.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_reset.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_reset.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_reset.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_reset.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_rotate.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_rotate.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_rotate.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_rotate.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_stop.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_stop.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_stop.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_stop.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_trophy.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_trophy.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_trophy.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_trophy.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_video.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_video.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_video.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_video.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_voice.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_voice.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_voice.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_voice.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_warning.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_warning.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_warning.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_warning.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_warning_circle.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_warning_circle.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_warning_circle.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_warning_circle.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_zoom_in.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_zoom_in.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_zoom_in.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_zoom_in.xml diff --git a/Prezel/core/designsystem/src/main/res/drawable/ic_zoom_out.xml b/Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_zoom_out.xml similarity index 100% rename from Prezel/core/designsystem/src/main/res/drawable/ic_zoom_out.xml rename to Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_zoom_out.xml From c8113b8de2a7e49994cb204ae53ec0634b96e972 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Tue, 27 Jan 2026 14:58:51 +0900 Subject: [PATCH 3/6] =?UTF-8?q?feat:=20PrezelImage=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * `PrezelImage` 내부 `Modifier`의 가독성 개선을 위해 줄바꿈을 추가했습니다. * `LaunchedEffect`의 key를 `Unit`에서 `source`로 변경하여 이미지 소스 변경 시 `onSuccess` 콜백이 적절히 재실행되도록 수정했습니다. --- .../prezel/core/designsystem/component/image/PrezelImage.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt index 5967394..bd9c2ba 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt @@ -43,7 +43,9 @@ fun PrezelImage( modifier = modifier .size(100.dp) .clip(shape) - .then(if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier), + .then( + if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier, + ), contentAlignment = Alignment.Center, ) { when (source) { @@ -66,7 +68,7 @@ fun PrezelImage( contentScale = ContentScale.Fit, ) - LaunchedEffect(Unit) { + LaunchedEffect(source) { onSuccess() } } From 6eb7687e23267bb0b771d70ff92cf73beff88640 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Wed, 28 Jan 2026 00:18:48 +0900 Subject: [PATCH 4/6] =?UTF-8?q?refactor:=20PrezelImage=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=ED=95=98=EB=93=9C=EC=BD=94?= =?UTF-8?q?=EB=94=A9=EB=90=9C=20=ED=81=AC=EA=B8=B0=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PrezelImage` 컴포넌트 내부에 하드코딩되어 있던 `100.dp` 크기 설정을 제거하고, 외부에서 전달받은 `modifier`를 통해 크기를 결정하도록 수정했습니다. 또한 미리보기(Preview) 코드를 보완했습니다. * `PrezelImage` 내부 `Box` 및 `Image`의 고정 크기 제거 * Preview에서 각 케이스별로 `Modifier.size(100.dp)` 명시적 추가 * Preview 내 누락된 테두리(Border) 테스트 케이스 추가 및 텍스트 수정 --- .../designsystem/component/image/PrezelImage.kt | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt index bd9c2ba..c16f4a0 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt @@ -41,7 +41,6 @@ fun PrezelImage( Box( modifier = modifier - .size(100.dp) .clip(shape) .then( if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier, @@ -64,7 +63,7 @@ fun PrezelImage( Image( painter = painterResource(id = source.resId), contentDescription = contentDescription, - modifier = Modifier.size(48.dp), + modifier = Modifier, contentScale = ContentScale.Fit, ) @@ -90,22 +89,34 @@ private fun PrezelImagePreview() { PrezelImage( source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), contentDescription = "Drawable / No Round / No Border", + modifier = Modifier.size(100.dp), rounded = false, border = false, ) - Text(text = "Drawable / No Round / No Border") + Text(text = "Drawable / Round / No Border") PrezelImage( source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), contentDescription = "Drawable / Round / No Border", + modifier = Modifier.size(100.dp), rounded = true, border = false, ) + Text(text = "Drawable / No Round / Border") + PrezelImage( + source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), + contentDescription = "Drawable / Round / Border", + modifier = Modifier.size(100.dp), + rounded = false, + border = true, + ) + Text(text = "Drawable / Round / Border") PrezelImage( source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), contentDescription = "Drawable / Round / Border", + modifier = Modifier.size(100.dp), rounded = true, border = true, ) From 9bab5ec0f657033f60842d6dfd2db047436a54ec Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Wed, 28 Jan 2026 00:22:26 +0900 Subject: [PATCH 5/6] =?UTF-8?q?refactor:=20PrezelImage=20=ED=94=84?= =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EC=BD=94=EB=93=9C=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PrezelImage의 프리뷰 코드에서 반복되는 부분을 별도의 컴포저블 함수인 `PrezelImagePreviewItem`으로 분리하여 가독성을 높였습니다. --- .../component/image/PrezelImage.kt | 44 ++++++++++--------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt index c16f4a0..738cf14 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt @@ -85,41 +85,45 @@ private fun PrezelImagePreview() { .padding(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp), ) { - Text(text = "Drawable / No Round / No Border") - PrezelImage( - source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), - contentDescription = "Drawable / No Round / No Border", - modifier = Modifier.size(100.dp), + PrezelImagePreviewItem( + label = "Drawable / No Round / No Border", rounded = false, border = false, ) - Text(text = "Drawable / Round / No Border") - PrezelImage( - source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), - contentDescription = "Drawable / Round / No Border", - modifier = Modifier.size(100.dp), + PrezelImagePreviewItem( + label = "Drawable / Round / No Border", rounded = true, border = false, ) - Text(text = "Drawable / No Round / Border") - PrezelImage( - source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), - contentDescription = "Drawable / Round / Border", - modifier = Modifier.size(100.dp), + PrezelImagePreviewItem( + label = "Drawable / No Round / Border", rounded = false, border = true, ) - Text(text = "Drawable / Round / Border") - PrezelImage( - source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), - contentDescription = "Drawable / Round / Border", - modifier = Modifier.size(100.dp), + PrezelImagePreviewItem( + label = "Drawable / Round / Border", rounded = true, border = true, ) } } } + +@Composable +private fun PrezelImagePreviewItem( + label: String, + rounded: Boolean, + border: Boolean, +) { + Text(text = label) + PrezelImage( + source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), + contentDescription = label, + modifier = Modifier.size(100.dp), + rounded = rounded, + border = border, + ) +} From c1a705cc8ff24127389c59a289da3f275d1ad9d3 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Thu, 29 Jan 2026 01:28:24 +0900 Subject: [PATCH 6/6] =?UTF-8?q?refactor:=20PrezelImage=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20=EA=B0=9C?= =?UTF-8?q?=EC=84=A0=20=EB=B0=8F=20=EC=98=A4=EB=B2=84=EB=A1=9C=EB=94=A9=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PrezelImageSource`를 사용하는 방식 대신 URL과 Drawable 리소스를 각각 처리하는 오버로딩 함수로 분리했습니다. 또한 공통 스타일 로직을 `prezelImageContainer` 확장 함수로 추출하여 코드 중복을 제거했습니다. * `PrezelImageSource` 기반의 조건부 렌더링 제거 * URL 입력을 받는 `PrezelImage`와 Drawable 리소스를 받는 `PrezelImage`로 분리 * 공통 스타일(shape, border) 처리를 위한 `prezelImageContainer` Modifier 추가 * 불필요한 `LaunchedEffect` 제거 및 import 정리 --- .../component/image/PrezelImage.kt | 78 +++++++++++-------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt index 738cf14..3c7c10f 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt @@ -1,5 +1,6 @@ package com.team.prezel.core.designsystem.component.image +import androidx.annotation.DrawableRes import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.Image import androidx.compose.foundation.background @@ -13,7 +14,6 @@ import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -28,7 +28,7 @@ import com.team.prezel.core.designsystem.theme.PrezelTheme @Composable fun PrezelImage( - source: PrezelImageSource, + url: String, contentDescription: String, modifier: Modifier = Modifier, rounded: Boolean = false, @@ -36,43 +36,53 @@ fun PrezelImage( onSuccess: () -> Unit = {}, onError: (Throwable?) -> Unit = {}, ) { - val shape = if (rounded) RoundedCornerShape(12.dp) else RectangleShape - val borderStroke = if (border) BorderStroke(width = 1.dp, color = PrezelTheme.colors.borderRegular) else null + Box( + modifier = modifier.prezelImageContainer(rounded, border), + contentAlignment = Alignment.Center, + ) { + PrezelAsyncImage( + url = url, + contentDescription = contentDescription, + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Crop, + onSuccess = onSuccess, + onError = onError, + ) + } +} +@Composable +fun PrezelImage( + @DrawableRes resId: Int, + contentDescription: String, + modifier: Modifier = Modifier, + rounded: Boolean = false, + border: Boolean = false, +) { Box( - modifier = modifier - .clip(shape) - .then( - if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier, - ), + modifier = modifier.prezelImageContainer(rounded, border), contentAlignment = Alignment.Center, ) { - when (source) { - is PrezelImageSource.Url -> { - PrezelAsyncImage( - url = source.value, - contentDescription = contentDescription, - modifier = Modifier.fillMaxSize(), - contentScale = ContentScale.Crop, - onSuccess = onSuccess, - onError = onError, - ) - } + Image( + painter = painterResource(id = resId), + contentDescription = contentDescription, + modifier = Modifier, + contentScale = ContentScale.Fit, + ) + } +} - is PrezelImageSource.Drawable -> { - Image( - painter = painterResource(id = source.resId), - contentDescription = contentDescription, - modifier = Modifier, - contentScale = ContentScale.Fit, - ) +@Composable +private fun Modifier.prezelImageContainer( + rounded: Boolean, + border: Boolean, +): Modifier { + val shape = if (rounded) RoundedCornerShape(12.dp) else RectangleShape + val borderStroke = if (border) BorderStroke(width = 1.dp, color = PrezelTheme.colors.borderRegular) else null - LaunchedEffect(source) { - onSuccess() - } - } - } - } + return this + .clip(shape) + .then(if (borderStroke != null) Modifier.border(borderStroke, shape) else Modifier) } @ThemePreview @@ -120,7 +130,7 @@ private fun PrezelImagePreviewItem( ) { Text(text = label) PrezelImage( - source = PrezelImageSource.Drawable(resId = PrezelIcons.Calendar), + resId = PrezelIcons.Calendar, contentDescription = label, modifier = Modifier.size(100.dp), rounded = rounded,