Skip to content

PrezelList 구현#72

Merged
HamBeomJoon merged 18 commits intodevelopfrom
feat/#71-prezel-list
Mar 8, 2026
Merged

PrezelList 구현#72
HamBeomJoon merged 18 commits intodevelopfrom
feat/#71-prezel-list

Conversation

@HamBeomJoon
Copy link
Contributor

@HamBeomJoon HamBeomJoon commented Feb 27, 2026

📌 작업 내용

PrezelList 컴포넌트 구현

🧩 관련 이슈


📸 스크린샷

스크린샷 2026-03-06 13 32 57 스크린샷 2026-03-06 13 33 04

📢 논의하고 싶은 내용

  • trailingContents: ImmutableList<@composable () -> Unit> = persistentListOf(), 으로받았는데 그냥 Composable로 받으면될까요?
  • size: PrezelListSize = PrezelListSize.REGULAR, 기본값으로 Regular를 했는데, 기본값 없애고 필수 파라미터로 변경하는게 좋을까요?

Summary by CodeRabbit

릴리스 노트

  • 새로운 기능
    • 수평 리스트 컴포넌트 추가 — 제목이 가용 공간을 채우고 단일 행으로 표시
    • SMALL / REGULAR 두 가지 크기 지원
    • 중첩(nested) 여부에 따른 패딩 처리
    • 선행(leading) 및 후행(trailing) 콘텐츠 슬롯 지원(아이콘/커스텀)
    • 크기별 텍스트·아이콘 간격 및 후행 여백 자동 조절
    • 각 크기별 테마 기반 미리보기 샘플 추가

디자인 시스템의 리스트 컴포넌트에서 공통으로 사용할 `PrezelListSize` 열거형과 사이즈별 스타일 처리 로직을 추가했습니다.

*   `PrezelListSize`: `SMALL`, `REGULAR` 사이즈 정의
*   `PrezelListIcon`: `IconSource`를 기반으로 사이즈에 따른 아이콘 렌더링 구현
*   `prezelListVerticalPadding`: 사이즈별 수직 패딩 값 제공
*   `prezelListTextStyle`: 사이즈별 타이포그래피 스타일 제공
*   사이즈별 간격 조절 함수(`prezelListIconTextSpacing`, `prezelListTextTrailingSpacing`, `prezelListTrailingIconSpacing`) 추가
디자인 시스템 가이드에 맞춘 리스트 아이템 컴포넌트인 `PrezelList`를 추가했습니다.

*   `PrezelListSize` (SMALL, REGULAR)에 따른 텍스트 스타일 및 간격 대응
*   `leadingContent` 및 `trailingContents`를 통한 아이콘/컨텐츠 삽입 지원
*   `nested` 파라미터를 통한 계층 구조 인덴트 지원
*   `ImmutableList`를 활용한 다중 트레일링 컨텐츠 렌더링 및 노출 제어 로직 구현
*   테마별 미리보기(Preview) 코드 추가
`PrezelList` 컴포넌트의 패딩 로직을 개선하고, 가독성을 위해 프리뷰 관련 코드를 별도 파일로 분리하였습니다.

*   **PrezelList**: `enabled`, `onClick` 등 미사용 파라미터를 제거하고, `nested` 상태에 따른 레이아웃 처리를 `prezelListContentPadding`으로 통합했습니다.
*   **PrezelListStyle**: `prezelListVerticalPadding`을 `prezelListContentPadding`으로 변경하여 `nested` 여부에 따른 `PaddingValues`를 반환하도록 수정했습니다.
*   **PrezelListPreview**: 기존 `PrezelList.kt`에 있던 프리뷰 코드를 `PrezelListPreview.kt`로 분리하고, 사이즈별(SMALL, REGULAR) 및 케이스별(Nested, Leading, Trailing) 상세 프리뷰를 추가했습니다.
@HamBeomJoon HamBeomJoon self-assigned this Feb 27, 2026
@HamBeomJoon HamBeomJoon added the ✨ feat 새로운 기능 추가 또는 기존 기능 확장 label Feb 27, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 27, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

세 개의 파일을 추가해 PrezelList 컴포넌트를 도입합니다. PrezelList.kt는 공개 컴포저블 PrezelList(title: String, modifier: Modifier = ..., size: PrezelListSize = ..., nested: Boolean = ..., leadingContent: (@composable () -> Unit)? = null, trailingContent: (@composable () -> Unit)? = null)와 내부 PrezelListTitle을 정의해 가로 Row 레이아웃, 선택적 리딩/트레일링 슬롯, 크기·중첩 기반 패딩 및 색상 처리를 제공합니다. PrezelListStyle.ktPrezelListSize 열거와 패딩·텍스트 스타일·간격 유틸을 제공하고, PrezelListPreview.kt는 다양한 조합의 프리뷰들을 추가합니다.

🚥 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 제목이 주요 변경사항인 PrezelList 컴포넌트 구현을 명확하게 요약하고 있으며, 간결하고 구체적입니다.
Description check ✅ Passed PR 설명이 템플릿의 모든 필수 섹션(작업 내용, 관련 이슈, 스크린샷, 논의 내용)을 포함하고 있으며 충분히 완전합니다.
Linked Issues check ✅ Passed 코드 변경사항이 #71에서 요구한 PrezelList 컴포넌트 구현 목표(leading/trailing 슬롯, nested 상태, 크기 변형)를 모두 충족하고 있습니다.
Out of Scope Changes check ✅ Passed 모든 변경사항이 PrezelList 컴포넌트 구현(메인 로직, 프리뷰, 스타일)에 집중되어 있으며 범위를 벗어난 변경사항이 없습니다.

✏️ 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: 1

🧹 Nitpick comments (2)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt (1)

30-35: showFirstTrailingContent 네이밍과 실제 동작 의미를 맞춰주세요.

현재는 showFirstTrailingContent = false일 때만 첫 아이템 1개로 제한되고, true면 전체가 노출됩니다. 호출자 입장에서 의미를 반대로 해석하기 쉬운 API입니다. 동작을 뒤집거나(이름 유지), 파라미터명을 showAllTrailingContents/limitToFirstTrailingContent처럼 명확하게 바꾸는 쪽이 안전합니다.

예시: 의미를 드러내는 파라미터명으로 변경
-    showFirstTrailingContent: Boolean = true,
+    showAllTrailingContents: Boolean = true,
...
-    val visibleTrailingContents =
-        if (!showFirstTrailingContent) trailingContents.take(1) else trailingContents
+    val visibleTrailingContents =
+        if (showAllTrailingContents) trailingContents else trailingContents.take(1)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`
around lines 30 - 35, The parameter showFirstTrailingContent is misnamed vs its
behavior; rename it to showAllTrailingContents (or an equivalent clear name) and
update the logic in visibleTrailingContents so that when showAllTrailingContents
is true you return trailingContents, otherwise limit to
trailingContents.take(1); also update the parameter default and any call sites
that use showFirstTrailingContent to the new name to keep the API meaning clear.
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt (1)

57-67: prezelListTrailingIcons@Composable은 제거해도 됩니다.

이 함수는 컴포지션 상태를 읽지 않고 정적 리스트를 만드는 역할이라 일반 함수로 두는 편이 더 단순합니다.

정리 예시
-@Composable
 private fun prezelListTrailingIcons(size: PrezelListSize): ImmutableList<@Composable () -> Unit> =
     List(2) {
         `@Composable` {
             PrezelListIcon(
                 icon = IconSource(resId = PrezelIcons.Blank),
                 size = size,
             )
         }
     }.toPersistentList()
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt`
around lines 57 - 67, Remove the unnecessary `@Composable` annotation from the
prezelListTrailingIcons function signature so it becomes a regular function that
returns ImmutableList<@Composable () -> Unit>; keep the inner lambdas (the
`@Composable` { PrezelListIcon(...) }) as-is so callers still get composable
trailing icon lambdas. Update the declaration of prezelListTrailingIcons (and
any related imports if needed) to be a plain function using PrezelListSize and
returning the same List(...).toPersistentList() result.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 55-66: The Spacer with
Modifier.width(prezelListTextTrailingSpacing(size = size)) is always rendered
causing unwanted space even when showTrailingContent is false; move the Spacer
inside the same conditional as the trailing Row so both the trailing spacing and
the Row (which renders visibleTrailingContents) are only rendered when
showTrailingContent is true—i.e., wrap the Spacer and the Row together under the
showTrailingContent check (references: Spacer, prezelListTextTrailingSpacing,
showTrailingContent, Row, visibleTrailingContents).

---

Nitpick comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 30-35: The parameter showFirstTrailingContent is misnamed vs its
behavior; rename it to showAllTrailingContents (or an equivalent clear name) and
update the logic in visibleTrailingContents so that when showAllTrailingContents
is true you return trailingContents, otherwise limit to
trailingContents.take(1); also update the parameter default and any call sites
that use showFirstTrailingContent to the new name to keep the API meaning clear.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt`:
- Around line 57-67: Remove the unnecessary `@Composable` annotation from the
prezelListTrailingIcons function signature so it becomes a regular function that
returns ImmutableList<@Composable () -> Unit>; keep the inner lambdas (the
`@Composable` { PrezelListIcon(...) }) as-is so callers still get composable
trailing icon lambdas. Update the declaration of prezelListTrailingIcons (and
any related imports if needed) to be a plain function using PrezelListSize and
returning the same List(...).toPersistentList() result.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5423a9e and ee3fe36.

📒 Files selected for processing (3)
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListStyle.kt

`PrezelList` 컴포넌트의 가독성과 유지보수성을 높이기 위해 내부 구현을 서브 컴포저블로 분리하고 로직을 정리했습니다.

*   `PrezelListLeadingSlot`, `PrezelListTitle`, `PrezelListTrailingSlot` 비공개 컴포너트 추출
*   `visibleTrailingContents` 생성 시 `toImmutableList()`를 사용하여 타입 안정성 확보
*   트레일링 콘텐츠가 없을 경우 불필요한 `Spacer` 및 `Row`가 생성되지 않도록 조건부 렌더링 최적화
*   불필요한 파라미터 명칭 생략 및 코드 스타일 정리
`PrezelList` 컴포넌트에서 리스트 끝에 표시되는 아이콘(Trailing Content)의 전달 방식을 리스트 형태에서 단일 컴포저블 람다 방식으로 변경하여 유연성을 높였습니다.

*   `PrezelList` 및 `PrezelListTrailingSlot`의 `trailingContents: ImmutableList<@composable () -> Unit>` 파라미터를 `trailingContent: @composable () -> Unit`으로 변경
*   내부적으로 `ImmutableList`를 처리하던 로직을 제거하고 호출부에서 UI 구성을 제어하도록 수정
*   `PrezelListPreview.kt` 내 미리보기 코드를 변경된 구조에 맞게 업데이트
*   불필요한 `kotlinx.collections.immutable` 관련 임포트 제거
`PrezelList` 컴포넌트에서 가시성 제어를 위한 Boolean 파라미터들을 제거하고, 람다의 null 여부에 따라 콘텐츠를 표시하도록 리팩토링했습니다.

*   `PrezelList`: `showLeadingContent`, `showTrailingContent`, `showFirstTrailingContent` 파라미터 제거
*   `leadingContent` 및 `trailingContent` 타입을 옵셔널(`@Composable () -> Unit?`)로 변경하여 null이 아닐 경우에만 렌더링하도록 수정
*   `PrezelListLeadingSlot`, `PrezelListTrailingSlot` 내부 로직을 null 체크 방식으로 변경
*   `PrezelListPreview`: 파라미터 변경에 맞춰 프리뷰 코드 수정 및 간소화
`PrezelList` 컴포넌트의 내부 가독성을 높이고 불필요한 레이아웃 구조를 정리했습니다.

*   `PrezelListLeading` 및 `PrezelListTrailing` 내부의 `let` 확장 함수 사용을 조기 리턴(Early Return) 방식으로 변경하여 코드 가독성을 개선했습니다.
*   `PrezelListTrailing`에서 불필요하게 사용되던 `it()` 호출을 명시적인 `trailingContent()` 호출로 수정했습니다.
*   프리뷰 코드에서 사용하지 않는 `PrezelListSizeCases` 함수와 `HorizontalDivider`를 제거하고, `PrezelListPreviewBySize`를 사용하도록 구조를 단순화했습니다.
*   불필요한 `Column` 및 `import` 문을 정리했습니다.
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: 1

🧹 Nitpick comments (1)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt (1)

82-102: 프리뷰를 전용 파일로 모으면 컴포넌트 파일 응집도가 더 좋아집니다.

현재 구조도 동작에는 문제 없지만, 이미 프리뷰 전용 파일이 있는 구조라면 이 프리뷰 엔트리들도 그쪽으로 모으는 편이 유지보수에 유리합니다.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`
around lines 82 - 102, Move the two preview composables (PrezelListSmallPreview
and PrezelListRegularPreview) out of the component file and into the existing
preview-only file to improve cohesion; locate the Preview composables that call
PrezelListPreviewBySize and reference PrezelListSize, cut them from
PrezelList.kt and paste them into the dedicated preview file (keeping the
`@ThemePreview/`@Composable annotations and imports), then run a build to ensure
package/imports are correct and remove any now-unused imports from
PrezelList.kt.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 56-62: The Text composable rendering the title in PrezelList (the
Text call using title, Modifier.weight(1f), and style =
prezelListTextStyle(size)) only sets maxLines = 1 and should also specify an
overflow behavior so long titles show an ellipsis; update the Text invocation to
include overflow = TextOverflow.Ellipsis (and ensure the TextOverflow import is
added) so truncated titles remain readable.

---

Nitpick comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 82-102: Move the two preview composables (PrezelListSmallPreview
and PrezelListRegularPreview) out of the component file and into the existing
preview-only file to improve cohesion; locate the Preview composables that call
PrezelListPreviewBySize and reference PrezelListSize, cut them from
PrezelList.kt and paste them into the dedicated preview file (keeping the
`@ThemePreview/`@Composable annotations and imports), then run a build to ensure
package/imports are correct and remove any now-unused imports from
PrezelList.kt.

ℹ️ Review info

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ee3fe36 and 0f6da17.

📒 Files selected for processing (2)
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt
🚧 Files skipped from review as they are similar to previous changes (1)
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt

Copy link
Member

@moondev03 moondev03 left a comment

Choose a reason for hiding this comment

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

👍

Comment on lines +65 to +70
@Composable
private fun PrezelListTrailingSlot(
size: PrezelListSize,
trailingContent: (@Composable () -> Unit)?,
) {
if (trailingContent == null) return
Copy link
Member

Choose a reason for hiding this comment

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

PrezelListTrailingSlot은 이미 trailingContent가 null인 경우 의미가 없는 컴포넌트 입니다. 때문에 trailingContent가 nullable 하게 받는 것 보다 위에서 처리하는 것이 더 적절해 보여요

Copy link
Contributor Author

Choose a reason for hiding this comment

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

동일하게 leadingContent도 위에서 처리하도록 변경했습니다.

import kotlinx.collections.immutable.persistentListOf

@Immutable
private data class PrezelListVariant(
Copy link
Member

@moondev03 moondev03 Mar 5, 2026

Choose a reason for hiding this comment

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

현재 Preview 코드가 불필요하게 복잡해 보여요.

  1. Preview를 위한 Item 컴포저블
    예시 코드
@Composable
fun PrezelListPreviewItem(
    size: PrezelListSize,
    nested: Boolean,
    showLeadingContent: Boolean,
    showTrailingContent: Boolean,
) {
    Column() {
        Text(text = text = "Nested: $nested | Leading: $showLeadingContent | Trailing: showTrailingContent"),
        PrezelList(
            title = "Title",
            size = size,
            nested = nested,
            leadingContent = leading,
            trailingContent = trailing,
        )
    }
}
  1. Small Preview
    예시 코드
PrezelTheme {
      PreviewScaffold {
          SectionTitle("PrezelList - SMALL")
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = false, showLeadingContent = true, showTrailingContent = true)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = false, showLeadingContent = true, showTrailingContent = false)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = false, showLeadingContent = false, showTrailingContent = true)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = false, showLeadingContent = false, showTrailingContent = false)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = true, showLeadingContent = true, showTrailingContent = true)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = true, showLeadingContent = true, showTrailingContent = false)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = true, showLeadingContent = false, showTrailingContent = true)
          PrezelListPreviewItem(size = PrezelListSize.SMALL, nested = true, showLeadingContent = false, showTrailingContent = false)
      }
    }
  1. Regular Preview

이렇게 3개의 함수만 있으면 충분할 것 같습니다.

`PrezelList` 컴포넌트의 내부 구조를 정리하고, 슬롯 콘텐츠에 기본 아이콘 색상을 적용했습니다.

*   `PrezelListLeadingSlot`, `PrezelListTrailingSlot` 비공개 컴포넌트를 제거하고 `PrezelList` 내부에 인라인으로 통합했습니다.
*   `CompositionLocalProvider`를 사용하여 `leadingContent`와 `trailingContent`의 기본 `LocalContentColor`를 `PrezelTheme.colors.iconRegular`로 설정했습니다.
*   슬롯 콘텐츠 렌더링 시 불필요한 함수 호출을 줄이고 가독성을 개선했습니다.
- `PrezelListPreview.kt` 내 복잡한 `PrezelListVariant` 데이터 클래스와 리스트 로직을 제거하고, 직관적인 `PrezelListPreviewItem` 및 `PrezelListPreviewBySize` 구조로 리팩토링했습니다.
- 프리뷰 내 `HorizontalDivider` 및 섹션 타이틀(`SectionTitle`) 적용 방식을 개선하여 가독성을 높였습니다.
- `PrezelList` 컴포넌트 내 불필요한 `LocalContentColor.current` 설정을 제거했습니다.
- `PrezelListStyle.kt`에서 사용되지 않는 `PrezelListIcon` 함수를 삭제했습니다.
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.

♻️ Duplicate comments (1)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt (1)

67-72: ⚠️ Potential issue | 🟡 Minor

긴 제목은 말줄임 처리까지 넣어두는 편이 안전합니다.

maxLines = 1만 있으면 잘린 제목의 식별성이 떨어집니다. overflow = TextOverflow.Ellipsis를 같이 지정해주세요.

예시
 import androidx.compose.material3.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.style.TextOverflow
@@
     Text(
         text = title,
         modifier = Modifier.weight(1f),
         maxLines = 1,
+        overflow = TextOverflow.Ellipsis,
         style = prezelListTextStyle(size),
     )
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`
around lines 67 - 72, The Text composable rendering the title currently sets
maxLines = 1 but lacks an overflow policy; update the Text call that uses title
and prezelListTextStyle(size) to include overflow = TextOverflow.Ellipsis so
long titles render with an ellipsis, and add the necessary import for
androidx.compose.ui.text.style.TextOverflow if it's not already present.
🧹 Nitpick comments (1)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt (1)

27-28: ImmutableList 대신 슬롯 하나로 단순화한 방향은 좋고, 타입은 RowScope로 열어두는 편이 더 유연합니다.

지금 구조라면 리스트보다는 단일 slot이 맞습니다. 다만 두 슬롯 모두 Row 안에서 렌더링되므로 (@composable RowScope.() -> Unit)?로 받으면 호출부에서 여러 자식을 자연스럽게 넣을 수 있고 RowScope modifier도 막히지 않습니다.

예시
-    leadingContent: (`@Composable` () -> Unit)? = null,
-    trailingContent: (`@Composable` () -> Unit)? = null,
+    leadingContent: (`@Composable` RowScope.() -> Unit)? = null,
+    trailingContent: (`@Composable` RowScope.() -> Unit)? = null,
@@
-        leadingContent?.let {
+        leadingContent?.let { content ->
             CompositionLocalProvider(
                 LocalContentColor provides PrezelTheme.colors.iconRegular,
-                content = leadingContent,
-            )
+            ) { content() }
             Spacer(modifier = Modifier.width(prezelListIconTextSpacing(size)))
         }
@@
-        trailingContent?.let {
+        trailingContent?.let { content ->
             Spacer(modifier = Modifier.width(prezelListTextTrailingSpacing(size)))
 
             Row(
                 horizontalArrangement = Arrangement.spacedBy(prezelListTrailingIconSpacing(size)),
                 verticalAlignment = Alignment.CenterVertically,
             ) {
                 CompositionLocalProvider(
                     LocalContentColor provides PrezelTheme.colors.iconRegular,
-                    content = trailingContent,
-                )
+                ) { content() }
             }
         }

Also applies to: 36-56

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`
around lines 27 - 28, 간단히 말하면 leadingContent와 trailingContent의 슬롯 타입을 현재의
(`@Composable` () -> Unit)? 대신 Row 내부에서 렌더링하므로 (`@Composable` RowScope.() -> Unit)?로
변경하세요; PrezelList 컴포저블에서 두 슬롯을 Row 안에서 호출할 때 RowScope 리시버를 사용하도록 호출부(예:
leadingContent?.invoke(this))로 수정해 RowScope의 modifier와 여러 자식 사용이 가능하게 만드세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 67-72: The Text composable rendering the title currently sets
maxLines = 1 but lacks an overflow policy; update the Text call that uses title
and prezelListTextStyle(size) to include overflow = TextOverflow.Ellipsis so
long titles render with an ellipsis, and add the necessary import for
androidx.compose.ui.text.style.TextOverflow if it's not already present.

---

Nitpick comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt`:
- Around line 27-28: 간단히 말하면 leadingContent와 trailingContent의 슬롯 타입을 현재의
(`@Composable` () -> Unit)? 대신 Row 내부에서 렌더링하므로 (`@Composable` RowScope.() -> Unit)?로
변경하세요; PrezelList 컴포저블에서 두 슬롯을 Row 안에서 호출할 때 RowScope 리시버를 사용하도록 호출부(예:
leadingContent?.invoke(this))로 수정해 RowScope의 modifier와 여러 자식 사용이 가능하게 만드세요.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 5b0b5d7b-8dbf-42be-8d26-9b73f4c6901e

📥 Commits

Reviewing files that changed from the base of the PR and between 0f6da17 and 27d9114.

📒 Files selected for processing (3)
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListStyle.kt
🚧 Files skipped from review as they are similar to previous changes (2)
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListPreview.kt
  • Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelListStyle.kt

`PrezelList` 컴포넌트 내에서 `leadingContent`와 `trailingContent`의 유연성을 높이고 코드를 정문화했습니다.

*   `leadingContent` 및 `trailingContent` 파라미터의 타입을 `(@composable () -> Unit)?`에서 `(@composable RowScope.() -> Unit)?`로 변경하여 내부에서 `Row` 관련 scope 기능을 사용할 수 있도록 수정했습니다.
*   `CompositionLocalProvider` 내에서 콘텐츠를 호출하는 방식을 명시적인 람다 호출(`{ content() }`) 구조로 변경했습니다.
@HamBeomJoon HamBeomJoon requested a review from moondev03 March 6, 2026 05:00
HamBeomJoon and others added 6 commits March 7, 2026 09:32
`PrezelList` 내에서 `leadingContent`와 `trailingContent`에 개별적으로 적용되던 `CompositionLocalProvider`를 `Row` 전체를 감싸는 방식으로 변경하여 코드 중복을 제거하고 구조를 개선했습니다.
`PrezelList` 컴포넌트에서 `LocalContentColor`를 `PrezelTheme.colors.iconRegular`로 강제 설정하던 `CompositionLocalProvider`를 제거하였습니다. 이를 통해 상위 컴포넌트의 색상 설정을 따르거나 개별 콘텐츠에서 색상을 제어할 수 있도록 유연성을 높였습니다.
`PrezelList` 컴포넌트의 텍스트 색상이 `LocalContentColor`를 따르도록 수정하여 테마 및 상위 컴포넌트의 색상 설정과 동기화되도록 개선했습니다.
별도 파일로 분리되어 있던 `PrezelListPreview.kt`를 삭제하고, 해당 로직을 `PrezelList.kt` 내부로 통합하여 관리하도록 수정했습니다.

* `PrezelListPreviewItem` 및 관련 프리뷰 로직을 `PrezelList.kt`로 이동
* `PrezelListPreviewBySize`를 제거하고 각 프리뷰 섹션에서 직접 `PrezelListPreviewItem`을 호출하도록 변경
* 불필요한 파일 삭제를 통한 프로젝트 구조 단순화
@moondev03
Copy link
Member

image

@HamBeomJoon HamBeomJoon merged commit ab6e9e2 into develop Mar 8, 2026
2 checks passed
@HamBeomJoon HamBeomJoon deleted the feat/#71-prezel-list branch March 8, 2026 16:49
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.

PrezelList 구현

2 participants