From e6b905d6f6bf24fcca6fe219b8f92b3c814351ce Mon Sep 17 00:00:00 2001 From: moondev03 Date: Sun, 5 Jul 2026 21:04:13 +0900 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20PrezelButton=20=ED=81=AC?= =?UTF-8?q?=EA=B8=B0=EB=B3=84=20=EA=B3=A0=EC=A0=95=20=EB=86=92=EC=9D=B4=20?= =?UTF-8?q?=EC=A0=95=EC=9D=98=20=EB=B0=8F=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * **feat: `PrezelButton` 크기별 고정 높이 속성 추가** * `PrezelButtonDefault` 구성 클래스에 `textButtonHeight` 필드를 추가했습니다. * `ButtonSize`에 따라 XSMALL(28.dp), SMALL(36.dp), REGULAR(48.dp) 높이를 반환하는 `getTextButtonHeight` 로직을 구현했습니다. * 단, 아이콘 전용 버튼(`isIconOnly`)인 경우에는 고정 높이를 적용하지 않도록 처리했습니다. * **refactor: `PrezelButtonBase` 내 고정 높이 Modifier 적용** * `prezelButtonModifier` 확장 함수에서 `config.textButtonHeight` 값이 설정된 경우 `Modifier.height()`를 적용하도록 수정했습니다. * **style: 코드 포맷팅 정리** * `PrezelButtonDefaults` 내 `when` 표현식의 화살표(`->`) 인덴트를 일관성 있게 수정했습니다. --- .../actions/button/config/PrezelButtonBase.kt | 5 ++++- .../actions/button/config/PrezelButtonDefaults.kt | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt index 1fc2ab9f..361b124f 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt @@ -7,6 +7,7 @@ import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.size import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -132,7 +133,9 @@ private fun Modifier.buttonContainer( config: PrezelButtonDefault, ): Modifier = this - .clip(shape = config.shape) + .then( + config.textButtonHeight?.let { Modifier.height(it) } ?: Modifier, + ).clip(shape = config.shape) .background(color = config.backgroundColor(enabled = enabled)) .then( if (config.hasBorder) { diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.kt index 5be2c220..1bb13264 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.kt @@ -28,6 +28,7 @@ data class PrezelButtonDefault( val contentPadding: PaddingValues, val iconSpacing: Dp, val iconSize: Dp, + val textButtonHeight: Dp?, ) { val hasBorder: Boolean = borderWidth > 0.dp @@ -66,6 +67,7 @@ object PrezelButtonDefaults { contentPadding: PaddingValues = getContentPadding(size = size, isIconOnly = isIconOnly), iconSpacing: Dp = getIconSpacing(size = size), iconSize: Dp = getIconSize(size = size), + textButtonHeight: Dp? = if (isIconOnly) null else getTextButtonHeight(size = size), ) = PrezelButtonDefault( contentColor = contentColor, disabledContentColor = disabledContentColor, @@ -79,8 +81,17 @@ object PrezelButtonDefaults { contentPadding = contentPadding, iconSpacing = iconSpacing, iconSize = iconSize, + textButtonHeight = textButtonHeight, ) + @Composable + private fun getTextButtonHeight(size: ButtonSize): Dp = + when (size) { + ButtonSize.XSMALL -> 28.dp + ButtonSize.SMALL -> 36.dp + ButtonSize.REGULAR -> 48.dp + } + @Composable private fun getContentColor( type: ButtonType, From 4c488e99fb9c4da0f9246af21d43d2b0142d292c Mon Sep 17 00:00:00 2001 From: moondev03 Date: Sun, 5 Jul 2026 21:05:15 +0900 Subject: [PATCH 2/3] =?UTF-8?q?style:=20=ED=94=84=EB=A1=9C=ED=95=84=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20UI=20=EB=94=94=EC=9E=90=EC=9D=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * **style: `PrezelButtonArea` 배경 표시 설정 변경** * `ProfileScreen` 내 `PrezelButtonArea`의 `showBackground` 속성 값을 `true`에서 `false`로 변경했습니다. --- .../java/com/team/prezel/feature/profile/impl/ProfileScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/ProfileScreen.kt b/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/ProfileScreen.kt index ab4e9c29..e0fc6b68 100644 --- a/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/ProfileScreen.kt +++ b/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/ProfileScreen.kt @@ -120,7 +120,7 @@ private fun ProfileScreen( ) PrezelButtonArea( - showBackground = true, + showBackground = false, modifier = Modifier.advancedImePadding(), mainButton = { modifier -> PrezelButton( From 15bf2e03bc4451123fd5472fe54bdabc2f99b219 Mon Sep 17 00:00:00 2001 From: moondev03 Date: Sun, 5 Jul 2026 21:24:03 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EB=8B=89=EB=84=A4=EC=9E=84=20?= =?UTF-8?q?=EC=88=AB=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=ED=97=88=EC=9A=A9=20?= =?UTF-8?q?=EB=B0=8F=20UI=20=EA=B8=80=EC=9E=90=20=EC=88=98=20=EC=A0=9C?= =?UTF-8?q?=ED=95=9C=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * **feat: `Nickname` 모델 내 숫자 허용 로직 추가** * 닉네임 유효성 검사 시 숫자(0-9) 입력을 허용하도록 `isAllowedCodePoint` 판별 로직을 수정했습니다. * 이를 위해 `DIGIT_START`, `DIGIT_END` 코드 포인트 상수를 새롭게 정의했습니다. * **feat: `NicknameTextField`에 최대 글자 수 제한 설정** * `PrezelTextField` 컴포저블에 `Nickname.MAX_LENGTH`를 전달하여 UI 수준에서 입력 가능한 최대 글자 수를 제한하도록 개선했습니다. --- .../main/java/com/team/prezel/core/model/profile/Nickname.kt | 5 ++++- .../feature/profile/impl/component/NicknameTextField.kt | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Prezel/core/model/src/main/java/com/team/prezel/core/model/profile/Nickname.kt b/Prezel/core/model/src/main/java/com/team/prezel/core/model/profile/Nickname.kt index 15a3e54b..055c8565 100644 --- a/Prezel/core/model/src/main/java/com/team/prezel/core/model/profile/Nickname.kt +++ b/Prezel/core/model/src/main/java/com/team/prezel/core/model/profile/Nickname.kt @@ -23,6 +23,8 @@ value class Nickname private constructor( companion object { const val MAX_LENGTH = 10 private const val MIN_LENGTH = 2 + private const val DIGIT_START = '0'.code + private const val DIGIT_END = '9'.code private const val LATIN_UPPERCASE_START = 'A'.code private const val LATIN_UPPERCASE_END = 'Z'.code private const val LATIN_LOWERCASE_START = 'a'.code @@ -46,7 +48,8 @@ value class Nickname private constructor( } private fun isAllowedCodePoint(codePoint: Int): Boolean = - codePoint in LATIN_UPPERCASE_START..LATIN_UPPERCASE_END || + codePoint in DIGIT_START..DIGIT_END || + codePoint in LATIN_UPPERCASE_START..LATIN_UPPERCASE_END || codePoint in LATIN_LOWERCASE_START..LATIN_LOWERCASE_END || Character.UnicodeScript.of(codePoint) == Character.UnicodeScript.HANGUL } diff --git a/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/component/NicknameTextField.kt b/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/component/NicknameTextField.kt index 2cc650f0..f3f2f583 100644 --- a/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/component/NicknameTextField.kt +++ b/Prezel/feature/profile/impl/src/main/java/com/team/prezel/feature/profile/impl/component/NicknameTextField.kt @@ -13,6 +13,7 @@ import com.team.prezel.core.designsystem.component.textfield.PrezelTextField import com.team.prezel.core.designsystem.component.textfield.PrezelTextFieldStatus import com.team.prezel.core.designsystem.preview.BasicPreview import com.team.prezel.core.designsystem.theme.PrezelTheme +import com.team.prezel.core.model.profile.Nickname import com.team.prezel.feature.profile.impl.R import com.team.prezel.feature.profile.impl.model.NicknameValidationState @@ -29,6 +30,7 @@ internal fun NicknameTextField( label = stringResource(R.string.feature_profile_impl_nickname_text_field_label), placeholder = stringResource(R.string.feature_profile_impl_nickname_text_field_placeholder), status = nicknameValidationState.toNicknameStatus(), + maxLength = Nickname.MAX_LENGTH, keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Text, ),