Conversation
디자인 시스템에 사용될 신규 아이콘 4종을 추가했습니다. * `ic_storage` 추가 * `ic_lock` 추가 * `ic_setting` 추가 * `ic_edit` 추가
디자인 시스템에 맞춰 탭과 뷰페이저가 결합된 `PrezelTabs` 컴포넌트를 추가했습니다. * `PrezelTabItem` 데이터 클래스 및 `PrezelTabSize` (Small, Regular) 추가 * `SecondaryTabRow` 및 `HorizontalPager`를 이용한 탭 시스템 구현 * 탭 선택 시 애니메이션 또는 즉시 이동 로직 구현 * 배지(Badge) 표시 기능 지원 * 미리보기(Preview) 코드 추가
Walkthrough디자인 시스템 핵심 모듈에 탭 컴포넌트와 아이콘 리소스를 추가합니다. PrezelTabs 컴포저블은 PrezelTabItem(label, badgeCount, enabled) 데이터 모델과 PrezelTabSize(Small, Regular) 열거형을 제공하며, PagerState 기반의 HorizontalPager와 SecondaryTabRow를 사용해 탭 네비게이션, 선택 인디케이터, 배지 표시 및 거리 기반 애니메이션/스크롤 동작을 구현합니다. 또한 edit, lock, setting, storage 아이콘을 나타내는 4개의 벡터 드로어블 리소스가 각 24×24dp, 색상 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 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. Comment |
`PrezelTabs` 내부의 복잡한 UI 로직을 독립적인 컴포넌트로 분리하여 가독성을 높이고 구조를 개선했습니다. * `PrezelTabsBar`, `PrezelTabItem`, `PrezelTabsPager` 비공개 컴포넌트 추출 * 기존 `PrezelTabs` 내 인라인 구현부를 신규 컴포넌트로 대체 * 코드 스타일 및 들여쓰기 수정
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.kt`:
- Line 49: 함수/컴포넌트 시그니처에서 잘못된 파라미터 이름 userScrolledEnabled 을 userScrollEnabled 로
바꾸고, PrezelTabs 컴포저블 내부와 호출부(특히 현재 리뷰에서 언급된 사용 지점: HorizontalPager 호출 부분 포함, 참고
심볼: PrezelTabs 및 HorizontalPager)에서 모든 참조를 동일하게 변경하여 Material3 HorizontalPager의
파라미터 이름과 일치시키세요; 즉 파라미터 선언, 기본값, 그리고 Line 72에 해당하는 사용 위치의 키 이름을
userScrollEnabled 로 통일하면 됩니다.
🧹 Nitpick comments (3)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.kt (3)
34-41: 데이터 클래스와 Composable 함수 이름 충돌
PrezelTabItem데이터 클래스(Line 35)와 private composable 함수(Line 112)가 동일한 이름을 사용하고 있습니다. 코드 가독성을 위해 private composable의 이름을 변경하는 것을 권장합니다.♻️ 권장 수정
`@Composable` -private fun PrezelTabItem( +private fun PrezelTabContent( item: PrezelTabItem, selected: Boolean, size: PrezelTabSize, onClick: () -> Unit, ) {Line 101의 호출부도 함께 수정:
- PrezelTabItem( + PrezelTabContent( item = item, selected = pagerState.currentPage == index, size = size, onClick = { onTabClick(index, item.enabled) }, )Also applies to: 111-134
152-159: 탭 크기에 따른 배지 크기 고려현재 탭 크기와 관계없이 항상
PrezelBadgeSize.REGULAR를 사용하고 있습니다.PrezelTabSize.Small일 때 배지 크기도 조정하는 것이 시각적 균형에 더 적합할 수 있습니다. 디자인 의도에 따라 검토해 주세요.♻️ 선택적 수정 제안
if (badgeCount != null) { PrezelBadge( active = false, count = badgeCount, - size = PrezelBadgeSize.REGULAR, + size = if (size == PrezelTabSize.Small) PrezelBadgeSize.SMALL else PrezelBadgeSize.REGULAR, disabled = !selected, ) }
195-226: 비활성화된 탭 프리뷰 추가 권장현재 프리뷰에서
enabled = false상태의 탭이 포함되어 있지 않습니다. PR 설명의 스크린샷에서는 비활성화된 탭이 표시되어 있으므로, 이를 테스트하는 프리뷰를 추가하면 컴포넌트의 전체 기능을 확인하는 데 도움이 됩니다.♻️ 비활성화 탭 포함 프리뷰 예시
`@ThemePreview` `@Composable` private fun PrezelTabWithDisabledPreview() { val tabs = persistentListOf( PrezelTabItem(label = "Label 0", badgeCount = 0), PrezelTabItem(label = "Label", enabled = false), PrezelTabItem(label = "Label", enabled = false), ) val pagerState = rememberPagerState(initialPage = 0) { tabs.size } PrezelTheme { Box( modifier = Modifier .fillMaxSize() .background(PrezelTheme.colors.bgRegular), ) { PrezelTabs( tabs = tabs, pagerState = pagerState, size = PrezelTabSize.Regular, ) { page -> Box( modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center, ) { Text("Page: $page") } } } } }
...el/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.kt
Outdated
Show resolved
Hide resolved
`PrezelTabs` 컴포넌트 내의 오타를 수정하고 내부 구성 요소의 명칭을 명확하게 변경했습니다. * `userScrolledEnabled` 파라미터 명칭을 `userScrollEnabled`로 변경 * 내부 컴포넌트 `PrezelTabItem`을 `PrezelTabContent`로 명칭 변경 * 기타 코드 정렬 수정
📌 작업 내용
SecondaryTabRow + HorizontalPager 구현
Icon 4개 추가
🧩 관련 이슈
📸 스크린샷
📢 논의하고 싶은 내용
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.