Skip to content

[UI/#45] 디자인 컴포넌트 구현 및 ui 화면 퍼블리싱 작업 진행#48

Merged
wjdrjs00 merged 33 commits intodevelopfrom
ui/#45-common-component
Jul 29, 2025
Merged

[UI/#45] 디자인 컴포넌트 구현 및 ui 화면 퍼블리싱 작업 진행#48
wjdrjs00 merged 33 commits intodevelopfrom
ui/#45-common-component

Conversation

@wjdrjs00
Copy link
Copy Markdown
Member

@wjdrjs00 wjdrjs00 commented Jul 28, 2025

[ PR Content ]

여러 화면에서 공통적으로 사용되는 컴포넌트를 디자인 컴포넌트로 추출했습니다.
기존 화면들에서 적용되지 않은 디자인 사항들을 일괄 적용했습니다.

Related issue

Screenshot 📸

  • N/A (프리뷰 코드를 확인해주시면 감사하겠습니다요~)

Work Description

  • 버튼, 아이콘, 탑바, 감정구슬, 체크박스 공통 컴포넌트 구현
  • 모든 화면 ui 고도화 작업 진행

To Reviewers 📢

  • 공통적으로 사용되는 컴포넌트를 추출해서 구현했습니다! (나름 꼼꼼하게 확인을 했지만, 봐야하는 파일이 넘 많아서 혹시 빠진 부분이 있다면 리뷰남겨 주세요!)
  • 감정 구슬에 대해서 사진을 추가하려다, 쉐도우 효과 적용이 크게 어렵지 않아서 그냥 직접 구현했습니다..!
  • 이외 궁금하신 점이나, 의문점이 있다면 리뷰 남겨주세요!

Summary by CodeRabbit

  • New Features

    • 다양한 디자인 시스템 UI 컴포넌트(체크박스, 플로팅 버튼 및 액션 메뉴, 프로그레스 바, 선택 버튼, 텍스트 버튼, 옵션 버튼, 상단바 등) 추가
    • 감정 볼(EmotionBall) 컴포넌트 및 감정 타입 enum 도입
    • 약관 전체동의 토글 컴포넌트 추가
    • 홈 화면에 플로팅 액션 메뉴 추가 및 특정 화면에서만 노출
  • Refactor

    • 홈, 마이페이지, 추천 루틴, 온보딩, 약관, 루틴 작성 등 주요 화면 UI를 디자인 시스템 컴포넌트로 통합해 일관된 스타일과 상호작용 제공
    • 클릭 시 리플 효과를 제거한 커스텀 클릭 동작(clickableWithoutRipple) 적용 확대
    • 기존 아이콘, 버튼, 프로그레스 바 등 커스텀 컴포넌트로 교체 및 스타일 정비
    • 상단바, 버튼, 아이콘 등 공통 UI 컴포넌트로 교체 및 코드 간소화
  • Bug Fixes

    • 클릭 영역, 정렬, 색상, 간격 등 UI 요소 개선
  • Style

    • 컬러 시스템에 새로운 그라데이션 및 아이콘 색상 추가, 일부 기존 색상 조정
  • Chores

    • 다수의 커스텀 벡터 아이콘 리소스 추가
  • Revert

    • 온보딩 및 루틴 작성 관련 커스텀 버튼, 셀렉트 버튼, 프리뷰 등 불필요한 파일 삭제

wjdrjs00 added 26 commits July 26, 2025 16:16
- ProgressBarGradientStartColor 추가
- ProgressBarGradientEndColor 추가
- HomeGradientStartColor 추가
- HomeGradientEndColor 추가
- CoolGray7 색상값 수정
- ProgressBarGradientStartColor 추가
- ProgressBarGradientEndColor 추가
- HomeGradientStartColor 추가
- HomeGradientEndColor 추가
- CoolGray7 색상값 수정
- 감정 선택 화면 UI를 디자인에 맞게 수정
- 각 감정에 해당하는 아이콘을 적용
- 기존의 Box로 구현되어 있던 TopBar들을 BitnagilTopBar로 대체
- FloatingActionButton, FloatingActionMenu 컴포넌트 추가
@wjdrjs00 wjdrjs00 requested a review from l5x5l July 28, 2025 06:05
@wjdrjs00 wjdrjs00 self-assigned this Jul 28, 2025
@wjdrjs00 wjdrjs00 added 📱 UI UI 추가 및 수정 (비지니스 로직을 포함하지 않는 작업) 🧤 대현 labels Jul 28, 2025
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Jul 28, 2025

Walkthrough

이 PR은 Bitnagil 디자인 시스템의 공통 컴포넌트(아이콘, 버튼, 체크박스, 프로그레스바 등)를 대거 추가하고, 기존 프레젠테이션 레이어의 UI를 새 컴포넌트로 리팩토링합니다. ripple 효과 제거를 위한 커스텀 clickable modifier도 도입되었으며, 홈 및 온보딩, 마이페이지, 세팅 등 주요 화면의 상단바 및 버튼, 아이콘 등이 통일된 디자인 시스템 컴포넌트로 교체되었습니다.

Changes

Cohort / File(s) Change Summary
디자인 시스템: 색상 및 컬러 리소스
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/BitnagilColors.kt, core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/color/Color.kt
신규 컬러 프로퍼티 및 그라데이션 컬러 추가, 기존 색상 값 일부 조정
디자인 시스템: 아톰 컴포넌트
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/*
체크박스, 플로팅 버튼/메뉴, 아이콘, 프로그레스바, 셀렉트 버튼, 텍스트 버튼 등 다양한 아톰 컴포넌트 신규 구현
디자인 시스템: 블록 컴포넌트
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/block/*
옵션 버튼, 탑바, 프로그레스 탑바 등 블록 컴포넌트 신규 구현
디자인 시스템: Modifier 확장
core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/modifier/ModifierExt.kt
ripple 없는 클릭 처리를 위한 clickableWithoutRipple 확장 함수 추가
디자인 시스템: 벡터 드로어블 리소스
core/designsystem/src/main/res/drawable/*.xml
다양한 아이콘 벡터 리소스 신규 추가 (체크, 플러스, 뒤로가기, 옵션 등)
홈 네비게이션 및 플로팅 액션
app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavHost.kt, app/src/main/java/com/threegap/bitnagil/navigation/home/HomeNavigator.kt
플로팅 액션 메뉴 오버레이 및 노출 제어 로직 추가, 네비게이터에 현재 라우트/노출 여부 함수 추가
EmotionBall 및 감정 관련 모델
presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/atom/EmotionBall.kt, presentation/src/main/java/com/threegap/bitnagil/presentation/home/model/EmotionBallType.kt
감정 볼 컴포넌트 및 타입 enum 신규 도입
프레젠테이션 레이어: 홈/온보딩/마이페이지/세팅/추천루틴/루틴작성 등 주요 화면
presentation/src/main/java/com/threegap/bitnagil/presentation/...
상단바, 버튼, 아이콘, 체크박스 등 전반적인 UI를 디자인 시스템 컴포넌트로 리팩토링. ripple 제거, 아이콘 리소스 교체, 스타일 통일 등
프레젠테이션: 온보딩/루틴작성/텍스트버튼/셀렉트버튼 등 기존 컴포넌트 삭제
presentation/src/main/java/com/threegap/bitnagil/presentation/onboarding/component/atom/iconbutton/*, .../onboarding/component/atom/progress/*, .../onboarding/component/atom/textbutton/*, .../onboarding/component/block/selectbutton/*, .../writeroutine/component/atom/textbutton/*, .../setting/component/block/settingrowbutton/SettingRowButton.kt
기존 커스텀 버튼, 셀렉트 버튼, 프로그레스바 등 파일 및 프리뷰 삭제(디자인 시스템 컴포넌트로 대체)
약관동의, 루틴 상세, 삭제 다이얼로그 등 기타 UI
presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/*, .../home/component/template/*, .../writeroutine/component/block/labeledcheckbox/LabeledCheckBox.kt
체크박스, 토글, 아이콘, 버튼 등 디자인 시스템 컴포넌트 적용 및 스타일, 클릭로직 리팩토링

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
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Assessment against linked issues

Objective Addressed Explanation
디자인 시스템 공통 컴포넌트 구현
(#45)

Assessment against linked issues: Out-of-scope changes

(해당 PR의 변경사항은 모두 디자인 시스템 공통 컴포넌트 구현 및 적용과 직결되어 있습니다. 범위를 벗어난 기능적 변경은 발견되지 않았습니다.)

Possibly related PRs

Suggested labels

세환

Poem

🐰
새 옷 입은 버튼과 체크박스,
아이콘이 반짝, 탑바가 반짝!
Ripple은 안녕, 클릭은 조용히—
디자인 시스템으로 한 걸음 더,
토끼도 즐거워 깡총깡총!
🥕✨

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch ui/#45-common-component

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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need 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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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: 접근성 개선을 고려해보세요.

BitnagilIconcontentDescription이 현재 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 속성 통일 및 컬러 리소스화 필요

  1. strokeWidth="1.4" 는 다른 신규 아이콘(예: close 1.7, detail 1.8)과 두께가 제각각입니다. 디자인 가이드에 맞춰 공통 기준(예: 1.5dp)으로 통일하는 편이 좋습니다.
  2. 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: 아이콘 색상·레이어 중복 최적화 필요

  1. 세 개의 path마다 #0D1B41#000000(alpha 0.2) 쌍을 두 번씩 반복해 그림자 효과를 주고 있습니다. 동일한 효과는 <group android:alpha="0.2"> 로 감싸거나 android:tint + elevation 로 표현해 XML 용량을 줄일 수 있습니다.
  2. 색상 값 역시 테마 리소스로 분리하면 다크모드 호환성이 개선됩니다.
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: 프리뷰의 클릭 처리를 개선하면 좋겠습니다.

프리뷰에서 일반 clickable modifier를 사용하고 있습니다. 디자인 시스템의 일관성을 위해 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

📥 Commits

Reviewing files that changed from the base of the PR and between c836a38 and f5c77c8.

⛔ Files ignored due to path filters (35)
  • core/designsystem/src/main/res/drawable-hdpi/anxiety.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/calm.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/default_ball.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/fatigue.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/lethargy.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/satisfaction.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/vitality.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/anxiety.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/calm.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/default_ball.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/fatigue.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/lethargy.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/satisfaction.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/vitality.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/anxiety.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/calm.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/default_ball.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/fatigue.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/lethargy.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/satisfaction.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/vitality.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/anxiety.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/calm.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/default_ball.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/fatigue.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/lethargy.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/satisfaction.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/vitality.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/anxiety.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/calm.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/default_ball.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/fatigue.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/lethargy.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/satisfaction.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/vitality.png is 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 대신 커스텀 clickableWithoutRipple modifier를 사용하기 위한 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.AddBitnagilIconR.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 컴포넌트를 커스텀 BitnagilIconclickableWithoutRipple modifier로 교체한 것이 일관성 있게 처리되었습니다.


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: 리플 효과 제거가 올바르게 적용되었습니다.

난이도 선택 영역에 clickableWithoutRipple modifier가 적절히 적용되어 일관된 인터랙션 경험을 제공합니다.


136-142: Material 아이콘을 커스텀 아이콘으로 성공적으로 교체했습니다.

Icons.Default.KeyboardArrowDownBitnagilIcon과 drawable 리소스로 교체하여 디자인 시스템 표준을 따르고 있습니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/block/SubRoutinesItem.kt (3)

18-20: 디자인 시스템 컴포넌트 import가 적절히 추가되었습니다.

BitnagilIconclickableWithoutRipple modifier가 올바르게 import되었습니다.


47-53: 레이아웃 조정 및 리플 효과 제거가 올바르게 적용되었습니다.

간격 조정(10.dp), 명시적 높이 설정(34.dp), 그리고 clickableWithoutRipple modifier 적용이 디자인 일관성을 향상시킵니다.


59-67: 체크 아이콘이 디자인 시스템 표준으로 교체되었습니다.

Material 아이콘을 BitnagilIcon으로 교체하고 명시적 크기(20.dp)와 조건부 틴트 색상을 적용한 것이 적절합니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/setting/SettingScreen.kt (5)

27-28: 디자인 시스템 컴포넌트 import가 올바르게 추가되었습니다.

BitnagilTopBarBitnagilOptionButton 컴포넌트가 적절히 import되었습니다.


81-85: 표준화된 상단바 컴포넌트로 교체되었습니다.

커스텀 헤더를 BitnagilTopBar로 교체하여 뒤로가기 버튼과 제목이 일관되게 처리됩니다.


138-147: 버전 정보 텍스트에 명시적 색상이 적용되었습니다.

텍스트 색상을 명시적으로 BitnagilTheme.colors.black으로 설정하여 테마 일관성을 확보했습니다.


175-187: 옵션 버튼이 표준화된 디자인 시스템 컴포넌트로 교체되었습니다.

SettingRowButtonBitnagilOptionButton으로 교체하고 적절한 패딩과 함께 Column으로 래핑하여 일관된 UI를 제공합니다.


197-209: 계정 관련 옵션들도 표준화된 컴포넌트로 교체되었습니다.

로그아웃과 탈퇴 버튼이 BitnagilOptionButton으로 일관되게 처리되어 전체 설정 화면의 UI 통일성이 향상되었습니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/home/component/template/DeleteConfirmDialog.kt (5)

24-24: 리플 효과 제거를 위한 modifier import가 추가되었습니다.

clickableWithoutRipple modifier가 올바르게 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: 그라데이션 색상 업데이트가 적절합니다.

새로운 테마 색상 homeGradientStartColorhomeGradientEndColor를 사용하여 일관된 테마 시스템을 적용한 것이 좋습니다.

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.xml
  • core/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으로의 교체와 테마 기반 색상 적용이 적절합니다. 체크 상태에 따른 색상 변화(navy500 vs navy100)가 직관적입니다.


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: 버튼 컴포넌트의 디자인 시스템 통합이 완료되었습니다.

TextButtonBitnagilTextButton으로 교체하고 적절한 패딩을 적용했습니다. 등록 버튼의 활성화 상태 처리도 유지되었습니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/terms/component/ToggleAllAgreementsItem.kt (2)

26-63: 전체동의 컴포넌트의 우수한 설계입니다.

상태에 따른 시각적 피드백이 명확하게 구현되었습니다:

  • 배경색: lightBlue75 vs coolGray99
  • 아이콘/텍스트 색상: navy500 vs navy100/coolGray50

clickableWithoutRippleBitnagilIcon 사용으로 디자인 시스템과 일관성을 유지했습니다.


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.typographyBitnagilTheme.colors로 교체하여 일관성과 유지보수성을 향상시켰습니다.


70-84: 조건부 스타일링 로직이 적절합니다.

OnBoardingAbstractTextItemisBold 속성에 따라 적절한 타이포그래피를 적용하는 로직이 잘 구현되었습니다. buildAnnotatedString을 활용한 구현도 적절합니다.


55-61: 그래픽 작업 TODO 주석이 명확합니다.

향후 그래픽 작업을 위한 placeholder Box와 TODO 주석이 명확히 표시되어 있습니다. 임시 배경색도 시각적 확인에 도움이 됩니다.

presentation/src/main/java/com/threegap/bitnagil/presentation/emotion/EmotionScreen.kt (3)

65-68: 표준화된 상단바로 교체가 적절합니다.

수동으로 구현된 뒤로가기 버튼을 BitnagilTopBar로 교체하여 앱 전체의 일관성을 향상시켰습니다.


88-93: 그리드 레이아웃과 간격 조정이 개선되었습니다.

패딩과 간격 설정이 더욱 적절해졌습니다. horizontalArrangementverticalArrangement를 통한 균등한 간격 배치가 좋습니다.


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.colorsBitnagilTheme.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: 상태 관리 구현이 올바릅니다

MutableInteractionSourcecollectIsPressedAsState()를 사용한 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: 디자인 시스템 컴포넌트 도입이 일관성 있습니다

BitnagilIconclickableWithoutRipple 도입으로 전체 앱의 디자인 시스템 통일성이 향상되었습니다.


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: 그림자 효과 구현이 세심합니다

EmotionBallTypeambientColorspotColor를 활용한 감정별 맞춤 그림자 효과가 UI의 시각적 매력을 크게 향상시킵니다. PR 목표에서 언급한 대로 사진 대신 직접 구현한 그림자 효과가 효과적입니다.


55-151: Preview 커버리지가 완벽합니다

모든 감정 타입과 기본 상태에 대한 Preview를 제공하여 디자인 타임에서 각 상태를 쉽게 확인할 수 있습니다. 이는 디자인 시스템 컴포넌트의 모범 사례입니다.

core/designsystem/src/main/java/com/threegap/bitnagil/designsystem/component/atom/BitnagilTextButton.kt (4)

33-43: 컴포넌트 API 디자인이 잘 구성되어 있습니다.

매개변수 순서와 기본값 설정이 적절하며, Compose 컨벤션을 잘 따르고 있습니다. 특히 colorsshape 매개변수를 통한 커스터마이징 옵션이 유연합니다.


44-57: 상태 관리와 색상 로직이 효율적으로 구현되었습니다.

MutableInteractionSourcecollectIsPressedAsState()를 활용한 상태 관리가 적절하며, 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가 개발과 디자인 검토에 도움이 됩니다.

Comment thread core/designsystem/src/main/res/drawable/ic_arrow_down_up.xml
Comment thread core/designsystem/src/main/res/drawable/ic_name_routine.xml
Comment thread core/designsystem/src/main/res/drawable/ic_tooltip.xml
Copy link
Copy Markdown
Contributor

@l5x5l l5x5l left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

작업량 많으셨을텐데 정말 고생 많으셨습니다!
코멘트 답변 부탁드려요!

@l5x5l
Copy link
Copy Markdown
Contributor

l5x5l commented Jul 28, 2025

+) 혹시 로고 이미지 설정도 가능하실까요?!

wjdrjs00 added 3 commits July 28, 2025 23:55
- 기존: MyPageScreen 및 SettingScreen에서 BitnagilOptionButton 사용 시 padding을 적용
- 변경: BitnagilOptionButton 컴포넌트 내부에서 padding 적용
@wjdrjs00
Copy link
Copy Markdown
Member Author

+) 혹시 로고 이미지 설정도 가능하실까요?!

저희 로고 확정인가요??

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between 538e738 and 9b61c0a.

⛔ Files ignored due to path filters (10)
  • core/designsystem/src/main/res/drawable-hdpi/intro_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-hdpi/onboarding_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/intro_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-mdpi/onboarding_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/intro_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xhdpi/onboarding_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/intro_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxhdpi/onboarding_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/intro_character.png is excluded by !**/*.png
  • core/designsystem/src/main/res/drawable-xxxhdpi/onboarding_character.png is 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: 동적 화면 높이 계산 로직이 좋습니다.

LocalWindowInfoLocalDensity를 사용하여 화면 높이를 동적으로 계산하는 접근 방식이 우수합니다. 다양한 화면 크기에서 일관된 레이아웃을 제공할 수 있습니다.


66-67: 디자인 시스템 테마 적용이 우수합니다.

BitnagilTheme.colors.navy500BitnagilTheme.typography.title2Bold 적용으로 일관된 디자인 시스템을 구현했습니다. 브랜드 일관성 향상에 기여합니다.


74-81: 이미지 컴포넌트 구현이 잘 되었습니다.

플레이스홀더를 실제 이미지로 교체하고 aspectRatioContentScale.Fit을 사용하여 이미지 비율을 유지하는 것이 좋습니다. contentDescription = null 설정도 장식적 이미지에 적절합니다.


83-83: Spacer weight 사용이 효과적입니다.

Spacer(modifier = Modifier.weight(1f))를 사용하여 버튼을 화면 하단으로 밀어내는 방식이 flexible하고 효과적입니다.


85-92: BitnagilTextButton 컴포넌트 일관 적용 확인 완료

BitnagilTextButton이 WriteRoutineScreen, TimePickerBottomSheet, TermsAgreementScreen, OnBoardingSelectTemplate, IntroScreen 등 주요 화면에서 모두 일관되게 사용되고 있어 디자인 시스템 통일성이 확보되었습니다. 패딩 구조도 적절히 구성되어 있습니다. 수고하셨습니다!

@l5x5l
Copy link
Copy Markdown
Contributor

l5x5l commented Jul 29, 2025

현재 피그마에 올라온 로고가 확정인 줄 알았는데, 확정이 아니라면 그냥 넘어가주세요!

wjdrjs00 added 2 commits July 29, 2025 13:01
- onCheckedChange 콜백 추가하여 외부에서 체크 상태를 변경할 수 있도록 함
Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between f2900eb and f3f1f14.

📒 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를 통한 유연성도 좋습니다.

다만 BitnagilIconcontentDescription 이슈가 여기까지 이어지므로, 위의 수정사항 적용시 이 함수도 함께 업데이트해주세요.

 @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: 이전 리뷰 논의사항이 잘 반영되었습니다.

BitnagilIconBitnagilIconButton을 모두 제공하여 사용자가 상황에 따라 선택할 수 있도록 한 것이 좋습니다. BitnagilIconButtonBitnagilIcon을 재사용하는 구조도 코드 중복을 방지하면서 일관성을 유지하는 좋은 접근입니다.

Copy link
Copy Markdown
Contributor

@l5x5l l5x5l left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다! 머지 진행하시죠!

@wjdrjs00 wjdrjs00 merged commit 97cd2cb into develop Jul 29, 2025
2 checks passed
@wjdrjs00 wjdrjs00 deleted the ui/#45-common-component branch July 29, 2025 10:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 UI UI 추가 및 수정 (비지니스 로직을 포함하지 않는 작업) 🧤 대현

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[UI] 디자인 시스템 공통 컴포넌트 구현

2 participants