From 5a67f7347fc88d0a53c61b028fb4e906c914756a Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sat, 24 Jan 2026 17:23:32 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat:=20PrezelCheckbox=20=EC=BB=B4?= =?UTF-8?q?=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 디자인시스템에 커스텀 체크박스 컴포넌트인 `PrezelCheckbox`를 추가했습니다. * `REGULAR(24dp)`, `LARGE(32dp)` 두 가지 사이즈 지원 * 선택 상태에 따른 아이콘 및 컬러 분기 처리 * 클릭 인터랙션 및 Preview 코드 포함 --- .../designsystem/component/PrezelCheckbox.kt | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt new file mode 100644 index 0000000..99d647f --- /dev/null +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -0,0 +1,122 @@ +package com.team.prezel.core.designsystem.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +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.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import com.team.prezel.core.designsystem.R +import com.team.prezel.core.designsystem.preview.ThemePreview +import com.team.prezel.core.designsystem.theme.PrezelTheme + +@Composable +fun PrezelCheckbox( + size: CheckboxSize = CheckboxSize.REGULAR, + checked: Boolean = false, + onCheckedChange: (Boolean) -> Unit, +) { + var currentState by remember { mutableStateOf(checked) } + + val checkboxSize = when (size) { + CheckboxSize.REGULAR -> 24.dp + CheckboxSize.LARGE -> 32.dp + } + + val iconRes = if (currentState) R.drawable.ic_check_circle_filled else R.drawable.ic_check_circle_outlined + val iconColor = if (currentState) PrezelTheme.colors.interactiveRegular else PrezelTheme.colors.iconDisabled + + Box( + modifier = Modifier + .size(checkboxSize) + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null, + ) { + currentState = !currentState + onCheckedChange(currentState) + }, + contentAlignment = Alignment.Center, + ) { + Icon( + painter = painterResource(id = iconRes), + contentDescription = "checkBox", + modifier = Modifier.size(checkboxSize), + tint = iconColor, + ) + } +} + +enum class CheckboxSize { + REGULAR, + LARGE, +} + +@ThemePreview +@Composable +private fun PrezelRegularCheckboxPreview() { + PrezelTheme { + Column(modifier = Modifier.background(PrezelTheme.colors.bgRegular)) { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.padding(16.dp), + ) { + var regularChecked by remember { mutableStateOf(true) } + var regularUnchecked by remember { mutableStateOf(false) } + + PrezelCheckbox( + size = CheckboxSize.REGULAR, + checked = regularChecked, + onCheckedChange = { regularChecked = it }, + ) + + PrezelCheckbox( + size = CheckboxSize.REGULAR, + checked = regularUnchecked, + onCheckedChange = { regularUnchecked = it }, + ) + } + } + } +} + +@ThemePreview +@Composable +private fun PrezelLargeCheckboxPreview() { + PrezelTheme { + Column(modifier = Modifier.background(PrezelTheme.colors.bgRegular)) { + Row( + horizontalArrangement = Arrangement.spacedBy(16.dp), + modifier = Modifier.padding(16.dp), + ) { + var largeChecked by remember { mutableStateOf(true) } + var largeUnchecked by remember { mutableStateOf(false) } + + PrezelCheckbox( + size = CheckboxSize.LARGE, + checked = largeChecked, + onCheckedChange = { largeChecked = it }, + ) + + PrezelCheckbox( + size = CheckboxSize.LARGE, + checked = largeUnchecked, + onCheckedChange = { largeUnchecked = it }, + ) + } + } + } +} From 506ad56cc0abcb24667f3a04a4cba781bfb40c10 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sat, 24 Jan 2026 22:03:05 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat:=20PrezelCheckbox=20=EC=BB=B4?= =?UTF-8?q?=ED=8F=AC=EB=84=8C=ED=8A=B8=20=EB=A6=AC=ED=8C=A9=ED=84=B0?= =?UTF-8?q?=EB=A7=81=20=EB=B0=8F=20=EA=B8=B0=EB=8A=A5=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PrezelCheckbox`의 내부 상태 관리 방식을 제거하고, 외부에서 전달받은 `checked` 상태를 직접 사용하도록 수정했습니다. 또한 컴포넌트의 유연성과 미리보기 가독성을 개선했습니다. * `PrezelCheckbox` 내 불필요한 `currentState` (mutableStateOf) 제거 및 상태 호이스팅 적용 * `modifier` 파라미터 추가 * `CheckboxSize` enum 위치를 상단으로 이동 * 코드 가독성 향상을 위한 조건문 개행 적용 * `CheckboxRowPreview` 공통 함수 추가 및 Preview 코드 구조 리팩터링 --- .../designsystem/component/PrezelCheckbox.kt | 102 +++++++++++------- 1 file changed, 66 insertions(+), 36 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 99d647f..015881c 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -7,9 +7,11 @@ 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.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.Icon +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -20,35 +22,49 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.dp import com.team.prezel.core.designsystem.R +import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles import com.team.prezel.core.designsystem.preview.ThemePreview import com.team.prezel.core.designsystem.theme.PrezelTheme +enum class CheckboxSize { + REGULAR, + LARGE, +} + @Composable fun PrezelCheckbox( + modifier: Modifier = Modifier, size: CheckboxSize = CheckboxSize.REGULAR, checked: Boolean = false, onCheckedChange: (Boolean) -> Unit, ) { - var currentState by remember { mutableStateOf(checked) } - val checkboxSize = when (size) { CheckboxSize.REGULAR -> 24.dp CheckboxSize.LARGE -> 32.dp } - val iconRes = if (currentState) R.drawable.ic_check_circle_filled else R.drawable.ic_check_circle_outlined - val iconColor = if (currentState) PrezelTheme.colors.interactiveRegular else PrezelTheme.colors.iconDisabled + val iconRes = + if (checked) { + R.drawable.ic_check_circle_filled + } else { + R.drawable.ic_check_circle_outlined + } + + val iconColor = + if (checked) { + PrezelTheme.colors.interactiveRegular + } else { + PrezelTheme.colors.iconDisabled + } Box( - modifier = Modifier + modifier = modifier .size(checkboxSize) .clickable( interactionSource = remember { MutableInteractionSource() }, indication = null, - ) { - currentState = !currentState - onCheckedChange(currentState) - }, + onClick = { onCheckedChange(!checked) }, + ), contentAlignment = Alignment.Center, ) { Icon( @@ -60,33 +76,28 @@ fun PrezelCheckbox( } } -enum class CheckboxSize { - REGULAR, - LARGE, -} - @ThemePreview @Composable private fun PrezelRegularCheckboxPreview() { PrezelTheme { - Column(modifier = Modifier.background(PrezelTheme.colors.bgRegular)) { - Row( - horizontalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier.padding(16.dp), - ) { - var regularChecked by remember { mutableStateOf(true) } - var regularUnchecked by remember { mutableStateOf(false) } + Column( + modifier = Modifier + .background(PrezelTheme.colors.bgRegular) + .padding(16.dp), + ) { + CheckboxRowPreview(title = "Regular Checkbox") { + var checkState by remember { mutableStateOf(true) } PrezelCheckbox( size = CheckboxSize.REGULAR, - checked = regularChecked, - onCheckedChange = { regularChecked = it }, + checked = checkState, + onCheckedChange = { checkState = it }, ) PrezelCheckbox( size = CheckboxSize.REGULAR, - checked = regularUnchecked, - onCheckedChange = { regularUnchecked = it }, + checked = !checkState, + onCheckedChange = { checkState = it }, ) } } @@ -97,26 +108,45 @@ private fun PrezelRegularCheckboxPreview() { @Composable private fun PrezelLargeCheckboxPreview() { PrezelTheme { - Column(modifier = Modifier.background(PrezelTheme.colors.bgRegular)) { - Row( - horizontalArrangement = Arrangement.spacedBy(16.dp), - modifier = Modifier.padding(16.dp), - ) { - var largeChecked by remember { mutableStateOf(true) } - var largeUnchecked by remember { mutableStateOf(false) } + Column( + modifier = Modifier + .background(PrezelTheme.colors.bgRegular) + .padding(16.dp), + ) { + CheckboxRowPreview(title = "Large Checkbox") { + var checkState by remember { mutableStateOf(true) } PrezelCheckbox( size = CheckboxSize.LARGE, - checked = largeChecked, - onCheckedChange = { largeChecked = it }, + checked = checkState, + onCheckedChange = { checkState = it }, ) PrezelCheckbox( size = CheckboxSize.LARGE, - checked = largeUnchecked, - onCheckedChange = { largeUnchecked = it }, + checked = !checkState, + onCheckedChange = { checkState = it }, ) } } } } + +@Composable +private fun CheckboxRowPreview( + title: String, + content: @Composable RowScope.() -> Unit, +) { + Column(modifier = Modifier.padding(bottom = 16.dp)) { + Text( + text = title, + style = PrezelTextStyles.Caption2Regular.toTextStyle(), + color = PrezelTheme.colors.textLarge, + modifier = Modifier.padding(bottom = 4.dp), + ) + Row( + horizontalArrangement = Arrangement.spacedBy(8.dp), + content = content, + ) + } +} From 29c858c98a1b701334e47a4c8f760b4a89fb3bec Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sat, 24 Jan 2026 22:08:26 +0900 Subject: [PATCH 03/10] =?UTF-8?q?feat:=20=EB=94=94=EC=9E=90=EC=9D=B8?= =?UTF-8?q?=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EB=A6=AC=EC=86=8C=EC=8A=A4=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EA=B7=9C=EC=B9=99=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9=20=EB=B0=8F=20=ED=95=98=EB=93=9C=EC=BD=94=EB=94=A9?= =?UTF-8?q?=EB=90=9C=20=EB=AC=B8=EC=9E=90=EC=97=B4=20=EC=B6=94=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 디자인시스템 모듈 내 리소스 식별자 이름을 변경하고, 하드코딩된 문자열을 `strings.xml`로 추출했습니다. * `close_floating_btn_content_desc`를 `core_designsystem_close_floating_btn_content_desc`로 변경 * `PrezelCheckbox`의 하드코딩된 `contentDescription`을 `core_designsystem_checkbox_desc` 리소스로 대체 * 리소스 이름 변경에 따른 `PrezelFloatingMenuButton`의 참조 코드 수정 --- .../prezel/core/designsystem/component/PrezelCheckbox.kt | 3 ++- .../button/floating/PrezelFloatingMenuButton.kt | 9 ++++++++- Prezel/core/designsystem/src/main/res/values/strings.xml | 3 ++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 015881c..aa9016e 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -20,6 +20,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import com.team.prezel.core.designsystem.R import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles @@ -69,7 +70,7 @@ fun PrezelCheckbox( ) { Icon( painter = painterResource(id = iconRes), - contentDescription = "checkBox", + contentDescription = stringResource(R.string.core_designsystem_checkbox_desc), modifier = Modifier.size(checkboxSize), tint = iconColor, ) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingMenuButton.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingMenuButton.kt index d2c1002..5b1a4b4 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingMenuButton.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingMenuButton.kt @@ -72,7 +72,14 @@ private fun PrezelMainFloatingButton( modifier: Modifier = Modifier, ) { val currentIconSource = - if (isExpanded) DrawableIcon(resId = PrezelIcons.Cancel, contentDescTextId = R.string.close_floating_btn_content_desc) else iconSource + if (isExpanded) { + DrawableIcon( + resId = PrezelIcons.Cancel, + contentDescTextId = R.string.core_designsystem_close_floating_btn_content_desc, + ) + } else { + iconSource + } PrezelFloatingButton( iconSource = currentIconSource, diff --git a/Prezel/core/designsystem/src/main/res/values/strings.xml b/Prezel/core/designsystem/src/main/res/values/strings.xml index 370c924..519ffa1 100644 --- a/Prezel/core/designsystem/src/main/res/values/strings.xml +++ b/Prezel/core/designsystem/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ - 플로팅 버튼 닫기 + 플로팅 버튼 닫기 + 체크박스 From 1352d28d058370f69cd413f3438b0249d37b96b4 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sat, 24 Jan 2026 23:56:10 +0900 Subject: [PATCH 04/10] =?UTF-8?q?feat:=20PrezelCheckbox=20contentDescripti?= =?UTF-8?q?on=20=ED=95=84=EC=88=98=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=91=EA=B7=BC=EC=84=B1?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PrezelCheckbox` 컴포넌트에 접근성을 위한 설정을 추가했습니다. * `contentDescription` 파라미터를 필수 인자로 추가했습니다. * `Modifier.semantics`를 통해 `Role.Checkbox`를 지정했습니다. * 미리보기(Preview) 코드에 변경된 파라미터를 반영했습니다. --- .../core/designsystem/component/PrezelCheckbox.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index aa9016e..82a0fa0 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -20,7 +20,9 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource +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 com.team.prezel.core.designsystem.R import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles @@ -34,6 +36,7 @@ enum class CheckboxSize { @Composable fun PrezelCheckbox( + contentDescription: String, modifier: Modifier = Modifier, size: CheckboxSize = CheckboxSize.REGULAR, checked: Boolean = false, @@ -60,6 +63,7 @@ fun PrezelCheckbox( Box( modifier = modifier + .semantics { role = Role.Checkbox } .size(checkboxSize) .clickable( interactionSource = remember { MutableInteractionSource() }, @@ -70,7 +74,7 @@ fun PrezelCheckbox( ) { Icon( painter = painterResource(id = iconRes), - contentDescription = stringResource(R.string.core_designsystem_checkbox_desc), + contentDescription = contentDescription, modifier = Modifier.size(checkboxSize), tint = iconColor, ) @@ -90,12 +94,14 @@ private fun PrezelRegularCheckboxPreview() { var checkState by remember { mutableStateOf(true) } PrezelCheckbox( + contentDescription = "", size = CheckboxSize.REGULAR, checked = checkState, onCheckedChange = { checkState = it }, ) PrezelCheckbox( + contentDescription = "", size = CheckboxSize.REGULAR, checked = !checkState, onCheckedChange = { checkState = it }, @@ -118,12 +124,14 @@ private fun PrezelLargeCheckboxPreview() { var checkState by remember { mutableStateOf(true) } PrezelCheckbox( + contentDescription = "", size = CheckboxSize.LARGE, checked = checkState, onCheckedChange = { checkState = it }, ) PrezelCheckbox( + contentDescription = "", size = CheckboxSize.LARGE, checked = !checkState, onCheckedChange = { checkState = it }, From 36c1c1b1174fcb68bfc0943fb0f909a2a1a0a552 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 25 Jan 2026 00:40:39 +0900 Subject: [PATCH 05/10] =?UTF-8?q?refactor:=20PrezelCheckbox=20=ED=81=B4?= =?UTF-8?q?=EB=A6=AD=20=EB=A1=9C=EC=A7=81=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `clickable`과 `semantics`를 이용한 체크박스 클릭 로직을 `toggleable`로 변경하여 가독성과 컴포넌트 역할을 명확히 했습니다. * `clickable` 대신 `toggleable` 속성 사용 * `semantics` 내 `Role.Checkbox` 중복 설정 제거 --- .../core/designsystem/component/PrezelCheckbox.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 82a0fa0..2f0fb82 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -1,7 +1,6 @@ package com.team.prezel.core.designsystem.component import androidx.compose.foundation.background -import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -10,6 +9,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.selection.toggleable import androidx.compose.material3.Icon import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -21,8 +21,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource 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 com.team.prezel.core.designsystem.R import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles @@ -63,12 +61,13 @@ fun PrezelCheckbox( Box( modifier = modifier - .semantics { role = Role.Checkbox } .size(checkboxSize) - .clickable( + .toggleable( + value = checked, + role = Role.Checkbox, interactionSource = remember { MutableInteractionSource() }, indication = null, - onClick = { onCheckedChange(!checked) }, + onValueChange = onCheckedChange, ), contentAlignment = Alignment.Center, ) { From 0f38df648d79af184be3318bed360633a9672c60 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 25 Jan 2026 13:21:25 +0900 Subject: [PATCH 06/10] =?UTF-8?q?feat:=20PrezelCheckbox=20=ED=84=B0?= =?UTF-8?q?=EC=B9=98=20=EC=98=81=EC=97=AD=20=ED=99=95=EC=9E=A5=20=EB=B0=8F?= =?UTF-8?q?=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=B0=B8=EC=A1=B0=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `MinTouchTargetSize(48.dp)`를 적용하여 체크박스의 터치 영역을 확장했습니다. - 아이콘 리소스를 `PrezelIcons` 오브젝트 참조 방식으로 변경했습니다. - `toggleable` 파라미터 순서를 조정했습니다. --- .../core/designsystem/component/PrezelCheckbox.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 2f0fb82..9b12f00 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp import com.team.prezel.core.designsystem.R import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles +import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.ThemePreview import com.team.prezel.core.designsystem.theme.PrezelTheme @@ -32,6 +33,8 @@ enum class CheckboxSize { LARGE, } +private val MinTouchTargetSize = 48.dp + @Composable fun PrezelCheckbox( contentDescription: String, @@ -47,9 +50,9 @@ fun PrezelCheckbox( val iconRes = if (checked) { - R.drawable.ic_check_circle_filled + PrezelIcons.CheckCircleFilled } else { - R.drawable.ic_check_circle_outlined + PrezelIcons.CheckCircleOutlined } val iconColor = @@ -61,12 +64,12 @@ fun PrezelCheckbox( Box( modifier = modifier - .size(checkboxSize) + .size(MinTouchTargetSize) .toggleable( value = checked, - role = Role.Checkbox, interactionSource = remember { MutableInteractionSource() }, indication = null, + role = Role.Checkbox, onValueChange = onCheckedChange, ), contentAlignment = Alignment.Center, From 00299d5784eeffa657d5ee2b176a0cf35eccefb2 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 25 Jan 2026 13:52:19 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat:=20PrezelCheckbox=20=ED=84=B0?= =?UTF-8?q?=EC=B9=98=20=EC=98=81=EC=97=AD=20=ED=99=95=EC=9E=A5=20=EB=B0=8F?= =?UTF-8?q?=20=EC=95=84=EC=9D=B4=EC=BD=98=20=EC=B0=B8=EC=A1=B0=20=EB=B0=A9?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - `MinTouchTargetSize(48.dp)`를 적용하여 체크박스의 터치 영역을 확장했습니다. - 아이콘 리소스를 `PrezelIcons` 오브젝트 참조 방식으로 변경했습니다. - `toggleable` 파라미터 순서를 조정했습니다. --- .../team/prezel/core/designsystem/component/PrezelCheckbox.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 9b12f00..0a8dd6c 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp -import com.team.prezel.core.designsystem.R import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.ThemePreview @@ -37,10 +36,10 @@ private val MinTouchTargetSize = 48.dp @Composable fun PrezelCheckbox( + checked: Boolean, contentDescription: String, modifier: Modifier = Modifier, size: CheckboxSize = CheckboxSize.REGULAR, - checked: Boolean = false, onCheckedChange: (Boolean) -> Unit, ) { val checkboxSize = when (size) { From 02c8d55cae5b31e26178301d0aff79108bf52c33 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 25 Jan 2026 14:16:47 +0900 Subject: [PATCH 08/10] =?UTF-8?q?feat:=20PrezelCheckbox=20=EB=82=B4=20cont?= =?UTF-8?q?entDescription=20=EC=A0=9C=EA=B1=B0=20=EB=B0=8F=20=EB=82=B4?= =?UTF-8?q?=EB=B6=80=20=EB=A6=AC=EC=86=8C=EC=8A=A4=EB=A1=9C=20=EB=8C=80?= =?UTF-8?q?=EC=B2=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `PrezelCheckbox` 컴포넌트 호출 시 매번 `contentDescription`을 주입받는 대신, 디자인 시스템 내부의 공통 문자열 리소스를 사용하도록 변경했습니다. * `PrezelCheckbox` 파라미터에서 `contentDescription` 제거 * 내부 `Icon`의 `contentDescription`을 `R.string.core_designsystem_checkbox_desc`로 고정 * Preview 및 호출부의 불필요한 인자 제거 --- .../prezel/core/designsystem/component/PrezelCheckbox.kt | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 0a8dd6c..5531afd 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -20,8 +20,10 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.Role import androidx.compose.ui.unit.dp +import com.team.prezel.core.designsystem.R import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles import com.team.prezel.core.designsystem.icon.PrezelIcons import com.team.prezel.core.designsystem.preview.ThemePreview @@ -37,7 +39,6 @@ private val MinTouchTargetSize = 48.dp @Composable fun PrezelCheckbox( checked: Boolean, - contentDescription: String, modifier: Modifier = Modifier, size: CheckboxSize = CheckboxSize.REGULAR, onCheckedChange: (Boolean) -> Unit, @@ -75,7 +76,7 @@ fun PrezelCheckbox( ) { Icon( painter = painterResource(id = iconRes), - contentDescription = contentDescription, + contentDescription = stringResource(R.string.core_designsystem_checkbox_desc), modifier = Modifier.size(checkboxSize), tint = iconColor, ) @@ -95,14 +96,12 @@ private fun PrezelRegularCheckboxPreview() { var checkState by remember { mutableStateOf(true) } PrezelCheckbox( - contentDescription = "", size = CheckboxSize.REGULAR, checked = checkState, onCheckedChange = { checkState = it }, ) PrezelCheckbox( - contentDescription = "", size = CheckboxSize.REGULAR, checked = !checkState, onCheckedChange = { checkState = it }, @@ -125,14 +124,12 @@ private fun PrezelLargeCheckboxPreview() { var checkState by remember { mutableStateOf(true) } PrezelCheckbox( - contentDescription = "", size = CheckboxSize.LARGE, checked = checkState, onCheckedChange = { checkState = it }, ) PrezelCheckbox( - contentDescription = "", size = CheckboxSize.LARGE, checked = !checkState, onCheckedChange = { checkState = it }, From 46d9e50464b544b834367ee1e2e56656c3136875 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 25 Jan 2026 14:21:37 +0900 Subject: [PATCH 09/10] =?UTF-8?q?refactor:=20PrezelCheckbox=20=EB=82=B4=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=83=81=EC=88=98=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `MinTouchTargetSize` 상수를 제거하고, 해당 값이 사용되던 부분을 하드코딩된 값(48.dp)으로 교체했습니다. --- .../team/prezel/core/designsystem/component/PrezelCheckbox.kt | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 5531afd..2740524 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -34,8 +34,6 @@ enum class CheckboxSize { LARGE, } -private val MinTouchTargetSize = 48.dp - @Composable fun PrezelCheckbox( checked: Boolean, @@ -64,7 +62,7 @@ fun PrezelCheckbox( Box( modifier = modifier - .size(MinTouchTargetSize) + .size(48.dp) .toggleable( value = checked, interactionSource = remember { MutableInteractionSource() }, From 40f9eb96759429b95bf00da5ebdd6dac67914880 Mon Sep 17 00:00:00 2001 From: Ham BeomJoon Date: Sun, 25 Jan 2026 14:45:50 +0900 Subject: [PATCH 10/10] =?UTF-8?q?refactor:=20PrezelCheckbox=20=EB=82=B4=20?= =?UTF-8?q?interactionSource=EB=A5=BC=20null=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PrezelCheckbox의 `toggleable` modifier에서 불필요한 `MutableInteractionSource` 생성을 제거하고 `null`을 전달하도록 수정했습니다. --- .../team/prezel/core/designsystem/component/PrezelCheckbox.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt index 2740524..cb3adb5 100644 --- a/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt +++ b/Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt @@ -1,7 +1,6 @@ package com.team.prezel.core.designsystem.component import androidx.compose.foundation.background -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -65,7 +64,7 @@ fun PrezelCheckbox( .size(48.dp) .toggleable( value = checked, - interactionSource = remember { MutableInteractionSource() }, + interactionSource = null, indication = null, role = Role.Checkbox, onValueChange = onCheckedChange,