Conversation
더 이상 사용되지 않는 `dropShadowCache` 확장 함수 및 관련 파일(`DropShadowCache.kt`)을 삭제하였습니다. 해당 함수는 `Modifier`에 그림자 효과를 적용하기 위해 `drawWithCache`와 `BlurMaskFilter`를 사용하던 로직을 포함하고 있었습니다.
TextField 구성 요소들의 Preview 코드에서 불필요한 `PreviewSurface` 래퍼를 제거하고 구조를 단순화했습니다. * `PrezelTextFieldLabel`: Preview에서 `PreviewSurface` 제거 및 미사용 import 정리 * `PrezelTextFieldPlaceholder`: Preview에서 `PreviewSurface` 제거 및 미사용 import 정리 * `PrezelTextFieldSupportingText`: Preview에서 `PreviewSurface` 및 불필요한 `Column` 레이아웃 제거, 미사용 import 정리
Walkthrough이 PR은 Prezel 디자인 시스템의 버튼 관련 아키텍처와 프리뷰 인프라를 대규모로 재구성했습니다. 기존의 Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 12
🧹 Nitpick comments (9)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt (1)
92-130: 프리뷰 케이스 반복은 데이터 기반 루프로 축약할 수 있습니다.현재 4개 블록이 구조적으로 동일해서, 조합 리스트로 돌리면 수정 포인트를 줄일 수 있습니다.
♻️ 제안 리팩터링
PreviewSection( title = "Image", description = "round/border 조합별 이미지 콘텐츠를 보여줍니다.", ) { - PreviewValueRow(name = "No Round / No Border") { - PrezelImage( - resId = PrezelIcons.Blank, - contentDescription = "", - modifier = Modifier.size(100.dp), - rounded = false, - border = false, - ) - } - - PreviewValueRow(name = "Round / No Border") { - PrezelImage( - resId = PrezelIcons.Blank, - contentDescription = "", - modifier = Modifier.size(100.dp), - rounded = true, - border = false, - ) - } - - PreviewValueRow(name = "No Round / Border") { - PrezelImage( - resId = PrezelIcons.Blank, - contentDescription = "", - modifier = Modifier.size(100.dp), - rounded = false, - border = true, - ) - } - - PreviewValueRow(name = "Round / Border") { - PrezelImage( - resId = PrezelIcons.Blank, - contentDescription = "", - modifier = Modifier.size(100.dp), - rounded = true, - border = true, - ) - } + val cases = listOf( + Triple("No Round / No Border", false, false), + Triple("Round / No Border", true, false), + Triple("No Round / Border", false, true), + Triple("Round / Border", true, true), + ) + + cases.forEach { (name, rounded, border) -> + PreviewValueRow(name = name) { + PrezelImage( + resId = PrezelIcons.Blank, + contentDescription = "", + modifier = Modifier.size(100.dp), + rounded = rounded, + border = border, + ) + } + } }🤖 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/image/PrezelImage.kt` around lines 92 - 130, Replace the four repeated PreviewValueRow/PrezelImage blocks with a data-driven loop: create a small list of cases (e.g., entries containing name, rounded flag, border flag, and resId like PrezelIcons.Blank) and iterate over it to emit PreviewValueRow for each case; update the UI preview generator that currently uses the repeated blocks (the instances of PreviewValueRow and PrezelImage) to read from that list so you only maintain the combinations in one place (keep contentDescription and modifier as before).Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/foundation/number/PrezelSpacing.kt (1)
47-68: Spacing 프리뷰 토큰 목록을 단일 소스로 분리하는 것을 권장합니다.현재 토큰 선언과 프리뷰 목록이 이중 관리되어 누락 위험이 있습니다. 프리뷰용 목록을 별도 상수로 빼면 유지보수가 쉬워집니다.
♻️ 제안 리팩터링
object PrezelSpacing { @@ val V80 = 80.dp } +private val spacingPreviewTokens = listOf( + "V0" to PrezelSpacing.V0, + "V2" to PrezelSpacing.V2, + "V4" to PrezelSpacing.V4, + "V6" to PrezelSpacing.V6, + "V8" to PrezelSpacing.V8, + "V10" to PrezelSpacing.V10, + "V12" to PrezelSpacing.V12, + "V14" to PrezelSpacing.V14, + "V16" to PrezelSpacing.V16, + "V20" to PrezelSpacing.V20, + "V24" to PrezelSpacing.V24, + "V28" to PrezelSpacing.V28, + "V32" to PrezelSpacing.V32, + "V36" to PrezelSpacing.V36, + "V40" to PrezelSpacing.V40, + "V48" to PrezelSpacing.V48, + "V56" to PrezelSpacing.V56, + "V64" to PrezelSpacing.V64, + "V72" to PrezelSpacing.V72, + "V80" to PrezelSpacing.V80, +) + `@BasicPreview` `@Composable` private fun SpacingTokensPreview() { @@ - listOf( - "V0" to PrezelSpacing.V0, - "V2" to PrezelSpacing.V2, - "V4" to PrezelSpacing.V4, - "V6" to PrezelSpacing.V6, - "V8" to PrezelSpacing.V8, - "V10" to PrezelSpacing.V10, - "V12" to PrezelSpacing.V12, - "V14" to PrezelSpacing.V14, - "V16" to PrezelSpacing.V16, - "V20" to PrezelSpacing.V20, - "V24" to PrezelSpacing.V24, - "V28" to PrezelSpacing.V28, - "V32" to PrezelSpacing.V32, - "V36" to PrezelSpacing.V36, - "V40" to PrezelSpacing.V40, - "V48" to PrezelSpacing.V48, - "V56" to PrezelSpacing.V56, - "V64" to PrezelSpacing.V64, - "V72" to PrezelSpacing.V72, - "V80" to PrezelSpacing.V80, - ).forEach { (name, spacing) -> + spacingPreviewTokens.forEach { (name, spacing) -> PreviewValueRow( name = name, valueLabel = "${spacing.value}dp", ) {🤖 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/foundation/number/PrezelSpacing.kt` around lines 47 - 68, The preview token list is duplicated and should be centralized: create a single immutable list/constant (e.g., PREVIEW_SPACING_TOKENS or SpacingTokenList) that contains the pairs like "V0" to PrezelSpacing.V0 ... "V80" to PrezelSpacing.V80, then replace the inline list in the preview loop (the forEach block referencing PrezelSpacing.V0..V80) to iterate that new constant; update any other places that currently duplicate these tokens to use the new constant so the token declarations in PrezelSpacing remain the single source of truth.Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt (1)
82-103: 프리뷰 상태 로직이 혼란스러울 수 있음
Regular는checkState를,Large는!checkState를 표시하고 있어 두 체크박스가 항상 반대 상태를 보여줍니다. 의도된 동작이라면 괜찮지만, 독립적인 상태 테스트를 원한다면 별도의 state 변수를 사용하는 것이 더 명확합니다.♻️ 독립적인 상태 관리 제안
`@BasicPreview` `@Composable` private fun PrezelCheckboxPreview() { - var checkState by remember { mutableStateOf(true) } + var regularChecked by remember { mutableStateOf(true) } + var largeChecked by remember { mutableStateOf(false) } PreviewSection( title = "Checkbox", description = "Checkbox는 목록에서 선택할 항목이 여러 개 있을 때 사용됩니다.", ) { PreviewValueRow(name = "Regular") { PrezelCheckbox( - checked = checkState, + checked = regularChecked, modifier = Modifier.drawDashBorder(), size = CheckboxSize.REGULAR, - onCheckedChange = { checkState = it }, + onCheckedChange = { regularChecked = it }, ) } PreviewValueRow(name = "Large") { PrezelCheckbox( - checked = !checkState, + checked = largeChecked, modifier = Modifier.drawDashBorder(), size = CheckboxSize.LARGE, - onCheckedChange = { checkState = it }, + onCheckedChange = { largeChecked = it }, ) } } }🤖 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/PrezelCheckbox.kt` around lines 82 - 103, The preview uses a single state variable checkState for the Regular checkbox and the negated value !checkState for Large, causing them to always be opposite; change the preview to use independent state for each checkbox (e.g., introduce checkStateLarge alongside checkState) and wire PrezelCheckbox (checked and onCheckedChange) for the Large preview to that new state so each PrezelCheckbox in PreviewSection/PreviewValueRow manages its own state independently.Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenu.kt (1)
49-62: 프리뷰에서 중복 스타일링 확인
PrezelMenu가 이미config.backgroundColor를 적용하는데, 프리뷰에서Modifier.background(Color.LightGray)를 추가로 적용하고 있습니다. 이는 실제 메뉴 스타일을 가릴 수 있습니다. 의도적으로 컨테이너 배경을 구분하려는 것이라면 무시해도 됩니다.🤖 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/actions/button/floating/menu/PrezelMenu.kt` around lines 49 - 62, 프리뷰에서 PrezelMenu가 이미 내부적으로 config.backgroundColor를 적용하므로, 현재 Preview 코드의 Modifier.background(Color.LightGray)는 메뉴의 실제 스타일을 가릴 수 있습니다; Preview용이라면 Modifier.background(Color.LightGray)를 제거하거나(또는 메뉴 배경을 보존하려면 외부 구분용 Box를 사용해 PrezelMenu의 Modifier에는 배경을 적용하지 않도록 변경) PrezelMenu 호출부(PrezelMenu, Modifier.background(Color.LightGray), padding(8.dp))를 수정해 메뉴 자체 스타일을 존중하도록 고쳐주세요.Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingButton.kt (1)
48-74: 프리뷰에서 공유 상태 사용모든 버튼 조합이 단일
expanded상태를 공유하여, 하나의 버튼을 클릭하면 모든 버튼이 동시에 토글됩니다. 프리뷰 목적으로는 문제없지만, 각 조합을 독립적으로 테스트하려면 개별 상태가 필요할 수 있습니다.🤖 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/actions/button/floating/PrezelFloatingButton.kt` around lines 48 - 74, The preview uses a single shared var expanded in PrezelFloatingButtonPreview so all PrezelFloatingButton instances toggle together; make the expanded state local per button (e.g., move the remember { mutableStateOf(false) } inside the PreviewValueRow lambda or use remember(key1 = hierarchy, key2 = size) for each iteration) and wire that local state into PrezelFloatingButton's isExpanded and onChangeExpanded so each PreviewValueRow/PrezelFloatingButton has its own independent state.Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt (1)
91-98:wrapContentHeight()수정자가 불필요할 수 있습니다.
Box는 기본적으로 콘텐츠를 감싸므로wrapContentHeight()가 중복될 수 있습니다. 특별한 의도가 없다면 제거해도 동일하게 동작합니다.♻️ 중복 수정자 제거 제안
text?.let { - Box( - modifier = Modifier.wrapContentHeight(), - contentAlignment = Alignment.Center, - ) { - text() - } + text() }🤖 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/actions/button/config/PrezelButtonBase.kt` around lines 91 - 98, PrezelButtonBase의 Box 내부에 사용된 Modifier.wrapContentHeight()는 Box가 기본적으로 콘텐츠 크기를 감싸므로 중복입니다; 특별한 레이아웃 의도가 없다면 Box의 modifier에서 wrapContentHeight()를 제거하고 단순히 Box(contentAlignment = Alignment.Center) { text() }로 변경해 불필요한 수정자를 제거하세요 (참조: PrezelButtonBase, Box, Modifier.wrapContentHeight).Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelChip.kt (1)
90-101: 접근성을 위한contentDescription고려
contentDescription = null이 의도적인 선택(장식용 아이콘)이라면 괜찮지만, 아이콘이 의미 있는 정보를 전달하는 경우 스크린 리더 사용자를 위해contentDescription파라미터 추가를 고려해 주세요.🤖 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/chip/PrezelChip.kt` around lines 90 - 101, PrezelChipIcon currently hardcodes contentDescription = null; update the function signature (PrezelChipIcon) to accept a contentDescription: String? parameter with a default of null, forward that parameter to the Icon composable, and update all callers of PrezelChipIcon to supply a localized description when the icon conveys meaning (leave omitted for purely decorative icons). This ensures screen readers receive meaningful text while preserving existing behavior when no description is provided.Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonPreview.kt (1)
163-199: 프리뷰 테이블 셀 구현을 공통 컴포넌트로 빼두면 좋겠습니다.
ButtonPreviewHeaderCell/ButtonPreviewCell가PrezelButtonArea.kt의 preview 셀 구현과 거의 같습니다. preview 인프라를 정리하는 PR이라면 border/background/padding이 같은 셀은 공통 helper로 올려 두는 편이 이후 다른 컴포넌트 preview를 추가할 때 수정 지점을 한 곳으로 줄일 수 있습니다.🤖 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/actions/button/config/PrezelButtonPreview.kt` around lines 163 - 199, ButtonPreviewHeaderCell and ButtonPreviewCell duplicate the same border/background/padding logic used in PrezelButtonArea previews; extract a single reusable composable (e.g., PrezelPreviewCell or PreviewTableCell) that accepts parameters for content, optional header text, and alignment, move the shared modifier chain (fillMaxHeight, border, background, padding) into that composable, then update ButtonPreviewHeaderCell and ButtonPreviewCell (or callers in PrezelButtonArea) to delegate to the new shared composable to centralize styling and reduce duplicate code.Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.kt (1)
89-96: filled primary 텍스트 색만 현재 테마를 우회하고 있습니다.여기서만
PrezelColorScheme.Dark를 직접 참조하면 local color override나 다른 color scheme을 쓸 때 filled primary 텍스트만 따로 고정됩니다. 가능하면filled button on-color에 해당하는 semantic token도PrezelTheme.colors에서 내려서 버튼 기본값이 전부 현재 테마에서 파생되도록 맞춰 주세요.🤖 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/actions/button/config/PrezelButtonDefaults.kt` around lines 89 - 96, The filled-primary branch currently hardcodes PrezelColorScheme.Dark.textLarge which bypasses theme overrides; update the ButtonType.FILLED return to use the semantic "filled button on-color" from the theme (e.g., PrezelTheme.colors.onFilled or the existing onPrimary/onContent-onFilled token) instead of PrezelColorScheme.Dark.textLarge in PrezelButtonDefaults (the branch that checks ButtonType.FILLED); if that semantic token doesn't exist, add it to PrezelTheme.colors and map it to appropriate color schemes so filled button text derives from the active theme.
🤖 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/.editorconfig`:
- Line 15: Remove the unnecessary ktlint disable line by deleting
"ktlint_standard_backing-property-naming = disabled" from .editorconfig (or
revert it to enabled) because the backing property in ButtonAreaScope.kt
(private val _buttons) follows the standard convention; ensure the rule is
active so ktlint enforces the default backing-property-naming behavior.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/ButtonAreaScope.kt`:
- Around line 113-115: The validateButtonCount() check has an off-by-one bug: it
currently uses require(buttons.size <= 2) before adding a new button which
allows a third button; change the validation to enforce a strict less-than check
(e.g., require(buttons.size < 2)) or move the check to run after the prospective
addition so that validateButtonCount() blocks when there are already 2 buttons;
update the require call inside validateButtonCount() accordingly (refer to
validateButtonCount() and the buttons.size usage) to ensure no more than 2
buttons can be declared.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt`:
- Around line 49-50: 현재 DefaultButtonAreaScope를 remember로 재사용하고 있어 재구성 시 이전에 등록된
버튼이 남을 수 있으니, ButtonAreaScope(DefaultButtonAreaScope) 인스턴스를 remember로 보관하지 말고 매
composition에서 새로 생성하도록 변경하고 scope.content() 호출만 해당 인스턴스에서 수행하도록 수정하십시오; 구체적으로
PrezelButtonArea.kt에서 val scope = remember { DefaultButtonAreaScope() }를
remember 없이 val scope = DefaultButtonAreaScope()로 바꾸고 해당 scope.content() 호출을
유지하며, 더 이상 사용하지 않는 remember import를 제거하세요 (참조: DefaultButtonAreaScope,
scope.content(), SubButton, ButtonAreaScope).
- Around line 59-69: The code assumes scope.buttons[0] always exists when
choosing between ButtonAreaVertical and ButtonAreaHorizontal, which can throw
IndexOutOfBoundsException; update PrezelButtonArea.kt to explicitly validate
that a main button is present before indexing (e.g., check
scope.buttons.isNotEmpty()) and either provide a clear early failure (throw
IllegalStateException/IllegalArgumentException with a descriptive message) or
render a safe fallback when the main button is missing; adjust both branches
that call scope.buttons[0] (the ButtonAreaVertical and ButtonAreaHorizontal
invocations) to use this validation and surface a helpful error explaining that
the DSL must supply a main button.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingMenu.kt`:
- Around line 49-52: The when-mapping in PrezelFloatingMenu (variable size
mapping ButtonSize -> MenuSize) currently uses else -> MenuSize.REGULAR which
forces ButtonSize.XSMALL to REGULAR and misaligns toggle/menu; update the when
in PrezelFloatingMenu.kt to explicitly handle ButtonSize.XSMALL ->
MenuSize.SMALL (or alternatively validate the incoming ButtonSize and
throw/return an error for unsupported sizes) so XSMALL maps correctly to SMALL
(adjust the branch on the when that references ButtonSize.SMALL /
ButtonSize.REGULAR / else).
- Around line 47-58: Spacer가 isExpanded와 무관하게 렌더링되어 닫힌 상태에서도 V16 높이를 예약하는 문제입니다;
PrezelFloatingMenu 컴포저블에서 Spacer(modifier =
Modifier.height(PrezelTheme.spacing.V16))를 isExpanded 분기 안으로 이동하거나 Spacer를
isExpanded 검사로 감싸서 오직 isExpanded == true일 때만 렌더링되도록 수정하세요 (참조: isExpanded,
PrezelMenu, Spacer, PrezelFloatingMenu).
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelHyperlinkButton.kt`:
- Around line 44-45: PrezelHyperlinkButton의 언더라인 색이 항상
PrezelTheme.colors.borderLarge로 고정되어 있어 disabled일 때도 강조되어 보입니다;
Modifier.prezelButtonUnderline() 호출부와 관련 로직에서 언더라인 색을 config(예: config.colors /
config.variants)과 enabled 플래그를 사용해 결정하도록 변경하고, enabled == false인 경우 텍스트와 동일한
disabled 색상으로 언더라인을 바꾸세요; 해당 변경은 PrezelHyperlinkButton 구성 코드(특히 layoutModifier =
Modifier.prezelButtonUnderline() 호출과 config 사용 부분)와 관련된 모든 위치(파일의 44-62 범위)를
업데이트하고 Color import를 추가하세요.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt`:
- Around line 147-155: The PreviewValueRow for the "Small" avatar uses an
English contentDescription ("Image Type") that is inconsistent with the
surrounding preview text; update the contentDescription passed to PrezelAvatar
(and any other preview usages) to use a consistent language/expression (e.g.,
Korean or a shared preview string) so previews are uniform — locate the
PreviewValueRow block and change the contentDescription argument on PrezelAvatar
to the consistent text or a shared constant/resource used across previews.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/PrezelSnackbar.kt`:
- Around line 76-87: PrezelSnackbarLeadingIcon currently passes
contentDescription = null; change the PrezelSnackbarLeadingIcon signature to
accept a contentDescription: String? parameter and pass that into Icon so
assistive tech can read non-decorative icons; then propagate an optional
contentDescription field through the snackbar visuals by extending
PrezelSnackbarVisuals and the showPrezelSnackbar API to accept and forward this
description (retain null/default for purely decorative icons). Reference
symbols: PrezelSnackbarLeadingIcon, PrezelSnackbarVisuals, showPrezelSnackbar.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/BasicPreview.kt`:
- Around line 6-9: 현재 BasicPreview.kt의 `@Preview에서` backgroundColor가 32비트 ARGB로
해석되므로 0xFFFFFF는 투명한 흰색(0x00FFFFFF)으로 처리됩니다; `@Preview` 애노테이션의 backgroundColor 값을
불투명 흰색으로 바꾸려면 0xFFFFFFFF로 변경하고 BasicPreview.kt의 해당 `@Preview`(...) 블록을 찾아
backgroundColor 항목만 수정하세요.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt`:
- Around line 209-225: Box에 이미 innerPadding을 적용한 뒤 content(innerPadding)를 다시 넘겨서
Scaffold inset이 중복될 수 있습니다; PreviewComponent.kt의 Scaffold 블록 내 Box에서
.padding(innerPadding)를 제거하고 대신 기존처럼 content(innerPadding)만 전달해 wrapper가 패딩값을
적용하지 않도록 변경하세요(대상 식별자: Scaffold, Box, content(innerPadding),
Modifier.padding(innerPadding)).
- Around line 123-156: PreviewSection currently ignores the provided
defaults.screenPadding because it calls PreviewSurface without forwarding the
defaults; update PreviewSection to pass the received defaults (or at least
defaults.screenPadding) into PreviewSurface so the surface uses the caller's
configured screen padding (e.g., call PreviewSurface(defaults = defaults) or
PreviewSurface(screenPadding = defaults.screenPadding) depending on
PreviewSurface API). This ensures PreviewColumn and the rest of the section
respect the exposed PreviewDefaults passed into PreviewSection.
---
Nitpick comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt`:
- Around line 91-98: PrezelButtonBase의 Box 내부에 사용된 Modifier.wrapContentHeight()는
Box가 기본적으로 콘텐츠 크기를 감싸므로 중복입니다; 특별한 레이아웃 의도가 없다면 Box의 modifier에서
wrapContentHeight()를 제거하고 단순히 Box(contentAlignment = Alignment.Center) { text()
}로 변경해 불필요한 수정자를 제거하세요 (참조: PrezelButtonBase, Box, Modifier.wrapContentHeight).
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.kt`:
- Around line 89-96: The filled-primary branch currently hardcodes
PrezelColorScheme.Dark.textLarge which bypasses theme overrides; update the
ButtonType.FILLED return to use the semantic "filled button on-color" from the
theme (e.g., PrezelTheme.colors.onFilled or the existing
onPrimary/onContent-onFilled token) instead of PrezelColorScheme.Dark.textLarge
in PrezelButtonDefaults (the branch that checks ButtonType.FILLED); if that
semantic token doesn't exist, add it to PrezelTheme.colors and map it to
appropriate color schemes so filled button text derives from the active theme.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonPreview.kt`:
- Around line 163-199: ButtonPreviewHeaderCell and ButtonPreviewCell duplicate
the same border/background/padding logic used in PrezelButtonArea previews;
extract a single reusable composable (e.g., PrezelPreviewCell or
PreviewTableCell) that accepts parameters for content, optional header text, and
alignment, move the shared modifier chain (fillMaxHeight, border, background,
padding) into that composable, then update ButtonPreviewHeaderCell and
ButtonPreviewCell (or callers in PrezelButtonArea) to delegate to the new shared
composable to centralize styling and reduce duplicate code.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenu.kt`:
- Around line 49-62: 프리뷰에서 PrezelMenu가 이미 내부적으로 config.backgroundColor를 적용하므로,
현재 Preview 코드의 Modifier.background(Color.LightGray)는 메뉴의 실제 스타일을 가릴 수 있습니다;
Preview용이라면 Modifier.background(Color.LightGray)를 제거하거나(또는 메뉴 배경을 보존하려면 외부 구분용
Box를 사용해 PrezelMenu의 Modifier에는 배경을 적용하지 않도록 변경) PrezelMenu 호출부(PrezelMenu,
Modifier.background(Color.LightGray), padding(8.dp))를 수정해 메뉴 자체 스타일을 존중하도록
고쳐주세요.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingButton.kt`:
- Around line 48-74: The preview uses a single shared var expanded in
PrezelFloatingButtonPreview so all PrezelFloatingButton instances toggle
together; make the expanded state local per button (e.g., move the remember {
mutableStateOf(false) } inside the PreviewValueRow lambda or use remember(key1 =
hierarchy, key2 = size) for each iteration) and wire that local state into
PrezelFloatingButton's isExpanded and onChangeExpanded so each
PreviewValueRow/PrezelFloatingButton has its own independent state.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelChip.kt`:
- Around line 90-101: PrezelChipIcon currently hardcodes contentDescription =
null; update the function signature (PrezelChipIcon) to accept a
contentDescription: String? parameter with a default of null, forward that
parameter to the Icon composable, and update all callers of PrezelChipIcon to
supply a localized description when the icon conveys meaning (leave omitted for
purely decorative icons). This ensures screen readers receive meaningful text
while preserving existing behavior when no description is provided.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.kt`:
- Around line 92-130: Replace the four repeated PreviewValueRow/PrezelImage
blocks with a data-driven loop: create a small list of cases (e.g., entries
containing name, rounded flag, border flag, and resId like PrezelIcons.Blank)
and iterate over it to emit PreviewValueRow for each case; update the UI preview
generator that currently uses the repeated blocks (the instances of
PreviewValueRow and PrezelImage) to read from that list so you only maintain the
combinations in one place (keep contentDescription and modifier as before).
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.kt`:
- Around line 82-103: The preview uses a single state variable checkState for
the Regular checkbox and the negated value !checkState for Large, causing them
to always be opposite; change the preview to use independent state for each
checkbox (e.g., introduce checkStateLarge alongside checkState) and wire
PrezelCheckbox (checked and onCheckedChange) for the Large preview to that new
state so each PrezelCheckbox in PreviewSection/PreviewValueRow manages its own
state independently.
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/foundation/number/PrezelSpacing.kt`:
- Around line 47-68: The preview token list is duplicated and should be
centralized: create a single immutable list/constant (e.g.,
PREVIEW_SPACING_TOKENS or SpacingTokenList) that contains the pairs like "V0" to
PrezelSpacing.V0 ... "V80" to PrezelSpacing.V80, then replace the inline list in
the preview loop (the forEach block referencing PrezelSpacing.V0..V80) to
iterate that new constant; update any other places that currently duplicate
these tokens to use the new constant so the token declarations in PrezelSpacing
remain the single source of truth.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 9d988810-6c21-40c2-b0cf-14c45e0ad77a
📒 Files selected for processing (74)
Prezel/.editorconfigPrezel/app/src/main/java/com/team/prezel/ui/PrezelApp.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAccordion.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelCheckbox.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelDivider.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelNavigationBar.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelRadio.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelTabs.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/TopAppBar.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/ButtonAreaScope.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonAreaDefaults.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelHyperlinkButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelIconButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelTextButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonDefaults.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonModels.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonPreview.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingMenu.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenu.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenuDefaults.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenuItem.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenuItemDefaults.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/menu/PrezelMenuScope.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/base/PrezelDropShadow.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/base/PrezelTouchArea.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButtonArea.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButtonPreview.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButtonStyle.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelHyperlinkButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelIconButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelTextButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButtonMenuItem.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButtonMenuItemStyle.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButtonStyle.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingMenuButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelChip.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelChipPreview.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelCustomChipPreview.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelIconChip.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/datepicker/DatePickerDayCellView.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/datepicker/MonthGrid.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/datepicker/MonthSection.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/datepicker/PrezelDatePicker.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImage.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/list/PrezelList.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/PrezelSnackbar.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/SnackbarHost.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/textfield/PrezelTextArea.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/textfield/PrezelTextField.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/textfield/component/PrezelTextFieldLabel.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/textfield/component/PrezelTextFieldPlaceholder.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/textfield/component/PrezelTextFieldSupportingText.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/foundation/number/PrezelRadius.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/foundation/number/PrezelShapes.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/foundation/number/PrezelSpacing.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/foundation/number/PrezelStroke.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/icon/IconSource.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/BasicPreview.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/theme/PrezelColorScheme.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/theme/PrezelTypographyScheme.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/util/DrawDashBorder.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/util/DropShadowCache.ktPrezel/detekt-config.ymlPrezel/feature/login/impl/src/main/java/com/team/prezel/feature/login/impl/LoginScreen.ktPrezel/feature/splash/impl/src/main/java/com/team/prezel/feature/splash/impl/SplashScreen.kt
💤 Files with no reviewable changes (17)
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButton.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButtonMenuItem.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButton.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/image/PrezelImageSource.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelCustomChipPreview.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelTextButton.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelHyperlinkButton.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButtonArea.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/util/DropShadowCache.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelIconButton.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButtonStyle.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingButtonMenuItemStyle.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/floating/PrezelFloatingMenuButton.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/chip/PrezelChipPreview.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButtonPreview.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/icon/IconSource.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/button/PrezelButtonStyle.kt
...em/src/main/java/com/team/prezel/core/designsystem/component/actions/area/ButtonAreaScope.kt
Show resolved
Hide resolved
...m/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt
Show resolved
Hide resolved
...m/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt
Outdated
Show resolved
Hide resolved
...va/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingMenu.kt
Outdated
Show resolved
Hide resolved
.../core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt
Show resolved
Hide resolved
...nsystem/src/main/java/com/team/prezel/core/designsystem/component/snackbar/PrezelSnackbar.kt
Show resolved
Hide resolved
...el/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/BasicPreview.kt
Show resolved
Hide resolved
...ore/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt
Show resolved
Hide resolved
...ore/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt
Show resolved
Hide resolved
`PrezelFloatingMenu` 컴포넌트 내의 간격 조정 로직을 수정하여 시각적 일관성을 개선했습니다.
`BasicPreview` 어노테이션의 `backgroundColor` 값을 올바른 8자리 16진수 색상 코드(`0xFFFFFFFF`)로 수정하였습니다.
`PrezelButtonBase` 컴포넌트 내에서 불필요한 레이아웃 중첩을 제거하여 구조를 최적화했습니다.
There was a problem hiding this comment.
♻️ Duplicate comments (1)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt (1)
217-224:⚠️ Potential issue | 🟡 Minor
innerPadding이 중복 적용될 수 있습니다.래퍼
Box가 이미innerPadding을 소비한 뒤 같은 값을content(innerPadding)로 다시 넘기고 있어서, content 쪽에서Modifier.padding(innerPadding)를 쓰면 Scaffold inset이 두 번 들어갑니다. 이 래퍼는 값을 전달만 하고 직접 적용하지 않는 편이 안전합니다.🔧 제안 수정
) { innerPadding -> Box( modifier = Modifier .fillMaxSize() - .padding(innerPadding) .padding(defaults.screenPadding), ) { content(innerPadding) } }🤖 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/preview/PreviewComponent.kt` around lines 217 - 224, The wrapper Box currently applies innerPadding via Modifier.padding(innerPadding) and then calls content(innerPadding), causing Scaffold insets to be double-applied if the content also pads by innerPadding; remove the .padding(innerPadding) from the Box's modifier so the Box only applies defaults.screenPadding (e.g., keep Modifier.fillMaxSize().padding(defaults.screenPadding)) and continue to pass innerPadding into content(innerPadding) so the content is solely responsible for consuming the Scaffold inset; update the PreviewComponent.kt Box modifier accordingly.
🧹 Nitpick comments (1)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt (1)
33-36:PreviewValueRow만 spacing 정책을 하드코딩합니다.
PreviewDefaults.itemSpacing를 도입했는데 여기서만12.dp를 직접 쓰면, 호출부에서 기본 간격을 바꿔도 토큰 행은 따라오지 않습니다.defaults를 받아 같은 값을 재사용하는 쪽이 새 프리뷰 레이아웃 모델과 더 잘 맞습니다.♻️ 제안 수정
internal fun PreviewValueRow( name: String, modifier: Modifier = Modifier, + defaults: PreviewDefaults = PreviewDefaults(), valueLabel: String? = null, preview: `@Composable` () -> Unit, ) { Row( modifier = modifier.fillMaxWidth(), - horizontalArrangement = Arrangement.spacedBy(12.dp), + horizontalArrangement = Arrangement.spacedBy(defaults.itemSpacing), verticalAlignment = Alignment.CenterVertically, ) {Also applies to: 163-171
🤖 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/preview/PreviewComponent.kt` around lines 33 - 36, PreviewValueRow is hardcoding 12.dp instead of using the PreviewDefaults.itemSpacing token, so changing defaults won't affect the token row; update PreviewValueRow to take (or use) the existing PreviewDefaults and replace the hardcoded 12.dp with defaults.itemSpacing (and do the same change for the other occurrence around the 163-171 block) so the component reuses PreviewDefaults.itemSpacing consistently; reference PreviewDefaults.itemSpacing and PreviewValueRow when making the change.
🤖 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/preview/PreviewComponent.kt`:
- Around line 217-224: The wrapper Box currently applies innerPadding via
Modifier.padding(innerPadding) and then calls content(innerPadding), causing
Scaffold insets to be double-applied if the content also pads by innerPadding;
remove the .padding(innerPadding) from the Box's modifier so the Box only
applies defaults.screenPadding (e.g., keep
Modifier.fillMaxSize().padding(defaults.screenPadding)) and continue to pass
innerPadding into content(innerPadding) so the content is solely responsible for
consuming the Scaffold inset; update the PreviewComponent.kt Box modifier
accordingly.
---
Nitpick comments:
In
`@Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt`:
- Around line 33-36: PreviewValueRow is hardcoding 12.dp instead of using the
PreviewDefaults.itemSpacing token, so changing defaults won't affect the token
row; update PreviewValueRow to take (or use) the existing PreviewDefaults and
replace the hardcoded 12.dp with defaults.itemSpacing (and do the same change
for the other occurrence around the 163-171 block) so the component reuses
PreviewDefaults.itemSpacing consistently; reference PreviewDefaults.itemSpacing
and PreviewValueRow when making the change.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 0654db13-d01f-467e-b845-764f4de84b05
📒 Files selected for processing (9)
Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/TopAppBar.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/ButtonAreaScope.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelHyperlinkButton.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/floating/PrezelFloatingMenu.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/BasicPreview.ktPrezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/PreviewComponent.kt
✅ Files skipped from review due to trivial changes (1)
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/PrezelButtonArea.kt
🚧 Files skipped from review as they are similar to previous changes (6)
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/preview/BasicPreview.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/TopAppBar.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/area/ButtonAreaScope.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/config/PrezelButtonBase.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/PrezelAvatar.kt
- Prezel/core/designsystem/src/main/java/com/team/prezel/core/designsystem/component/actions/button/PrezelHyperlinkButton.kt
| } | ||
|
|
||
| private fun validateButtonCount() { | ||
| require(buttons.size < 2) { "버튼은 최대 2개까지 선언할 수 있습니다." } |
There was a problem hiding this comment.
여기서는 _buttons로 접근하는게 좋아보여요
| isNested: Boolean = false, | ||
| config: PrezelButtonAreaDefault = PrezelButtonAreaDefaults.getDefault( | ||
| showBackground = showBackground, | ||
| isNested = isNested, |
There was a problem hiding this comment.
isNested 옵션이 두개가 있는데, 하나로 줄이거나 할 수 있을 것 같아요
| .background(Color.Transparent) | ||
| .padding(4.dp), | ||
| ) { | ||
| Row(modifier = Modifier.weight(1f)) { |

📌 작업 내용
component/button에서component/actions/button및component/actions/area로 재구성하고, 기존 버튼/플로팅 버튼 구현을 제거했습니다.PrezelButton,PrezelTextButton,PrezelIconButton,PrezelHyperlinkButton,PrezelFloatingButton,PrezelFloatingMenu를 공통 base/defaults/models 구조로 정리해 버튼 타입, 크기, 계층별 스타일 계산을 일관되게 관리하도록 개선했습니다.
component/base하위에PrezelTouchArea,PrezelDropShadow를 추가하고, 사용하지 않는DropShadowCache유틸리티를 제거했습니다.PrezelButtonArea를 DSL 기반ButtonAreaScope구조로 개선해 버튼 영역 선언 방식을 단순화했고,DatePicker,Snackbar,Login,TextField등 기존 사용처도 새로운 API에 맞게 정리했습니다.IconSource,PrezelImageSource를 제거하고 리소스 참조 방식을DrawableRes기반으로 단순화했으며,NavigationBar,Chip,Image등 관련 컴포넌트 호출부를 함께 정리했습니다.ThemePreview중심이던 기존 Preview 구조를BasicPreview,PreviewSection,PreviewRow,PreviewValueRow,PreviewScaffold기반으로 개편하고, 다수 디자인 시스템 컴포넌트와 토큰 Preview를 일관된 형식으로 재정비했습니다.ColorScheme,TypographyScheme,Radius,Shapes,Spacing,Stroke등 디자인 토큰 Preview와 일부 컴포넌트 코드를 정리하면서 KDoc, lint/detekt 설정도 함께 보완했습니다.🧩 관련 이슈
📸 스크린샷
디자인 시스템 내의 모든 프리뷰를 아래와 같은 스타일로 통일했습니다.
Button
ButtonArea
Chip
📢 논의하고 싶은 내용
변경된 구조와 관련해 궁금한 점이나 논의가 필요한 부분이 있으면 편하게 말씀 부탁드립니다.
추가로 피그마 Chip 컴포넌트에 대한 스타일이 많이 변경된 것 같아서 확인 부탁드려요 :)
Summary by CodeRabbit
릴리스 노트
New Features
Refactor
Chores