Skip to content

PrezelAccordion 구현#55

Open
HamBeomJoon wants to merge 2 commits intodevelopfrom
feat/#52-prezel-accordion
Open

PrezelAccordion 구현#55
HamBeomJoon wants to merge 2 commits intodevelopfrom
feat/#52-prezel-accordion

Conversation

@HamBeomJoon
Copy link
Contributor

@HamBeomJoon HamBeomJoon commented Feb 8, 2026

📌 작업 내용

  1. PrezelAccordion 구현

    • Header / Label / Content를 slot API로 제공
    • 펼침 상태에 따른 chevron rotation 애니메이션 적용
    • AnimatedVisibility 기반 expand / collapse 처리
    • Divider 표시 옵션 제공
    • Ripple 제거된 클릭 정책 적용
  2. PrezelIcon 업데이트

    • 전체적으로 아이콘이 Outlined -> Filled로 변경되었습니다.

🧩 관련 이슈


📸 스크린샷

스크린샷 2026-02-08 22 09 52
2026-02-08.22.10.42.mov

Summary by CodeRabbit

릴리스 노트

  • New Features
    • 새로운 Accordion 컴포넌트 추가: 확장/축소 기능이 있는 인터랙티브한 UI 요소 제공
    • 아이콘 라이브러리 확장: Edit, Lock, Menu, Search, Setting, Storage, Upload 등 13개 이상의 새로운 아이콘 추가
    • 개선된 아이콘 변형: Info 및 Warning 아이콘을 Filled/Outlined 버전으로 분리하여 더 다양한 디자인 옵션 제공

디자인시스템에 아코디언 컴포넌트인 `PrezelAccordion`을 새롭게 추가했습니다.

*   `AnimatedVisibility`를 이용한 펼치기/접기 애니메이션 구현
*   헤더, 라벨, 콘텐츠 영역을 커스텀할 수 있는 슬롯 구조 적용
*   `showDivider` 옵션을 통한 구분선 표시 기능 제공
*   상태별 미리보기(Collapsed, Expanded, Interactive) 추가
아이콘 세트를 전반적으로 업데이트하고, 명명 규칙을 통일했습니다.

*   신규 아이콘 추가: `Menu`, `Search`, `Upload`, `Lock`, `Storage`, `QuestionCircle` 등
*   기존 아이콘 리팩토링: `Calendar`, `Balloon`, `Check`, `Person`, `Video` 등 벡터 패스 및 색상 수정
*   아이콘 명명 규칙 변경: `WarningCircle` -> `WarningCircleOutlined` 등 형태에 따른 접미사 추가
*   `PrezelIcons` 클래스 내 리소스 참조 업데이트 및 신규 아이콘 등록
*   불필요한 아이콘 삭제 (`ic_info`, `ic_warning`) 및 `PrezelAccordion` 코드 스타일 수정
@HamBeomJoon HamBeomJoon self-assigned this Feb 8, 2026
@HamBeomJoon HamBeomJoon added the ✨ feat 새로운 기능 추가 또는 기존 기능 확장 label Feb 8, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 8, 2026

Walkthrough

새로운 PrezelAccordion 컴포저블 컴포넌트가 추가되었으며, 확장/축소 상태, 헤더 렌더링, 애니메이션 콘텐츠 영역을 지원합니다. 동시에 PrezelIcons에서 Edit, Lock, Menu, Search, Setting, Storage, Upload 등 여러 새로운 아이콘 상수가 추가되었고, Info와 InfoCircle은 제거되었습니다. 기존 Info 및 Warning 아이콘의 다양한 변형(Filled, Outlined)이 추가되었으며, 다수의 벡터 드로어블 파일(.xml)이 업데이트 또는 새로 생성되었습니다.

Possibly related PRs

  • Prezel Icons 정의 #19: PrezelIcons 아이콘 매핑 및 관련 드로어블 리소스를 함께 수정하고 있습니다.
  • PrezelImage 구현 #45: PrezelIcons 상수 및 core_designsystem_ic_\* 드로어블 자산을 동일하게 추가/수정합니다.
  • PrezelTabs 구현 #49: Edit, Lock, Setting, Storage 등 동일한 디자인 시스템 드로어블 리소스를 함께 변경합니다.
🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 가장 주요한 변경사항인 PrezelAccordion 구현을 명확하게 나타내고 있습니다.
Description check ✅ Passed PR 설명이 템플릿의 모든 필수 섹션(작업 내용, 관련 이슈, 스크린샷)을 포함하고 있으며, 각 섹션의 내용도 충분합니다.
Linked Issues check ✅ Passed PR의 코드 변경사항이 이슈 #52의 요구사항을 충족합니다. PrezelAccordion 컴포넌트가 구현되었고, 헤더/레이블/콘텐츠 구조, 애니메이션, 디바이더 옵션 등이 모두 적용되었습니다.
Out of Scope Changes check ✅ Passed PrezelIcons의 대규모 업데이트는 관련 이슈에서 명시되지 않았으나, PR 설명에서 아이콘 변경(Outlined → Filled)이 함께 언급되었으므로 의도된 변경입니다.

✏️ 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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@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: 2

🤖 Fix all issues with AI agents
In
`@Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_calendar.xml`:
- Around line 7-8: Update the calendar drawable's fill color: locate the
android:fillColor attribute in core_designsystem_ic_calendar.xml (the <path>
element containing the calendar android:pathData) and change its value from
"#2F3238" to "#6E737D" so it matches the other design system icons.

In
`@Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_menu.xml`:
- Around line 1-9: The vector drawable's pathData defines three horizontal dots
(a "more" icon) but the resource is named core_designsystem_ic_menu.xml (which
implies a hamburger/menu icon); either update the pathData to the three-line
hamburger shape in the <path> (replace the current dot pathData) or rename the
asset to reflect "more" (e.g., core_designsystem_ic_more) and update any
references; locate the <vector> and its <path> (android:pathData) in
core_designsystem_ic_menu.xml to make the change so resource name and visual
match the design system convention.
🧹 Nitpick comments (5)
Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_person.xml (1)

6-11: 하드코딩된 fillColor 대신 테마 컬러 참조 고려

두 path 모두 fillColor#6E737D로 하드코딩되어 있습니다. Compose에서 tint를 통해 항상 색상을 오버라이드한다면 문제없지만, 그렇지 않은 경우 다크 모드 등 테마 전환 시 아이콘이 배경과 구분되지 않을 수 있습니다.

AI 요약에 따르면 이번 PR의 다른 아이콘들도 동일한 패턴을 사용하고 있으므로, 전체 아이콘 세트에 대해 일관된 방침이 있는지 확인해 주세요.

Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_search.xml (1)

1-9: 새 Search 아이콘 추가 확인.

아이콘 구조와 fillColor가 일관됩니다. 참고로, TopAppBar.kt (Line 112)에서 PrezelIcons.Blank을 contentDescription "검색"으로 사용하고 있는 부분이 있습니다. 이 새로운 Search 아이콘으로 교체하는 것이 적절할 수 있습니다.

Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAccordion.kt (3)

115-125: 접근성: chevron 아이콘에 contentDescription 추가 권장

contentDescription = null로 설정되어 있어 스크린 리더 사용자가 아코디언의 확장/축소 상태를 인지할 수 없습니다. 확장 상태에 따라 적절한 설명을 제공하는 것이 좋습니다.

또한, R.drawable.core_designsystem_ic_chevron_down을 직접 참조하는 대신 PrezelIcons.ChevronDown을 사용하면 다른 컴포넌트(PrezelRadio, PrezelCheckbox 등)와 일관성을 유지할 수 있습니다.

♻️ 제안
 `@Composable`
 private fun PrezelAccordionChevron(rotation: Float) {
     Icon(
-        painter = painterResource(R.drawable.core_designsystem_ic_chevron_down),
-        contentDescription = null,
+        painter = painterResource(PrezelIcons.ChevronDown),
+        contentDescription = "Toggle accordion",
         modifier = Modifier
             .size(24.dp)
             .rotate(rotation),
         tint = PrezelTheme.colors.iconRegular,
     )
 }

40-77: 공개 API 시그니처 검토

전체적으로 잘 구성되어 있습니다. 슬롯 기반 API로 header/label/content를 분리하고, AnimatedVisibility 기반의 확장/축소, ripple 제거 클릭 정책 등 PR 목표를 충실히 구현했습니다.

한 가지 고려할 점: enabled = false일 때 chevron이 여전히 표시되고 시각적 비활성화 표시가 없습니다. 비활성 상태의 시각적 피드백(예: 투명도 조절)을 추가하면 사용자 경험이 개선될 수 있습니다.


87-112: 헤더 영역의 클릭 영역과 접근성 시맨틱스

clickable modifier에 indication = null과 커스텀 interactionSource를 사용하여 ripple을 제거한 것은 PR 목표와 일치합니다. 다만, 접근성 향상을 위해 semantics 혹은 toggleable modifier를 활용하여 확장/축소 역할(Role)을 명시하면 TalkBack 등 보조 기술에서 더 나은 경험을 제공할 수 있습니다. 참고로 PrezelCheckbox에서는 toggleableRole.Checkbox를 사용하고 있습니다.

Comment on lines +7 to +8
android:pathData="M21,18.5C21,19.881 19.881,21 18.5,21H5.5C4.119,21 3,19.881 3,18.5V10.5H21V18.5ZM15,1.999C15.414,1.999 15.75,2.335 15.75,2.749V4H18.5C19.881,4 21,5.119 21,6.5V9.5H3V6.5C3,5.119 4.119,4 5.5,4H8.25V2.749C8.25,2.335 8.586,1.999 9,1.999C9.414,1.999 9.75,2.335 9.75,2.749V4H14.25V2.749C14.25,2.335 14.586,1.999 15,1.999Z"
android:fillColor="#2F3238"/>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for fillColor in all design system icon drawable files
rg -n 'fillColor' --glob 'Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_*.xml' -A 0 -B 0

Repository: Team-Prezel/Prezel-Android

Length of output: 6342


캘린더 아이콘의 fillColor를 #6E737D로 수정 필요

fillColor="#2F3238"로 설정되어 있으나, 다른 모든 디자인 시스템 아이콘(49개)은 #6E737D를 일관되게 사용하고 있습니다. 캘린더 아이콘만 유일하게 다른 색상을 사용하고 있으므로 #6E737D로 통일해야 합니다.

🤖 Prompt for AI Agents
In
`@Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_calendar.xml`
around lines 7 - 8, Update the calendar drawable's fill color: locate the
android:fillColor attribute in core_designsystem_ic_calendar.xml (the <path>
element containing the calendar android:pathData) and change its value from
"#2F3238" to "#6E737D" so it matches the other design system icons.

Comment on lines +1 to +9
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M4.5,10.5C5.328,10.5 6,11.172 6,12C6,12.828 5.328,13.5 4.5,13.5C3.672,13.5 3,12.828 3,12C3,11.172 3.672,10.5 4.5,10.5ZM12,10.5C12.828,10.5 13.5,11.172 13.5,12C13.5,12.828 12.828,13.5 12,13.5C11.172,13.5 10.5,12.828 10.5,12C10.5,11.172 11.172,10.5 12,10.5ZM19.5,10.5C20.328,10.5 21,11.172 21,12C21,12.828 20.328,13.5 19.5,13.5C18.672,13.5 18,12.828 18,12C18,11.172 18.672,10.5 19.5,10.5Z"
android:fillColor="#6E737D"/>
</vector>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

아이콘 이름과 실제 모양 불일치 가능성 확인 필요.

pathData를 분석하면, 세 개의 원(점)이 수평으로 나열된 형태로 보입니다. 이는 일반적으로 "더보기(More)" 아이콘에 해당하며, "메뉴(Menu)"라고 하면 보통 세 줄(햄버거) 아이콘을 의미합니다. 팀 내 디자인 시스템의 네이밍 규칙에 맞는지 확인해 주세요.

🤖 Prompt for AI Agents
In `@Prezel/core/designsystem/src/main/res/drawable/core_designsystem_ic_menu.xml`
around lines 1 - 9, The vector drawable's pathData defines three horizontal dots
(a "more" icon) but the resource is named core_designsystem_ic_menu.xml (which
implies a hamburger/menu icon); either update the pathData to the three-line
hamburger shape in the <path> (replace the current dot pathData) or rename the
asset to reflect "more" (e.g., core_designsystem_ic_more) and update any
references; locate the <vector> and its <path> (android:pathData) in
core_designsystem_ic_menu.xml to make the change so resource name and visual
match the design system convention.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ feat 새로운 기능 추가 또는 기존 기능 확장

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PrezelAccordion 구현

1 participant