[UI/#45] 디자인 컴포넌트 구현 및 ui 화면 퍼블리싱 작업 진행#48
Conversation
- ProgressBarGradientStartColor 추가 - ProgressBarGradientEndColor 추가 - HomeGradientStartColor 추가 - HomeGradientEndColor 추가 - CoolGray7 색상값 수정
- ProgressBarGradientStartColor 추가 - ProgressBarGradientEndColor 추가 - HomeGradientStartColor 추가 - HomeGradientEndColor 추가 - CoolGray7 색상값 수정
…hub/Bitnagil-Android into ui/#45-common-component
- 감정 선택 화면 UI를 디자인에 맞게 수정 - 각 감정에 해당하는 아이콘을 적용
- 기존의 Box로 구현되어 있던 TopBar들을 BitnagilTopBar로 대체
- FloatingActionButton, FloatingActionMenu 컴포넌트 추가
Walkthrough이 PR은 Bitnagil 디자인 시스템의 공통 컴포넌트(아이콘, 버튼, 체크박스, 프로그레스바 등)를 대거 추가하고, 기존 프레젠테이션 레이어의 UI를 새 컴포넌트로 리팩토링합니다. ripple 효과 제거를 위한 커스텀 clickable modifier도 도입되었으며, 홈 및 온보딩, 마이페이지, 세팅 등 주요 화면의 상단바 및 버튼, 아이콘 등이 통일된 디자인 시스템 컴포넌트로 교체되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant HomeScreen
participant HomeNavHost
participant HomeNavigator
participant FloatingActionMenu
User->>HomeScreen: 화면 진입
HomeScreen->>HomeNavHost: 화면 렌더링
HomeNavHost->>HomeNavigator: shouldShowFloatingAction()
HomeNavigator-->>HomeNavHost: Boolean 반환
alt 플로팅 액션 노출 조건
HomeNavHost->>FloatingActionMenu: 메뉴 표시
User->>FloatingActionMenu: 액션 선택/닫기
FloatingActionMenu->>HomeNavHost: 상태 업데이트
end
Estimated code review effort🎯 4 (Complex) | ⏱️ ~45 minutes Assessment against linked issues
Assessment against linked issues: Out-of-scope changes(해당 PR의 변경사항은 모두 디자인 시스템 공통 컴포넌트 구현 및 적용과 직결되어 있습니다. 범위를 벗어난 기능적 변경은 발견되지 않았습니다.) Possibly related PRs
Suggested labels
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. ✨ Finishing Touches
🧪 Generate unit tests
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 11
🔭 Outside diff range comments (2)
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/template/TimePickerBottomSheet.kt (1)
107-114: 하드코딩된 문자열은 string 리소스로 분리하세요
text = "저장"은 다국어 지원·QA 과정에서 누락될 위험이 있습니다.
R.string.save와 같이 values/strings.xml 로 분리하면 유지보수가 용이합니다.- text = "저장", + text = stringResource(id = R.string.save),presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/tooltipbutton/TooltipButton.kt (1)
94-106: 접근성 개선을 고려해보세요.
BitnagilIcon의contentDescription이 현재 null로 설정되어 있어 스크린 리더 사용자에게 버튼의 목적이 전달되지 않습니다.BitnagilIcon 컴포넌트에 적절한 contentDescription을 추가하는 것을 고려해보세요:
BitnagilIcon( id = R.drawable.ic_tooltip, tint = BitnagilTheme.colors.navy200, + contentDescription = "툴팁 보기", modifier = Modifier .clickableWithoutRipple { coroutineScope.launch { tooltipState.show() } } .onGloballyPositioned { coordinate -> buttonSize = coordinate.size }, )
🧹 Nitpick comments (21)
core/designsystem/src/main/res/drawable/ic_down_arrow.xml (1)
6-8: 하드코드된 컬러 hex 값 대신 디자인시스템 컬러 리소스 사용 권장
android:fillColor="#3D4967"처럼 XML 내부에 직접 색상 코드를 넣으면 향후 다크모드·테마 대응 시 유지보수가 어렵습니다.
@color/bitnagil_navy등 공통 팔레트 리소스로 분리해 두면 테마 변경·전역 컬러 교체 작업이 쉬워집니다.core/designsystem/src/main/res/drawable/ic_plus.xml (1)
6-17: 아이콘 stroke 속성 통일 및 컬러 리소스화 필요
strokeWidth="1.4"는 다른 신규 아이콘(예: close 1.7, detail 1.8)과 두께가 제각각입니다. 디자인 가이드에 맞춰 공통 기준(예: 1.5dp)으로 통일하는 편이 좋습니다.android:strokeColor="#3D4967"역시 컬러 리소스로 분리하여 테마 대응성을 높여주세요.core/designsystem/src/main/res/drawable/ic_back_arrow_36.xml (1)
6-8: 블랙(#000000) 고정 색상은 틴트 적용 시 예상치 못한 결과 가능성
BitnagilIcon에서 tint 컬러를 입힐 때, 내부 path 가 #000000 이면 ColorFilter 로 전체가 잘 덮어씌워지긴 하지만 투명도·다크모드에서 의도치 않은 대비 문제를 일으킬 수 있습니다.
다른 아이콘과 일관성을 위해 네이비 계열 기본색 또는@color/neutral_on_surface와 같은 중립 색상으로 맞추는 것을 권장합니다.core/designsystem/src/main/res/drawable/ic_detail_routine.xml (1)
7-12: strokeWidth 1.8dp ‑ 디자인 시스템 굵기 규칙 재확인 필요다른 신규 아이콘은 1.4~1.7dp 범위인데, 이 아이콘만 1.8dp 로 더 두껍습니다. 실제 UI 상에서 일관된 두께로 보이는지 한 번 더 확인해주세요.
core/designsystem/src/main/res/drawable/ic_close.xml (1)
6-17: strokeWidth 및 컬러 상수화 제안
strokeWidth="1.7"/strokeColor="#AEB0B6"역시 다른 아이콘과 통일된 값·공통 컬러 리소스로 관리하면 향후 유지보수가 용이합니다.core/designsystem/src/main/res/drawable/ic_rotate.xml (1)
9-10: strokeColor 하드코딩 제거
#70737C대신 디자인 시스템 컬러 리소스로 분리하세요. 동일 의견이 반복되므로 추후 스크립트로 일괄 치환을 고려해도 좋겠습니다.core/designsystem/src/main/res/drawable/ic_right_arrow_20.xml (1)
6-8: 리소스 색상 하드코딩 지양
android:fillColor="#000000"값이 테마를 인지하지 못해 다크모드·색상 테마 변환 시 아이콘이 부자연스럽게 보일 수 있습니다.
?attr/colorOnBackground같은 테마 attribute 혹은@color/bitnagil_icon_default와 같은 리소스로 추출해두면 유지보수성과 확장성이 올라갑니다.core/designsystem/src/main/res/drawable/ic_see_more.xml (1)
6-27: 아이콘 색상·레이어 중복 최적화 필요
- 세 개의 path마다
#0D1B41와#000000(alpha 0.2) 쌍을 두 번씩 반복해 그림자 효과를 주고 있습니다. 동일한 효과는<group android:alpha="0.2">로 감싸거나android:tint+ elevation 로 표현해 XML 용량을 줄일 수 있습니다.- 색상 값 역시 테마 리소스로 분리하면 다크모드 호환성이 개선됩니다.
core/designsystem/src/main/res/drawable/ic_setting.xml (1)
6-20: Stroke 색상 리소스화 권장두 개의 path 모두
android:strokeColor="#000000"로 고정돼 있습니다. 디자인 시스템 아이콘 전반에서 색상이 일관되게 교체되도록@color/bitnagil_icon_stroke와 같은 리소스나?attr/colorOnBackground로 추출해 주세요.core/designsystem/src/main/res/drawable/ic_trash.xml (1)
9-18: 테마 대응을 위한 strokeColor 추출 권장
strokeColor="#0D1B41"와#000000(alpha 0.2) 값이 직접 들어가 있어 테마별 색상 변경이 어렵습니다. 다른 아이콘과 함께 색상 리소스를 공유하도록 분리해 주세요.core/designsystem/src/main/res/drawable/ic_report.xml (1)
1-56: 벡터 drawable 구조가 잘 설계되었습니다.복합적인 path 구조와 적절한 strokeAlpha 사용으로 시각적 깊이감을 표현한 아이콘입니다. 다만 중복된 path 구조를 단순화할 수 있는지 검토해보세요.
중복된 path 패턴이 보입니다. 예를 들어 6-10번 라인과 12-16번 라인은 동일한 pathData를 사용하되 strokeAlpha만 다릅니다. 가능하다면 그룹화나 레이어 사용을 고려해보세요:
+ <group> <path android:pathData="M6,7L11,7A1,1 0,0 1,12 8L12,13A1,1 0,0 1,11 14L6,14A1,1 0,0 1,5 13L5,8A1,1 0,0 1,6 7z" android:strokeWidth="1.6" android:fillColor="#00000000" android:strokeColor="#0D1B41"/> + </group> + <group android:alpha="0.2"> <path android:pathData="M6,7L11,7A1,1 0,0 1,12 8L12,13A1,1 0,0 1,11 14L6,14A1,1 0,0 1,5 13L5,8A1,1 0,0 1,6 7z" - android:strokeAlpha="0.2" android:strokeWidth="1.6" android:fillColor="#00000000" android:strokeColor="#000000"/> + </group>core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilProgressTopBar.kt (2)
18-42: 컴포넌트 구현이 잘 되었지만 progress 값 검증을 고려해보세요.전체적으로 깔끔한 구현이지만, progress 파라미터에 대한 범위 검증(0f..1f)을 추가하는 것을 고려해보세요.
@Composable fun BitnagilProgressTopBar( progress: Float, onBackClick: () -> Unit, modifier: Modifier = Modifier, ) { + val validatedProgress = progress.coerceIn(0f, 1f) Row( // ... rest of the implementation BitnagilProgressBar( - progress = progress, + progress = validatedProgress, modifier = Modifier, ) } }
18-42: 잘 설계된 컴포넌트 구현백 네비게이션과 프로그레스 표시를 결합한 재사용 가능한 컴포넌트로 잘 구현되었습니다. 디자인 시스템 컴포넌트들을 적절히 활용하고 있습니다.
다음 개선사항을 고려해보세요:
BitnagilProgressBar( progress = progress, - modifier = Modifier, )기본
Modifier는 생략 가능합니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
21-27: 구현이 깔끔하지만 접근성을 위해 contentDescription 파라미터 추가를 고려해보세요.현재 contentDescription이 null로 고정되어 있어 모든 아이콘이 장식용으로 처리됩니다. 접근성 향상을 위해 선택적 contentDescription 파라미터를 추가하는 것을 고려해보세요.
@Composable fun BitnagilIcon( @DrawableRes id: Int, modifier: Modifier = Modifier, tint: Color? = BitnagilTheme.colors.black, + contentDescription: String? = null, ) { Image( imageVector = ImageVector.vectorResource(id), - contentDescription = null, + contentDescription = contentDescription, colorFilter = tint?.let { ColorFilter.tint(it) }, modifier = modifier, ) }core/designsystem/src/main/res/drawable/ic_add_routine.xml (1)
1-60: 복잡한 벡터 드로어블의 구조 검토 필요.아이콘이 여러 레이어와 경로로 구성되어 시각적 깊이를 제공하지만, 렌더링 성능을 고려할 때 최적화 가능성을 검토해보세요. 특히 중복되는 경로나 불필요한 알파 레이어가 있는지 확인이 필요합니다.
다음 사항들을 검토해보세요:
- 중복되는 strokeColor와 strokeAlpha 조합 (라인 10-13, 16-19, 32-44, 46-59)
- 복잡한 pathData가 단순화 가능한지 여부
- 그림자 효과가 실제로 필요한지 검토
presentation/src/main/java/com/threegap/bitnagil/presentation/home/model/EmotionBallType.kt (1)
12-41: 색상 값의 하드코딩을 검토해주세요.각 감정 타입의 색상들이 하드코딩되어 있습니다. 디자인 시스템의 색상 팔레트(
BitnagilTheme.colors)와의 일관성을 확인하고, 가능하다면 테마 색상을 사용하는 것을 고려해보세요.예시로 CALM 타입을 수정한다면:
CALM( drawableId = R.drawable.calm, - ambientColor = Color(0xFFB987FF).copy(alpha = 0.57f), - spotColor = Color(0xFFB987FF), + ambientColor = BitnagilTheme.colors.purple500.copy(alpha = 0.57f), + spotColor = BitnagilTheme.colors.purple500, ),core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilProgressBar.kt (1)
109-121: 프리뷰의 클릭 처리를 개선하면 좋겠습니다.프리뷰에서 일반
clickablemodifier를 사용하고 있습니다. 디자인 시스템의 일관성을 위해clickableWithoutRipple을 사용하는 것을 고려해보세요.Text( text = "down", - modifier = Modifier.clickable { + modifier = Modifier.clickableWithoutRipple { progress = 0f }, ) Text( text = "up", - modifier = Modifier.clickable { + modifier = Modifier.clickableWithoutRipple { progress += 0.1f }, )presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/CollapsibleHomeHeader.kt (1)
86-89: 아이콘 리소스 경로 일관성 확인 필요다른 부분에서는
com.threegap.bitnagil.designsystem.R.drawable.ic_right_arrow_20으로 전체 경로를 사용하는데, 여기서는com.threegap.bitnagil.designsystem.R.drawable.ic_right_arrow_20으로 사용되고 있습니다. 일관성을 위해 import 방식을 통일해주세요.-import com.threegap.bitnagil.designsystem.BitnagilTheme +import com.threegap.bitnagil.designsystem.BitnagilTheme +import com.threegap.bitnagil.designsystem.R as DesignSystemR그리고 사용 부분을:
-id = com.threegap.bitnagil.designsystem.R.drawable.ic_right_arrow_20, +id = DesignSystemR.drawable.ic_right_arrow_20,presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineDetailsBottomSheet.kt (1)
212-213: 아이콘 리소스 경로 일관성 점검
com.threegap.bitnagil.designsystem.R.drawable.ic_edit형태로 전체 경로를 사용하고 있는데, 다른 파일들과의 일관성을 위해 import alias 사용을 고려해보세요.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/atom/EmotionBall.kt (1)
31-35: 모디파이어 순서 최적화 제안성능상
size()모디파이어를padding()이후에 적용하는 것이 더 효율적일 수 있습니다.modifier = modifier .size(172.dp) .clickableWithoutRipple { onClick() } - .padding(10.dp) - .fillMaxSize() + .padding(10.dp) + .fillMaxSize()하지만 현재 구현도 의도한 대로 동작하므로 변경은 선택사항입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilFloatingButton.kt (1)
139-170: FloatingActionMenuItem의 애니메이션이 불필요할 수 있습니다.
FloatingActionMenuItem에서animateFloatAsState를 사용한 scale 애니메이션이 있지만, 실제로는 항상targetValue = 1f로 고정되어 있어 애니메이션 효과가 없습니다. 이는 불필요한 연산을 발생시킬 수 있습니다.@Composable private fun FloatingActionMenuItem( @DrawableRes icon: Int, text: String, onClick: () -> Unit, modifier: Modifier = Modifier, ) { - val scale by animateFloatAsState( - targetValue = 1f, - animationSpec = tween(durationMillis = 200), - label = "menu_item_scale", - ) - Row( verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(14.dp), modifier = modifier - .scale(scale) .clickableWithoutRipple { onClick() }, ) {
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (35)
core/designsystem/src/main/res/drawable-hdpi/anxiety.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/calm.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/default_ball.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/fatigue.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/lethargy.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/satisfaction.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/vitality.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/anxiety.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/calm.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/default_ball.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/fatigue.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/lethargy.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/satisfaction.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/vitality.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/anxiety.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/calm.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/default_ball.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/fatigue.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/lethargy.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/satisfaction.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/vitality.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/anxiety.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/calm.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/default_ball.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/fatigue.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/lethargy.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/satisfaction.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/vitality.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/anxiety.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/calm.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/default_ball.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/fatigue.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/lethargy.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/satisfaction.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/vitality.pngis excluded by!**/*.png
📒 Files selected for processing (78)
app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavHost.kt(2 hunks)app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavigator.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/BitnagilColors.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/Color.kt(2 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilCheckBox.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilFloatingButton.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilProgressBar.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilSelectButton.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilTextButton.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilOptionButton.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilProgressTopBar.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt(1 hunks)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/modifier/ModifierExt.kt(1 hunks)core/designsystem/src/main/res/drawable/ic_add_routine.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_arrow_down_up.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_back_arrow_20.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_back_arrow_36.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_check.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_close.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_detail_routine.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_down_arrow.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_edit.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_kakao_login.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_name_routine.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_plus.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_report.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_right_arrow_20.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_rotate.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_see_more.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_setting.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_tooltip.xml(1 hunks)core/designsystem/src/main/res/drawable/ic_trash.xml(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/emotion/EmotionScreen.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/emotion/model/Emotion.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/atom/EmotionBall.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/RoutineItem.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/SubRoutinesItem.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/CollapsibleHomeHeader.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/DeleteConfirmDialog.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineDetailsBottomSheet.kt(7 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineEmptyView.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineSortBottomSheet.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/WeeklyDatePicker.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/home/model/EmotionBallType.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/OnBoardingScreen.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/iconbutton/IconButton.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/iconbutton/Preview.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/progress/OnBoardingProgress.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/progress/Preview.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/textbutton/Preview.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/textbutton/TextButton.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/block/selectbutton/OnBoardingSelectButton.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/block/selectbutton/Preview.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingAbstractTemplate.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingSelectTemplate.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/RecommendRoutineScreen.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/atom/RecommendCategoryChip.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/EmotionRecommendRoutineButton.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/RecommendRoutineItem.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/template/RoutineDifficultyBottomSheet.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/setting/SettingScreen.kt(5 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/setting/component/block/settingrowbutton/SettingRowButton.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/terms/TermsAgreementScreen.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/TermsAgreementItem.kt(4 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/ToggleAllAgreementsItem.kt(1 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/webview/BitnagilWebViewScreen.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineScreen.kt(6 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/namefield/NameField.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/selectcell/SelectCell.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/strokebutton/StrokeButton.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/Preview.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt(0 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/tooltipbutton/TooltipButton.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/block/labeledcheckbox/LabeledCheckBox.kt(3 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/template/TimePickerBottomSheet.kt(2 hunks)
💤 Files with no reviewable changes (11)
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/textbutton/Preview.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/progress/OnBoardingProgress.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/Preview.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/progress/Preview.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/block/selectbutton/Preview.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/iconbutton/Preview.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/setting/component/block/settingrowbutton/SettingRowButton.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/textbutton/TextButton.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/block/selectbutton/OnBoardingSelectButton.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/iconbutton/IconButton.kt
🧰 Additional context used
🧠 Learnings (40)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/SubRoutinesItem.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/template/RoutineDifficultyBottomSheet.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/RecommendRoutineScreen.kt (3)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
Learnt from: l5x5l
PR: #41
File: presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/model/MyPageState.kt:6-14
Timestamp: 2025-07-23T13:31:46.809Z
Learning: In the Bitnagil Android project, MviState interface extends Parcelable, so any class implementing MviState automatically implements Parcelable. Therefore, @parcelize annotation works correctly without explicitly adding Parcelable implementation.
Learnt from: l5x5l
PR: #41
File: presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/model/MyPageState.kt:6-14
Timestamp: 2025-07-23T13:31:46.809Z
Learning: In the Bitnagil Android project, MviState interface extends Parcelable, so any class implementing MviState automatically implements Parcelable. Therefore, @parcelize annotation works correctly without explicitly adding Parcelable implementation.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/atom/RecommendCategoryChip.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/namefield/NameField.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/WeeklyDatePicker.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/terms/TermsAgreementScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/selectcell/SelectCell.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/strokebutton/StrokeButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/EmotionRecommendRoutineButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineSortBottomSheet.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineEmptyView.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilCheckBox.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/setting/SettingScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/webview/BitnagilWebViewScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/RoutineItem.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/block/labeledcheckbox/LabeledCheckBox.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/DeleteConfirmDialog.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/atom/EmotionBall.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingAbstractTemplate.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilOptionButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/RecommendRoutineItem.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/TermsAgreementItem.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/template/TimePickerBottomSheet.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/OnBoardingScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/tooltipbutton/TooltipButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt (2)
Learnt from: l5x5l
PR: #41
File: presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/model/MyPageIntent.kt:6-6
Timestamp: 2025-07-23T13:32:26.263Z
Learning: In the Bitnagil Android project's MVI architecture, Intent classes like LoadMyPageSuccess are named to represent successful API response results that carry loaded data, not just user actions. This naming convention is used for future API integration where the intent will be triggered when my page data loading succeeds from the server.
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/emotion/EmotionScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilTextButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/ToggleAllAgreementsItem.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilProgressBar.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingSelectTemplate.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilSelectButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/CollapsibleHomeHeader.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineDetailsBottomSheet.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilFloatingButton.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
🧬 Code Graph Analysis (18)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/SubRoutinesItem.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilProgressTopBar.kt (2)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilProgressBar.kt (1)
BitnagilProgressBar(31-74)
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/template/RoutineDifficultyBottomSheet.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/namefield/NameField.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/WeeklyDatePicker.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/EmotionRecommendRoutineButton.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineSortBottomSheet.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/webview/BitnagilWebViewScreen.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt (1)
BitnagilTopBar(22-66)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/block/labeledcheckbox/LabeledCheckBox.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/RecommendRoutineItem.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/template/TimePickerBottomSheet.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilTextButton.kt (1)
BitnagilTextButton(33-83)
presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/OnBoardingScreen.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilProgressTopBar.kt (1)
BitnagilProgressTopBar(18-42)
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/tooltipbutton/TooltipButton.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/CollapsibleHomeHeader.kt (2)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/atom/EmotionBall.kt (1)
EmotionBall(21-53)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilFloatingButton.kt (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineScreen.kt (3)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt (1)
BitnagilTopBar(22-66)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
BitnagilIcon(15-27)core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilTextButton.kt (1)
BitnagilTextButton(33-83)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (126)
core/designsystem/src/main/res/drawable/ic_arrow_down_up.xml (1)
2-5: 아이콘 규격(40 dp) 재검토 필요대부분의 디자인 시스템 아이콘은 24 dp 혹은 32 dp 규격을 사용합니다. 40 dp 크기는 다른 컴포넌트와 정렬이 어긋날 수 있으니 실제 배치 위치에서 시각적 균형을 다시 확인해 주세요.
core/designsystem/src/main/res/drawable/ic_name_routine.xml (1)
2-5: 아이콘 사이즈(28 dp) 통일성 확인동일 계열 아이콘(예: 리스트용) 사이즈가 20 dp/24 dp와 혼재될 경우 UI 밀집도가 달라집니다. 28 dp가 의도된 값인지, 혹은 24 dp로 맞춰야 하는지 한번 더 검토해 주세요.
core/designsystem/src/main/res/drawable/ic_check.xml (1)
1-9: LGTM! 체크 아이콘이 올바르게 구현되었습니다.벡터 드로어블이 올바르게 정의되었으며, 디자인 시스템의 일관성을 위해 Material 아이콘을 대체하는 좋은 접근입니다. 16x16 크기와 다크 블루 색상(#0D1B41)이 적절하게 설정되어 있습니다.
core/designsystem/src/main/res/drawable/ic_kakao_login.xml (1)
1-9: LGTM! 카카오 로그인 아이콘이 적절히 구현되었습니다.벡터 드로어블이 올바르게 정의되었으며, 24x24 크기와 검은색 채우기가 카카오 브랜딩에 적합합니다. 말풍선 모양의 패스 데이터가 메시징 앱 특성을 잘 표현하고 있습니다.
core/designsystem/src/main/res/drawable/ic_edit.xml (1)
1-13: LGTM! 편집 아이콘이 잘 구현되었습니다.스트로크 기반의 벡터 드로어블이 올바르게 정의되었습니다. 투명한 채우기와 흰색 스트로크(1.6 너비), 둥근 라인 캡/조인을 사용하여 모던하고 깔끔한 디자인을 구현했습니다. 문서와 연필을 표현한 패스 데이터가 편집 기능을 직관적으로 나타냅니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/atom/RecommendCategoryChip.kt (2)
16-16: 디자인 시스템 일관성을 위한 적절한 import 변경입니다.표준 clickable 대신 커스텀
clickableWithoutRipplemodifier를 사용하기 위한 import 추가가 적절합니다.
32-32: LGTM! 일관된 상호작용 경험을 위한 modifier 교체입니다.리플 효과를 제거하는 커스텀 modifier로 교체하여 디자인 시스템 전반의 일관성을 확보했습니다. 기존 기능은 그대로 유지되면서 상호작용 피드백만 통일되었습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/EmotionRecommendRoutineButton.kt (3)
18-20: 디자인 시스템 컴포넌트 사용을 위한 적절한 import 추가입니다.
BitnagilIcon, drawable 리소스, 그리고 커스텀 clickable modifier 사용을 위한 import가 올바르게 추가되었습니다.
41-41: 일관된 상호작용 경험을 위한 modifier 교체입니다.표준 clickable을
clickableWithoutRipple로 교체하여 앱 전반의 일관된 상호작용 피드백을 제공합니다.
47-53: LGTM! Material Icons를 커스텀 디자인 시스템 아이콘으로 성공적으로 교체했습니다.
Icons.Default.Add를BitnagilIcon과R.drawable.ic_plus로 교체하여 디자인 시스템의 일관성을 확보했습니다. 테마 색상을 사용한 tint 적용도 적절합니다. 이는 앱 전반의 아이콘 표준화 작업의 좋은 예시입니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineEmptyView.kt (1)
18-18: 디자인 시스템 통일화를 위한 적절한 변경입니다.
clickableWithoutRipple모디파이어 도입으로 앱 전반의 상호작용 일관성을 확보하는 좋은 변경사항입니다.Also applies to: 49-49
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/template/RoutineDifficultyBottomSheet.kt (1)
16-18: 디자인 시스템 컴포넌트로의 교체가 잘 이루어졌습니다.
clickableWithoutRipple사용과BitnagilIcon으로의 교체를 통해 앱 전반의 UI 일관성이 향상되었습니다. 특히 선택 상태 표시를 위한 체크 아이콘이 디자인 시스템과 통일되었습니다.Also applies to: 72-72, 83-86
presentation/src/main/java/com/threegap/bitnagil/presentation/webview/BitnagilWebViewScreen.kt (1)
19-19: 재사용 가능한 컴포넌트로의 리팩토링이 훌륭합니다.수동으로 구현된 헤더 레이아웃을
BitnagilTopBar로 교체하여 코드가 간소화되고 앱 전반의 상단바 UI 일관성이 향상되었습니다.Also applies to: 68-72
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/selectcell/SelectCell.kt (2)
14-14: 리플 효과 제거를 위한 커스텀 수정자 적용이 적절합니다.디자인 시스템 일관성을 위해 표준
clickable수정자를clickableWithoutRipple로 교체한 것이 올바른 접근입니다. 이는 PR 전반에 걸쳐 일관되게 적용된 패턴과 일치합니다.Also applies to: 30-30
33-37: 명시적 색상 지정으로 테마 일관성이 향상되었습니다.기본 색상 대신
BitnagilTheme.colors.navy400을 명시적으로 지정하여 디자인 시스템의 색상 일관성을 보장하는 좋은 변경입니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/modifier/ModifierExt.kt (1)
10-24: 리플 효과 제거를 위한 수정자 구현이 올바릅니다.
clickableWithoutRipple수정자의 구현이 Compose 베스트 프랙티스를 잘 따르고 있습니다:
composed를 사용한 상태 저장 수정자 생성remember를 통한MutableInteractionSource최적화indication = null로 리플 효과 제거이는 전체 앱에서 일관된 UI 상호작용을 위한 핵심 컴포넌트로 잘 설계되었습니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/Color.kt (2)
14-17: 그라디언트 색상 추가가 디자인 시스템 확장을 잘 지원합니다.프로그레스 바와 홈 화면을 위한 새로운 그라디언트 색상들이 추가되었습니다. 기존 네이밍 컨벤션을 잘 따르고 있으며 새로운 UI 컴포넌트들을 지원하기 위한 적절한 색상 정의입니다.
33-33: CoolGray7 색상 값 조정이 적용되었습니다.색상 값이 미세하게 조정되었습니다 (0xFF0F0F10 → 0xFF141415). 디자인 시스템의 색상 팔레트 개선의 일환으로 보입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/strokebutton/StrokeButton.kt (2)
14-14: 일관된 클릭 상호작용을 위한 수정자 교체가 적절합니다.
clickableWithoutRipple수정자 사용으로 디자인 시스템 전반의 일관된 상호작용 패턴을 구현했습니다. 이는 다른 컴포넌트들과 동일한 개선 사항입니다.Also applies to: 84-84
80-80: 테두리 두께 조정이 시각적 일관성을 개선합니다.테두리 두께를 1.5.dp에서 1.dp로 줄인 것은 디자인 시스템의 시각적 일관성을 위한 세밀한 조정으로 보입니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/component/block/RecommendRoutineItem.kt (2)
19-21: 디자인 시스템 컴포넌트 및 수정자 적용이 일관성 있게 구현되었습니다.
BitnagilIcon컴포넌트로 아이콘 통일clickableWithoutRipple수정자로 상호작용 일관성 확보- 필요한 import 문들이 올바르게 추가됨
전체 PR에서 일관되게 적용되는 패턴과 일치하여 좋습니다.
Also applies to: 39-39
62-66: 커스텀 아이콘 컴포넌트로 교체가 올바르게 구현되었습니다.Material Icons의
Icons.Default.Add대신 커스텀BitnagilIcon과 drawable 리소스(ic_plus)를 사용하는 것이 디자인 시스템 일관성 목표에 부합합니다. 테마 기반 tint 적용도 적절합니다.presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/namefield/NameField.kt (2)
17-19: 디자인 시스템 컴포넌트 도입이 올바르게 적용되었습니다.Material3 컴포넌트를 커스텀
BitnagilIcon과clickableWithoutRipplemodifier로 교체한 것이 일관성 있게 처리되었습니다.
54-61: 아이콘 교체 및 리플 효과 제거가 적절히 구현되었습니다.Material Icons를 drawable 리소스 기반의
BitnagilIcon으로 교체하고, 리플 효과 없는 클릭 처리가 올바르게 적용되었습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/recommendroutine/RecommendRoutineScreen.kt (4)
28-31: 디자인 시스템 컴포넌트 import가 올바르게 추가되었습니다.필요한 모든 디자인 시스템 컴포넌트와 modifier가 적절히 import되었습니다.
83-83: 재사용 가능한 BitnagilTopBar 컴포넌트로 교체되었습니다.커스텀 헤더 구현을 표준화된
BitnagilTopBar로 교체하여 UI 일관성을 확보했습니다.
127-127: 리플 효과 제거가 올바르게 적용되었습니다.난이도 선택 영역에
clickableWithoutRipplemodifier가 적절히 적용되어 일관된 인터랙션 경험을 제공합니다.
136-142: Material 아이콘을 커스텀 아이콘으로 성공적으로 교체했습니다.
Icons.Default.KeyboardArrowDown을BitnagilIcon과 drawable 리소스로 교체하여 디자인 시스템 표준을 따르고 있습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/SubRoutinesItem.kt (3)
18-20: 디자인 시스템 컴포넌트 import가 적절히 추가되었습니다.
BitnagilIcon과clickableWithoutRipplemodifier가 올바르게 import되었습니다.
47-53: 레이아웃 조정 및 리플 효과 제거가 올바르게 적용되었습니다.간격 조정(10.dp), 명시적 높이 설정(34.dp), 그리고
clickableWithoutRipplemodifier 적용이 디자인 일관성을 향상시킵니다.
59-67: 체크 아이콘이 디자인 시스템 표준으로 교체되었습니다.Material 아이콘을
BitnagilIcon으로 교체하고 명시적 크기(20.dp)와 조건부 틴트 색상을 적용한 것이 적절합니다.presentation/src/main/java/com/threegap/bitnagil/presentation/setting/SettingScreen.kt (5)
27-28: 디자인 시스템 컴포넌트 import가 올바르게 추가되었습니다.
BitnagilTopBar와BitnagilOptionButton컴포넌트가 적절히 import되었습니다.
81-85: 표준화된 상단바 컴포넌트로 교체되었습니다.커스텀 헤더를
BitnagilTopBar로 교체하여 뒤로가기 버튼과 제목이 일관되게 처리됩니다.
138-147: 버전 정보 텍스트에 명시적 색상이 적용되었습니다.텍스트 색상을 명시적으로
BitnagilTheme.colors.black으로 설정하여 테마 일관성을 확보했습니다.
175-187: 옵션 버튼이 표준화된 디자인 시스템 컴포넌트로 교체되었습니다.
SettingRowButton을BitnagilOptionButton으로 교체하고 적절한 패딩과 함께 Column으로 래핑하여 일관된 UI를 제공합니다.
197-209: 계정 관련 옵션들도 표준화된 컴포넌트로 교체되었습니다.로그아웃과 탈퇴 버튼이
BitnagilOptionButton으로 일관되게 처리되어 전체 설정 화면의 UI 통일성이 향상되었습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/DeleteConfirmDialog.kt (5)
24-24: 리플 효과 제거를 위한 modifier import가 추가되었습니다.
clickableWithoutRipplemodifier가 올바르게 import되어 일관된 인터랙션 경험을 제공합니다.
68-78: 첫 번째 버튼의 스타일링이 개선되었습니다.
clickableWithoutRipple적용과 명시적 배경색, 테두리 스타일 설정으로 일관된 버튼 디자인을 구현했습니다.
80-86: 버튼 텍스트 색상이 테마 색상으로 표준화되었습니다.텍스트 색상을
BitnagilTheme.colors.navy500으로 설정하여 디자인 시스템 색상 팔레트를 일관되게 사용합니다.
92-102: 두 번째 버튼도 동일한 스타일링 표준이 적용되었습니다.첫 번째 버튼과 일관된
clickableWithoutRipple과 스타일링이 적용되어 다이얼로그 내 버튼들의 통일성이 확보되었습니다.
104-110: 두 번째 버튼 텍스트도 표준 색상이 적용되었습니다.동일한 navy500 색상 적용으로 두 버튼 간의 시각적 일관성이 유지됩니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineSortBottomSheet.kt (5)
21-23: 새로운 디자인 시스템 컴포넌트를 위한 import 추가가 적절합니다.BitnagilIcon과 clickableWithoutRipple modifier를 사용하기 위한 필요한 import들이 올바르게 추가되었습니다.
109-109: ripple 효과 제거를 위한 커스텀 modifier 적용이 적절합니다.표준 clickable modifier를 clickableWithoutRipple로 교체하여 일관된 상호작용 피드백을 제공합니다.
119-122: Material Icon을 디자인 시스템 아이콘으로 교체가 적절합니다.BitnagilIcon을 사용하여 일관된 아이콘 테마를 적용하고, 기존 tint 색상도 유지되었습니다.
109-109: 디자인 시스템의 클릭 인터랙션 패턴 적용 완료
clickableWithoutRipple사용으로 일관된 리플 효과 없는 클릭 동작을 구현했습니다.
119-122: 디자인 시스템 아이콘 컴포넌트로 통일Material 아이콘을
BitnagilIcon으로 교체하여 디자인 시스템의 아이콘 사용 패턴을 적용했습니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilProgressTopBar.kt (2)
1-16: 패키지 구조와 import가 적절합니다.디자인 시스템의 block 컴포넌트로 올바른 위치에 배치되어 있고, 필요한 종속성들이 정확히 import되었습니다.
44-51: Preview 구현이 적절합니다.의미있는 값으로 미리보기가 구성되어 있고, showBackground 옵션도 적절히 설정되었습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/block/labeledcheckbox/LabeledCheckBox.kt (6)
17-19: 디자인 시스템 컴포넌트를 위한 import 추가가 적절합니다.BitnagilIcon과 clickableWithoutRipple을 사용하기 위한 필요한 import들이 올바르게 추가되었습니다.
29-29: ripple 효과 제거를 위한 커스텀 modifier 적용이 적절합니다.clickableWithoutRipple을 사용하여 일관된 상호작용 피드백을 제공합니다.
44-52: 체크 아이콘 구현이 적절합니다.contentAlignment를 통해 아이콘을 중앙에 배치하고, BitnagilIcon을 사용하여 일관된 아이콘 시스템을 적용했습니다. 흰색 tint도 navy 배경과 적절한 대비를 제공합니다.
42-42: 체크박스 테두리 색상 개선이 적절합니다.unchecked 상태에서 coolGray99에서 coolGray95로 변경하여 더 명확한 시각적 구분을 제공합니다.
29-29: 일관된 클릭 인터랙션 패턴 적용
clickableWithoutRipple사용으로 디자인 시스템의 일관된 클릭 동작을 구현했습니다.
42-52: 체크박스 시각적 개선 및 디자인 시스템 적용체크 상태 시각화를 위한 아이콘 추가와 테두리 색상 개선으로 사용자 경험이 향상되었습니다.
BitnagilIcon사용으로 디자인 시스템과의 일관성도 확보했습니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/BitnagilColors.kt (2)
18-21: 새로운 그라데이션 색상 추가가 적절합니다.진행률 표시줄과 홈 화면을 위한 그라데이션 색상들이 명확한 네이밍으로 추가되었습니다. 디자인 시스템의 색상 팔레트가 일관되게 확장되었습니다.
18-21: 디자인 시스템 그라데이션 색상 추가프로그레스 바와 홈 화면 배경을 위한 그라데이션 색상들이 적절하게 추가되었습니다. 네이밍 컨벤션도 일관성 있게 적용되었습니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (3)
15-20: 컴포넌트 시그니처가 잘 설계되었습니다.@DrawableRes 어노테이션으로 타입 안전성을 보장하고, 선택적 tint 파라미터로 유연성을 제공합니다. 기본 tint를 테마 색상으로 설정한 것도 적절합니다.
29-35: Preview 구현이 적절합니다.샘플 drawable 리소스를 사용한 미리보기가 올바르게 구현되었습니다.
15-27: 디자인 시스템의 핵심 아이콘 컴포넌트깔끔하고 재사용 가능한 아이콘 컴포넌트로 잘 구현되었습니다.
@DrawableRes어노테이션으로 타입 안전성을 보장하고, 선택적 틴트와 적절한 기본값을 제공합니다. 앱 전반의 아이콘 사용을 표준화하는 핵심 컴포넌트입니다.presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/tooltipbutton/TooltipButton.kt (1)
36-38: 디자인 시스템 컴포넌트 적용이 적절합니다.
BitnagilIcon을 사용하여 일관된 아이콘 렌더링을 적용하고, 테마 시스템의 navy200 색상을 사용한 것이 좋습니다. 아이콘 리소스도ic_tooltip으로 의미적으로 적절하게 변경되었습니다.app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavigator.kt (2)
14-17: 현재 라우트 추출 로직이 적절합니다.
currentBackStackEntryAsState()를 사용하여 현재 네비게이션 상태를 관찰하는 방식이 올바릅니다.
19-23: HomeRoute 정의 확인 및 플로팅 액션 검증 필요코드베이스에서
sealed class HomeRoute정의를 찾을 수 없습니다.HomeRoute가 선언된 파일 위치를 직접 확인하시고, 새로 추가된 라우트 중 플로팅 액션 버튼 노출이 필요한 화면이 빠져있지 않은지 검토해주세요.
- 누락된 라우트가 있을 경우
shouldShowFloatingAction()함수의 반환 조건에 해당 라우트를 추가해야 합니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/HomeScreen.kt (1)
146-147: 그라데이션 색상 업데이트가 적절합니다.새로운 테마 색상
homeGradientStartColor와homeGradientEndColor를 사용하여 일관된 테마 시스템을 적용한 것이 좋습니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilOptionButton.kt (1)
18-44: 잘 구현된 디자인 시스템 컴포넌트입니다.옵션 버튼 컴포넌트가 일관된 디자인 시스템 패턴을 따라 잘 구현되었습니다. 고정 높이, 적절한 배치, 테마 색상 사용이 모두 적절합니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/RoutineItem.kt (1)
53-55: 체크박스 컴포넌트 교체가 적절합니다.
BitnagilCheckBox사용으로 수동 틴트 로직을 제거하고 디자인 시스템의 일관된 체크박스 스타일을 적용한 것이 좋습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/mypage/MyPageScreen.kt (4)
25-29: 새로운 디자인 시스템 컴포넌트 import가 잘 적용되었습니다.기존 커스텀 구현을 대체하는 표준화된 컴포넌트들이 적절히 import되었습니다.
65-75: BitnagilTopBar로의 리팩토링이 잘 수행되었습니다.기존 커스텀 헤더 레이아웃을 표준화된 BitnagilTopBar 컴포넌트로 깔끔하게 교체했고, clickableWithoutRipple 모디파이어를 통해 일관된 상호작용 패턴을 적용했습니다.
88-89: 사용자 이름 텍스트 색상 명시가 적절합니다.coolGray5 색상을 명시적으로 지정하여 디자인 일관성을 확보했습니다.
100-117: BitnagilOptionButton을 활용한 옵션 메뉴 구조 개선.기존의 개별 Row 컴포넌트들을 BitnagilOptionButton으로 통합하여 코드 중복을 제거하고 일관된 UI 패턴을 적용했습니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/OnBoardingScreen.kt (2)
66-67: 테마 기반 배경색 적용으로 일관성 개선.하드코딩된 배경색을 BitnagilTheme.colors.coolGray99로 변경하여 디자인 시스템 일관성을 확보했습니다.
69-72: BitnagilProgressTopBar 도입으로 컴포넌트 통합 완료.기존의 커스텀 Row 구조를 BitnagilProgressTopBar로 교체하여 진행률 표시와 뒤로가기 기능을 하나의 재사용 가능한 컴포넌트로 통합했습니다.
app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavHost.kt (3)
45-45: 플로팅 오버레이 상태 관리 적절.showFloatingOverlay 상태 변수를 통해 플로팅 액션 메뉴의 표시/숨김을 적절히 관리하고 있습니다.
49-88: 기존 구조를 Box로 감싸는 리팩토링 완료.기존 Scaffold와 NavHost를 Box 컨테이너로 감싸서 오버레이 기능을 추가할 수 있도록 구조를 개선했습니다.
90-121: 플로팅 액션 메뉴 구현이 잘 되었습니다.navigator.shouldShowFloatingAction()을 통한 조건부 표시, 반투명 배경 오버레이, 그리고 BitnagilFloatingActionMenu 컴포넌트 사용이 모두 적절합니다. 상태 관리와 클릭 핸들링도 올바르게 구현되었습니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/BitnagilTopBar.kt (3)
22-66: BitnagilTopBar 컴포넌트 구현이 우수합니다.재사용 가능한 톱바 컴포넌트로서 필요한 모든 기능을 제공하며, 적절한 레이아웃과 테마 적용이 이루어졌습니다. API 설계도 유연하고 직관적입니다.
68-94: Preview 구현이 포괄적입니다.다양한 사용 사례(제목만, 제목+뒤로가기, 제목+액션)를 보여주는 미리보기가 잘 구성되어 컴포넌트의 활용도를 높였습니다.
43-43: 아이콘 리소스 크기 일관성 검토 필요현재
BitnagilTopBar.kt(라인 43)에서는ic_back_arrow_36를 사용하고 있지만, 실제 리소스 폴더에는 다음 두 파일이 모두 존재합니다:
core/designsystem/src/main/res/drawable/ic_back_arrow_20.xmlcore/designsystem/src/main/res/drawable/ic_back_arrow_36.xml디자인 가이드(또는 UX 스펙)에 맞춰 20dp 버전과 36dp 버전 중 올바른 아이콘을 사용하고 있는지 한 번 더 확인해 주세요.
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/WeeklyDatePicker.kt (2)
64-86: 디자인 시스템 컴포넌트로의 성공적인 마이그레이션입니다!Material 아이콘에서
BitnagilIcon으로, 그리고 표준clickable에서clickableWithoutRipple로의 교체가 일관되게 적용되었습니다. 네비게이션 화살표들이 적절한 패딩과 정렬을 가진Box로 래핑되어 터치 영역이 개선되었습니다.
122-122: 날짜 아이템의 리플 효과 제거가 적절합니다.날짜 선택 시 리플 효과를 제거하여 일관된 인터랙션 경험을 제공합니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/TermsAgreementItem.kt (2)
50-53: 체크 아이콘의 디자인 시스템 통합이 우수합니다.
Icons.Default.Check에서BitnagilIcon으로의 교체와 테마 기반 색상 적용이 적절합니다. 체크 상태에 따른 색상 변화(navy500vsnavy100)가 직관적입니다.
37-37: 고정 높이 추가로 UI 일관성 향상.
height(40.dp)추가로 약관 동의 아이템들의 높이가 일관되게 유지됩니다.presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/WriteRoutineScreen.kt (4)
102-106: top bar의 디자인 시스템 컴포넌트 적용이 훌륭합니다.수동으로 구현된 top bar를
BitnagilTopBar로 교체하여 코드 중복을 줄이고 일관된 UI를 제공합니다. 타이틀과 뒤로가기 버튼이 적절히 설정되었습니다.
167-170: 아이콘 컴포넌트 교체가 적절합니다.플러스 아이콘을
BitnagilIcon으로 교체하고 테마 색상(navy400)을 적용한 것이 일관된 디자인 시스템 사용입니다.
308-311: 드롭다운 화살표 아이콘 적용이 적절합니다.시간 선택 버튼의 드롭다운 화살표도
BitnagilIcon으로 일관되게 교체되었습니다.
319-325: 버튼 컴포넌트의 디자인 시스템 통합이 완료되었습니다.
TextButton을BitnagilTextButton으로 교체하고 적절한 패딩을 적용했습니다. 등록 버튼의 활성화 상태 처리도 유지되었습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/ToggleAllAgreementsItem.kt (2)
26-63: 전체동의 컴포넌트의 우수한 설계입니다.상태에 따른 시각적 피드백이 명확하게 구현되었습니다:
- 배경색:
lightBlue75vscoolGray99- 아이콘/텍스트 색상:
navy500vsnavy100/coolGray50
clickableWithoutRipple과BitnagilIcon사용으로 디자인 시스템과 일관성을 유지했습니다.
65-76: 프리뷰 구현이 적절합니다.토글 상태 변경이 가능한 인터랙티브 프리뷰로 컴포넌트의 동작을 확인할 수 있습니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilCheckBox.kt (1)
45-56: 색상 설정 구조가 잘 설계되었습니다.
BitnagilCheckBoxColor데이터 클래스와 companion object를 통한 기본값 제공 방식이 좋습니다. 테마 색상을 활용한 일관성 있는 디자인을 구현했습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/terms/TermsAgreementScreen.kt (4)
18-22: 디자인 시스템 컴포넌트로의 마이그레이션이 적절합니다.
BitnagilTheme,BitnagilTextButton,BitnagilTopBar등 새로운 디자인 시스템 컴포넌트를 적절히 도입했습니다. 이는 UI 일관성 향상에 기여합니다.
105-109: 표준화된 상단바 컴포넌트 사용이 좋습니다.기존의 수동 구현된 상단바를
BitnagilTopBar로 교체하여 코드 중복을 줄이고 일관성을 향상시켰습니다.
124-127: 전체 동의 기능을 별도 컴포넌트로 분리한 것이 좋습니다.
ToggleAllAgreementsItem컴포넌트를 사용하여 전체 동의 기능을 캡슐화했습니다. 컴포넌트 재사용성과 유지보수성이 향상됩니다.
156-164: 디자인 시스템 버튼 컴포넌트 적용이 적절합니다.
BitnagilTextButton을 사용하여 일관된 버튼 스타일을 적용했습니다. 패딩 설정도 적절합니다.presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingAbstractTemplate.kt (3)
40-44: 테마 기반 타이포그래피 적용이 좋습니다.하드코딩된 텍스트 스타일을
BitnagilTheme.typography와BitnagilTheme.colors로 교체하여 일관성과 유지보수성을 향상시켰습니다.
70-84: 조건부 스타일링 로직이 적절합니다.
OnBoardingAbstractTextItem의isBold속성에 따라 적절한 타이포그래피를 적용하는 로직이 잘 구현되었습니다.buildAnnotatedString을 활용한 구현도 적절합니다.
55-61: 그래픽 작업 TODO 주석이 명확합니다.향후 그래픽 작업을 위한 placeholder Box와 TODO 주석이 명확히 표시되어 있습니다. 임시 배경색도 시각적 확인에 도움이 됩니다.
presentation/src/main/java/com/threegap/bitnagil/presentation/emotion/EmotionScreen.kt (3)
65-68: 표준화된 상단바로 교체가 적절합니다.수동으로 구현된 뒤로가기 버튼을
BitnagilTopBar로 교체하여 앱 전체의 일관성을 향상시켰습니다.
88-93: 그리드 레이아웃과 간격 조정이 개선되었습니다.패딩과 간격 설정이 더욱 적절해졌습니다.
horizontalArrangement와verticalArrangement를 통한 균등한 간격 배치가 좋습니다.
95-108: 컨테이너 레벨 클릭 처리로 UX가 개선되었습니다.전체 Column에 클릭 이벤트를 적용하여 사용자 경험을 향상시켰습니다. 개별 Image에서 클릭 처리를 제거한 것도 적절합니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilProgressBar.kt (2)
32-74: 프로그레스바 컴포넌트 구현이 우수합니다.다음과 같은 장점들이 있습니다:
animateFloatAsState를 활용한 부드러운 애니메이션- Canvas를 이용한 정밀한 그래픽 렌더링
- 그라데이션 효과와 둥근 모서리 처리
- 진행률 범위 검증(
coerceIn)
76-90: 색상 구성 데이터 클래스가 잘 설계되었습니다.
@Immutable어노테이션과 companion object를 통한 기본값 제공 방식이 적절합니다. 테마 색상과의 연동도 좋습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/CollapsibleHomeHeader.kt (2)
25-27: 디자인 시스템 컴포넌트 도입이 적절합니다
BitnagilIcon,clickableWithoutRipple,EmotionBall등 디자인 시스템 컴포넌트들이 일관성 있게 적용되었습니다.
93-102: EmotionBall 컴포넌트 통합이 잘 되었습니다기존의 private
EmotionBallIcon컴포넌트를 제거하고 표준화된EmotionBall컴포넌트로 교체한 것이 좋습니다. 디자인 시스템의 일관성을 향상시킵니다.presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingSelectTemplate.kt (3)
14-17: 디자인 시스템 컴포넌트 마이그레이션이 적절합니다임시 컴포넌트들을 디자인 시스템의 표준 컴포넌트로 교체한 것이 좋습니다. 이전 학습에서 언급된 대로 임시 TextButton이 BitnagilTextButton으로 적절히 대체되었습니다.
34-38: BitnagilTheme 적용이 일관성 있게 되었습니다하드코딩된 스타일 대신
BitnagilTheme.colors와BitnagilTheme.typography를 사용하여 일관된 디자인 시스템을 적용했습니다.
82-88: 건너뛰기 버튼의 스타일링이 잘 구현되었습니다
BitnagilTextButtonColor.skip()과TextDecoration.Underline을 사용하여 건너뛰기 버튼의 시각적 차별화가 잘 표현되었습니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilSelectButton.kt (5)
30-39: 컴포넌트 API 설계가 우수합니다선택적 description 파라미터와 기본값 설정이 잘 되어 있고, colors와 shape 파라미터의 커스터마이징 옵션도 적절합니다.
40-53: 상태 관리 구현이 올바릅니다
MutableInteractionSource와collectIsPressedAsState()를 사용한 press 상태 추적이 정확하고, 상태별 색상 분기 로직도 명확합니다.
60-68: 접근성 고려가 잘 되어 있습니다
indication = null로 ripple 효과를 제거하고Role.Button시맨틱을 추가하여 접근성을 고려한 구현입니다.
74-78: 동적 타이포그래피 적용이 스마트합니다description 유무에 따라 title의 typography style을 다르게 적용하는 로직이 UX 관점에서 적절합니다.
92-112: 색상 시스템 구조가 체계적입니다
@Immutable데이터 클래스와 companion object의 default 함수를 통한 색상 관리가 체계적이고 확장 가능한 구조입니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/RoutineDetailsBottomSheet.kt (3)
25-27: 디자인 시스템 컴포넌트 도입이 일관성 있습니다
BitnagilIcon과clickableWithoutRipple도입으로 전체 앱의 디자인 시스템 통일성이 향상되었습니다.
79-93: 섹션 제목에 아이콘 추가가 UX를 개선합니다각 섹션별로 의미 있는 아이콘을 추가하여 정보의 시각적 구분과 이해도를 높였습니다. Row로 감싸고 적절한 spacing을 적용한 것도 좋습니다.
207-220: 버튼 디자인 개선이 사용성을 향상시킵니다수정/삭제 버튼에 아이콘을 추가하고 typography를
subtitle1SemiBold로 통일하여 버튼의 가독성과 일관성이 개선되었습니다.presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/atom/EmotionBall.kt (3)
21-26: 컴포넌트 API가 잘 설계되었습니다nullable
emotionType파라미터로 기본 상태와 감정 상태를 모두 처리할 수 있게 한 설계가 유연하고 직관적입니다.
27-42: 그림자 효과 구현이 세심합니다
EmotionBallType의ambientColor와spotColor를 활용한 감정별 맞춤 그림자 효과가 UI의 시각적 매력을 크게 향상시킵니다. PR 목표에서 언급한 대로 사진 대신 직접 구현한 그림자 효과가 효과적입니다.
55-151: Preview 커버리지가 완벽합니다모든 감정 타입과 기본 상태에 대한 Preview를 제공하여 디자인 타임에서 각 상태를 쉽게 확인할 수 있습니다. 이는 디자인 시스템 컴포넌트의 모범 사례입니다.
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilTextButton.kt (4)
33-43: 컴포넌트 API 디자인이 잘 구성되어 있습니다.매개변수 순서와 기본값 설정이 적절하며, Compose 컨벤션을 잘 따르고 있습니다. 특히
colors와shape매개변수를 통한 커스터마이징 옵션이 유연합니다.
44-57: 상태 관리와 색상 로직이 효율적으로 구현되었습니다.
MutableInteractionSource와collectIsPressedAsState()를 활용한 상태 관리가 적절하며, when 표현식을 통한 색상 선택 로직이 명확합니다.
71-73: 접근성 설정이 적절히 구현되었습니다.
Role.Button설정으로 스크린 리더 등 접근성 도구에서 버튼으로 인식될 수 있도록 적절히 구현되었습니다.
85-115: 색상 시스템 설계가 체계적입니다.
@Immutable어노테이션과 함께 data class로 구현된 색상 시스템이 적절하며, companion object의 factory 메서드들이 재사용성을 높입니다.default()와skip()두 가지 스타일 제공이 유용합니다.core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilFloatingButton.kt (6)
38-61: 단순하고 효과적인 floating button 구현입니다.컴포넌트 구조가 명확하고 theming 시스템과 잘 통합되어 있습니다.
clickableWithoutRipple사용도 디자인 시스템의 일관성을 유지합니다.
63-131: 복잡한 애니메이션 로직이 잘 구현되었습니다.expandable menu의 애니메이션 구성이 세밀하게 구현되어 있어 부드러운 사용자 경험을 제공할 것으로 보입니다. 여러 애니메이션 효과의 조합(slide, fade, scale)이 적절합니다.
74-74: 빈 액션 리스트 처리가 적절합니다.
actions.isNotEmpty()조건으로 빈 액션 리스트에 대한 처리가 되어 있어 런타임 오류를 방지합니다.
108-118: 메뉴 항목 처리 로직에서 자동 닫기 기능이 적절합니다.액션 실행 후
onToggle(false)를 호출하여 메뉴를 자동으로 닫는 로직이 사용자 경험을 향상시킵니다.
159-162: BitnagilIcon 사용 시 tint = null 설정을 확인했습니다.
BitnagilIcon에서tint = null로 설정하여 원본 색상을 유지하는 것이 디자인 의도에 맞는지 확인이 필요합니다.relevant_code_snippets에서 확인한
BitnagilIcon의 기본 tint가BitnagilTheme.colors.black인데, 여기서는null로 설정하여 원본 아이콘 색상을 사용하고 있습니다. 이것이 의도된 동작인지 디자인 가이드라인과 확인이 필요합니다.
172-198: Preview 구현이 컴포넌트 테스트에 유용합니다.두 가지 상태(단일 버튼, 확장된 메뉴)를 모두 보여주는 preview가 개발과 디자인 검토에 도움이 됩니다.
l5x5l
left a comment
There was a problem hiding this comment.
작업량 많으셨을텐데 정말 고생 많으셨습니다!
코멘트 답변 부탁드려요!
|
+) 혹시 로고 이미지 설정도 가능하실까요?! |
- 기존: MyPageScreen 및 SettingScreen에서 BitnagilOptionButton 사용 시 padding을 적용 - 변경: BitnagilOptionButton 컴포넌트 내부에서 padding 적용
저희 로고 확정인가요?? |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt (1)
72-72: 15.1% 간격 비율의 적절성을 검토하세요.화면 높이의 15.1%라는 비교적 큰 간격이 모든 디바이스에서 적절한 시각적 균형을 제공하는지 확인이 필요합니다.
매직 넘버 대신 상수로 정의하는 것을 고려해보세요:
private object IntroScreenConstants { const val TOP_SPACER_RATIO = 0.0748f const val MIDDLE_SPACER_RATIO = 0.151f }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (10)
core/designsystem/src/main/res/drawable-hdpi/intro_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-hdpi/onboarding_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/intro_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-mdpi/onboarding_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/intro_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xhdpi/onboarding_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/intro_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxhdpi/onboarding_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/intro_character.pngis excluded by!**/*.pngcore/designsystem/src/main/res/drawable-xxxhdpi/onboarding_character.pngis excluded by!**/*.png
📒 Files selected for processing (2)
presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt(2 hunks)presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingAbstractTemplate.kt(4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/template/OnBoardingAbstractTemplate.kt
🧰 Additional context used
🧠 Learnings (1)
presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: build
🔇 Additional comments (6)
presentation/src/main/java/com/threegap/bitnagil/presentation/intro/IntroScreen.kt (6)
3-25: 디자인 시스템 컴포넌트 도입이 잘 되었습니다.새로운 디자인 시스템 컴포넌트들(
BitnagilTheme,BitnagilTextButton)과 동적 레이아웃을 위한 필요한 import들이 적절히 추가되었습니다. 디자인 시스템 통합 목표와 잘 부합합니다.
53-56: 동적 화면 높이 계산 로직이 좋습니다.
LocalWindowInfo와LocalDensity를 사용하여 화면 높이를 동적으로 계산하는 접근 방식이 우수합니다. 다양한 화면 크기에서 일관된 레이아웃을 제공할 수 있습니다.
66-67: 디자인 시스템 테마 적용이 우수합니다.
BitnagilTheme.colors.navy500과BitnagilTheme.typography.title2Bold적용으로 일관된 디자인 시스템을 구현했습니다. 브랜드 일관성 향상에 기여합니다.
74-81: 이미지 컴포넌트 구현이 잘 되었습니다.플레이스홀더를 실제 이미지로 교체하고
aspectRatio와ContentScale.Fit을 사용하여 이미지 비율을 유지하는 것이 좋습니다.contentDescription = null설정도 장식적 이미지에 적절합니다.
83-83: Spacer weight 사용이 효과적입니다.
Spacer(modifier = Modifier.weight(1f))를 사용하여 버튼을 화면 하단으로 밀어내는 방식이 flexible하고 효과적입니다.
85-92: BitnagilTextButton 컴포넌트 일관 적용 확인 완료BitnagilTextButton이 WriteRoutineScreen, TimePickerBottomSheet, TermsAgreementScreen, OnBoardingSelectTemplate, IntroScreen 등 주요 화면에서 모두 일관되게 사용되고 있어 디자인 시스템 통일성이 확보되었습니다. 패딩 구조도 적절히 구성되어 있습니다. 수고하셨습니다!
|
현재 피그마에 올라온 로고가 확정인 줄 알았는데, 확정이 아니라면 그냥 넘어가주세요! |
- onCheckedChange 콜백 추가하여 외부에서 체크 상태를 변경할 수 있도록 함
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
60-66: 프리뷰 함수가 적절합니다.기본적인 프리뷰 기능을 잘 제공하고 있습니다. 추후 다양한 tint 색상이나 여러 아이콘을 보여주는 프리뷰로 확장하면 더욱 유용할 것 같습니다.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt(1 hunks)
🧰 Additional context used
🧠 Learnings (1)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (1)
Learnt from: l5x5l
PR: #38
File: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt:30-35
Timestamp: 2025-07-21T10:38:49.104Z
Learning: presentation/src/main/java/com/threegap/bitnagil/presentation/writeroutine/component/atom/textbutton/TextButton.kt의 TextButton 컴포넌트는 임시로 구현된 컴포넌트로, 디자인 시스템 구현시 대체 예정입니다.
🔇 Additional comments (3)
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilIcon.kt (3)
1-20: 임포트 구성이 잘 되어 있습니다.필요한 의존성들이 적절히 임포트되어 있고, 커스텀 디자인 시스템 요소들도 올바르게 포함되어 있습니다.
35-58: BitnagilIconButton 구현이 잘 되어 있습니다.Box를 사용한 터치 영역 관리와
clickableWithoutRipple모디파이어 사용이 적절합니다.enabled파라미터와paddingValues를 통한 유연성도 좋습니다.다만
BitnagilIcon의contentDescription이슈가 여기까지 이어지므로, 위의 수정사항 적용시 이 함수도 함께 업데이트해주세요.@Composable fun BitnagilIconButton( @DrawableRes id: Int, onClick: () -> Unit, modifier: Modifier = Modifier, enabled: Boolean = true, paddingValues: PaddingValues = PaddingValues(0.dp), tint: Color? = BitnagilTheme.colors.black, + contentDescription: String? = null, ) { Box( modifier = modifier .clickableWithoutRipple( enabled = enabled, onClick = onClick, ) .padding(paddingValues), contentAlignment = Alignment.Center, ) { BitnagilIcon( id = id, tint = tint, + contentDescription = contentDescription, ) } }
22-58: 이전 리뷰 논의사항이 잘 반영되었습니다.
BitnagilIcon과BitnagilIconButton을 모두 제공하여 사용자가 상황에 따라 선택할 수 있도록 한 것이 좋습니다.BitnagilIconButton이BitnagilIcon을 재사용하는 구조도 코드 중복을 방지하면서 일관성을 유지하는 좋은 접근입니다.
[ PR Content ]
여러 화면에서 공통적으로 사용되는 컴포넌트를 디자인 컴포넌트로 추출했습니다.
기존 화면들에서 적용되지 않은 디자인 사항들을 일괄 적용했습니다.
Related issue
Screenshot 📸
Work Description
To Reviewers 📢
Summary by CodeRabbit
New Features
Refactor
Bug Fixes
Style
Chores
Revert