From 65e56f9768ce2f9554c9c172a2e6561e44245833 Mon Sep 17 00:00:00 2001 From: moondev03 Date: Mon, 26 Jan 2026 02:24:18 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20`PrezelDivider`=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 디자인 시스템에 사용될 공통 구분선 컴포넌트인 `PrezelDivider`를 추가했습니다. * `PrezelHorizontalDivider`와 `PrezelVerticalDivider` 두 가지 타입의 Composable을 제공합니다. * `PrezelDividerType` enum을 통해 두께를 `DEFAULT`(12.dp)와 `THICK`(1.dp)로 설정할 수 있습니다. * 타입에 따라 기본 색상(`borderMedium`, `borderSmall`)이 자동으로 적용되며, 필요시 커스텀 색상을 지정할 수 있습니다. * 컴포넌트의 시각적 확인을 위한 Preview 코드를 추가했습니다. --- .../designsystem/component/PrezelDivider.kt | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelDivider.kt diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelDivider.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelDivider.kt new file mode 100644 index 0000000..094c069 --- /dev/null +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelDivider.kt @@ -0,0 +1,82 @@ +package com.team.prezel.core.designsystem.component + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Text +import androidx.compose.material3.VerticalDivider +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.team.prezel.core.designsystem.preview.PreviewScaffold +import com.team.prezel.core.designsystem.preview.SectionTitle +import com.team.prezel.core.designsystem.preview.ThemePreview +import com.team.prezel.core.designsystem.theme.PrezelTheme + +enum class PrezelDividerType( + val size: Dp, +) { + DEFAULT(size = 12.dp), + THICK(size = 1.dp), + ; + + @Composable + fun dividerColor(): Color = + when (this) { + DEFAULT -> PrezelTheme.colors.borderMedium + THICK -> PrezelTheme.colors.borderSmall + } +} + +@Composable +fun PrezelHorizontalDivider( + modifier: Modifier = Modifier, + type: PrezelDividerType = PrezelDividerType.DEFAULT, + color: Color = Color.Unspecified, +) = PrezelDivider(modifier = modifier, type = type, isHorizontal = true, color = color) + +@Composable +fun PrezelVerticalDivider( + modifier: Modifier = Modifier, + type: PrezelDividerType = PrezelDividerType.DEFAULT, + color: Color = Color.Unspecified, +) = PrezelDivider(modifier = modifier, type = type, isHorizontal = false, color = color) + +@Composable +private fun PrezelDivider( + modifier: Modifier = Modifier, + type: PrezelDividerType = PrezelDividerType.DEFAULT, + isHorizontal: Boolean = true, + color: Color = Color.Unspecified, +) { + val dividerColor = if (color == Color.Unspecified) type.dividerColor() else color + + when (isHorizontal) { + true -> HorizontalDivider(modifier = modifier, thickness = type.size, color = dividerColor) + false -> VerticalDivider(modifier = modifier, thickness = type.size, color = dividerColor) + } +} + +@ThemePreview +@Composable +private fun PrezelDividerPreview() { + PrezelTheme { + PreviewScaffold { + SectionTitle(title = "PrezelDivider - Horizontal") + Text("PrezelDividerType.DEFAULT") + PrezelHorizontalDivider(type = PrezelDividerType.DEFAULT) + Text("PrezelDividerType.THICK") + PrezelHorizontalDivider(type = PrezelDividerType.THICK) + + Spacer(modifier = Modifier.height(20.dp)) + + SectionTitle(title = "PrezelDivider - Vertical") + Text("PrezelDividerType.DEFAULT") + PrezelVerticalDivider(type = PrezelDividerType.DEFAULT, modifier = Modifier.height(100.dp)) + Text("PrezelDividerType.THICK") + PrezelVerticalDivider(type = PrezelDividerType.THICK, modifier = Modifier.height(100.dp)) + } + } +}