Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
6fd461c
feat: PrezelTouchArea 컴포넌트 구현
moondev03 Mar 21, 2026
729187f
feat: PrezelButtonLayout 컴포넌트 추가
moondev03 Mar 21, 2026
2c516b8
feat: 버튼 디자인 시스템 구성을 위한 설정 및 CompositionLocal 구현
moondev03 Mar 21, 2026
f665162
feat: PrezelTextButton 컴포넌트 추가
moondev03 Mar 21, 2026
7ec5655
feat: PrezelIconButton 컴포넌트 추가
moondev03 Mar 22, 2026
11f9e28
feat: PrezelIconButton 컴포넌트 추가
moondev03 Mar 22, 2026
7c4d38a
feat: PrezelButton 컴포넌트 구현 및 관련 로직 추가
moondev03 Mar 22, 2026
2d7b2b0
refactor: PrezelButton 컴포넌트 구조 개선 및 내부 로직 최적화
moondev03 Mar 22, 2026
d986a9b
refactor: 버튼 컴포넌트 프리뷰 구조 개선 및 리팩터링
moondev03 Mar 22, 2026
eabfead
refactor: PrezelButton 계열 컴포넌트의 파라미터 구조 및 기본값 설정 로직 개선
moondev03 Mar 22, 2026
c436c65
refactor: PrezelTouchArea 내부 Box의 wrapContentSize 속성 제거
moondev03 Mar 22, 2026
65ffb6b
feat: PrezelButtonArea 컴포넌트 구현
moondev03 Mar 22, 2026
d8536ad
feat: PrezelDropShadow 컴포넌트 및 Modifier 확장 구현
moondev03 Mar 24, 2026
3c6f174
feat: 플로팅 버튼 및 플로팅 메뉴 컴포넌트 구현
moondev03 Mar 24, 2026
52e9373
feat: PrezelHyperlinkButton 구현
moondev03 Mar 24, 2026
55a5f45
refactor: PrezelButtonArea 구조 개선 및 DSL 기반 ButtonAreaScope 도입
moondev03 Mar 24, 2026
a849bd0
refactor: 기존 버튼 및 플로팅 버튼 관련 컴포넌트들을 삭제
moondev03 Mar 24, 2026
e81f5df
refactor: 버튼 관련 컴포넌트 패키지 구조 변경 및 API 개선
moondev03 Mar 24, 2026
d112d55
chore: 사용하지 않는 DropShadowCache 유틸리티 제거
moondev03 Mar 24, 2026
7276c34
feat: PrezelDropShadow 성능 최적화 및 PrezelFloatingButton 그림자 적용
moondev03 Mar 24, 2026
39e5071
build: detekt 설정 및 룰 최적화
moondev03 Mar 24, 2026
05bbe35
docs: 디자인 시스템 주요 컴포넌트 KDoc 주석 추가
moondev03 Mar 24, 2026
20f7b8a
refactor: 디자인 시스템 내 `IconSource` 및 `PrezelImageSource` 제거 및 리소스 참조 방식…
moondev03 Mar 24, 2026
0d403c1
refactor: 디자인 시스템 Preview 유틸리티 컴포넌트 개선 및 구조화
moondev03 Mar 24, 2026
6632e54
refactor: 프리뷰 유틸리티 컴포넌트 통합 및 고도화
moondev03 Mar 24, 2026
a46acc3
refactor: 디자인 시스템 Preview 시스템 개편 및 관련 컴포넌트 리팩터링
moondev03 Mar 24, 2026
96e9eaf
refactor: 디자인 시스템 컴포넌트 Preview 구조 개선 및 코드 정리
moondev03 Mar 24, 2026
43ba421
chore: Detekt 설정 업데이트 및 미사용 코드 정리
moondev03 Mar 24, 2026
4c249c3
refactor: TextField 관련 컴포넌트 Preview 코드 정리
moondev03 Mar 24, 2026
5993207
fix: ButtonAreaScope 내 버튼 최대 개수 검증 로직 수정
moondev03 Mar 24, 2026
38d0e02
refactor: PrezelButtonArea 버튼 추출 로직 개선 및 예외 처리 추가
moondev03 Mar 24, 2026
7117c36
refactor: PrezelFloatingMenu 내부 레이아웃 구조 개선
moondev03 Mar 24, 2026
747f0b3
refactor: PrezelFloatingMenu 사이즈 매핑 로직 개선
moondev03 Mar 24, 2026
e6e2ab6
style: PrezelAvatar 미리보기의 contentDescription 리소스 수정
moondev03 Mar 24, 2026
706de2a
style: BasicPreview 배경색 리소스 수정
moondev03 Mar 24, 2026
0b52030
refactor: 디자인 시스템 프리뷰 컴포넌트 구조 개선 및 TopAppBar 코드 정리
moondev03 Mar 24, 2026
1b32b77
refactor: PrezelHyperlinkButton의 enabled 파라미터 제거 및 고정값 적용
moondev03 Mar 24, 2026
4f89ca8
refactor: PrezelButtonBase 내부 텍스트 렌더링 구조 단순화
moondev03 Mar 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Prezel/.editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ trim_trailing_whitespace = true
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true
ktlint_function_naming_ignore_when_annotated_with = Composable
ktlint_standard_backing-property-naming = disabled
ktlint_standard_multiline-expression-wrapping = disabled
ktlint_standard_function-signature = enabled
ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 2
5 changes: 2 additions & 3 deletions Prezel/app/src/main/java/com/team/prezel/ui/PrezelApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.entryProvider
import androidx.navigation3.ui.NavDisplay
import com.team.prezel.core.designsystem.component.PrezelNavigationScaffold
import com.team.prezel.core.designsystem.icon.IconSource
import com.team.prezel.core.navigation.LocalNavigator
import com.team.prezel.core.navigation.Navigator
import com.team.prezel.core.navigation.ProvideSharedTransitionScope
Expand Down Expand Up @@ -68,11 +67,11 @@ private fun PrezelAppContent(
snackbarHostState = snackbarHostState,
navigationItems = {
MAIN_NAV_ITEMS.forEach { (key, item) ->
item(
Item(
selected = key == appState.navigationState.currentTopLevelKey,
onClick = { navigator.navigate(key) },
label = stringResource(item.titleTextId),
icon = IconSource(item.iconRes),
iconResId = item.iconRes,
)
}
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,14 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.team.prezel.core.designsystem.R
import com.team.prezel.core.designsystem.component.button.PrezelHyperlinkButton
import com.team.prezel.core.designsystem.component.actions.button.PrezelHyperlinkButton
import com.team.prezel.core.designsystem.component.list.PrezelList
import com.team.prezel.core.designsystem.component.list.PrezelListSize
import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles
import com.team.prezel.core.designsystem.icon.PrezelIcons
import com.team.prezel.core.designsystem.preview.PreviewScaffold
import com.team.prezel.core.designsystem.preview.ThemePreview
import com.team.prezel.core.designsystem.preview.BasicPreview
import com.team.prezel.core.designsystem.preview.PreviewColumn
import com.team.prezel.core.designsystem.preview.PreviewSurface
import com.team.prezel.core.designsystem.theme.PrezelTheme
import com.team.prezel.core.designsystem.util.drawDashBorder

Expand Down Expand Up @@ -129,11 +130,11 @@ private fun PrezelAccordionContent(
}
}

@ThemePreview
@BasicPreview
@Composable
private fun PrezelAccordionPreview() {
PrezelTheme {
PreviewScaffold {
PreviewSurface {
PreviewColumn(scrollable = true) {
Column(verticalArrangement = Arrangement.spacedBy(40.dp)) {
PrezelAccordion(
title = "Collapsed Accordion",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,10 @@ package com.team.prezel.core.designsystem.component

import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.Surface
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
Expand All @@ -24,7 +20,9 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.team.prezel.core.designsystem.R
import com.team.prezel.core.designsystem.foundation.number.PrezelStroke
import com.team.prezel.core.designsystem.preview.ThemePreview
import com.team.prezel.core.designsystem.preview.BasicPreview
import com.team.prezel.core.designsystem.preview.PreviewSection
import com.team.prezel.core.designsystem.preview.PreviewValueRow
import com.team.prezel.core.designsystem.theme.PrezelTheme

@Composable
Expand Down Expand Up @@ -109,50 +107,52 @@ private fun DefaultAvatarIcon(
)
}

@ThemePreview
@BasicPreview
@Composable
private fun PrezelAvatarSizePreview() {
PrezelTheme {
Surface(color = PrezelTheme.colors.bgRegular) {
Row(
horizontalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier.padding(16.dp),
) {
PrezelAvatar(
imageUrl = null,
contentDescription = "기본 아바타",
size = PrezelAvatarSize.SMALL,
)
PrezelAvatar(
imageUrl = null,
contentDescription = "기본 아바타",
size = PrezelAvatarSize.REGULAR,
)
}
private fun PrezelAvatarPreview() {
PreviewSection(
title = "Avatar",
description = "Avatar는 사용자를 대신하는 그래픽 요소입니다.",
) {
PreviewValueRow(
name = "Regular",
valueLabel = "기본 아바타",
) {
PrezelAvatar(
imageUrl = null,
contentDescription = "기본 아바타",
size = PrezelAvatarSize.REGULAR,
)
}
}
}

@ThemePreview
@Composable
private fun PrezelAvatarTypePreview() {
PrezelTheme {
Surface(color = PrezelTheme.colors.bgRegular) {
Row(
horizontalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier.padding(16.dp),
) {
PrezelAvatar(
imageUrl = null,
contentDescription = "Default Type",
size = PrezelAvatarSize.SMALL,
)
PrezelAvatar(
imageUrl = "https://picsum.photos/200",
contentDescription = "Image Type",
size = PrezelAvatarSize.SMALL,
)
}
PreviewValueRow(
name = "Regular",
valueLabel = "이미지",
) {
PrezelAvatar(
imageUrl = "https://picsum.photos/200",
contentDescription = "기본 아바타",
size = PrezelAvatarSize.REGULAR,
)
}
PreviewValueRow(
name = "Small",
valueLabel = "기본 아바타",
) {
PrezelAvatar(
imageUrl = null,
contentDescription = "기본 아바타",
size = PrezelAvatarSize.SMALL,
)
}
PreviewValueRow(
name = "Small",
valueLabel = "이미지",
) {
PrezelAvatar(
imageUrl = "https://picsum.photos/200",
contentDescription = "이미지",
size = PrezelAvatarSize.SMALL,
)
}
}
}
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
package com.team.prezel.core.designsystem.component

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.selection.toggleable
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
Expand All @@ -23,9 +17,10 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.unit.dp
import com.team.prezel.core.designsystem.R
import com.team.prezel.core.designsystem.foundation.typography.PrezelTextStyles
import com.team.prezel.core.designsystem.icon.PrezelIcons
import com.team.prezel.core.designsystem.preview.ThemePreview
import com.team.prezel.core.designsystem.preview.BasicPreview
import com.team.prezel.core.designsystem.preview.PreviewSection
import com.team.prezel.core.designsystem.preview.PreviewValueRow
import com.team.prezel.core.designsystem.theme.PrezelTheme
import com.team.prezel.core.designsystem.util.drawDashBorder

Expand Down Expand Up @@ -81,81 +76,30 @@ fun PrezelCheckbox(
}
}

@ThemePreview
@BasicPreview
@Composable
private fun PrezelRegularCheckboxPreview() {
PrezelTheme {
Column(
modifier = Modifier
.background(PrezelTheme.colors.bgRegular)
.padding(16.dp),
) {
CheckboxRowPreview(title = "Regular Checkbox") {
var checkState by remember { mutableStateOf(true) }
private fun PrezelCheckboxPreview() {
var checkState by remember { mutableStateOf(true) }

PrezelCheckbox(
checked = checkState,
modifier = Modifier.drawDashBorder(),
size = CheckboxSize.REGULAR,
onCheckedChange = { checkState = it },
)

PrezelCheckbox(
checked = !checkState,
modifier = Modifier.drawDashBorder(),
size = CheckboxSize.REGULAR,
onCheckedChange = { checkState = it },
)
}
PreviewSection(
title = "Checkbox",
description = "Checkbox는 목록에서 선택할 항목이 여러 개 있을 때 사용됩니다.",
) {
PreviewValueRow(name = "Regular") {
PrezelCheckbox(
checked = checkState,
modifier = Modifier.drawDashBorder(),
size = CheckboxSize.REGULAR,
onCheckedChange = { checkState = it },
)
}
}
}

@ThemePreview
@Composable
private fun PrezelLargeCheckboxPreview() {
PrezelTheme {
Column(
modifier = Modifier
.background(PrezelTheme.colors.bgRegular)
.padding(16.dp),
) {
CheckboxRowPreview(title = "Large Checkbox") {
var checkState by remember { mutableStateOf(true) }

PrezelCheckbox(
checked = checkState,
modifier = Modifier.drawDashBorder(),
size = CheckboxSize.LARGE,
onCheckedChange = { checkState = it },
)

PrezelCheckbox(
checked = !checkState,
modifier = Modifier.drawDashBorder(),
size = CheckboxSize.LARGE,
onCheckedChange = { checkState = it },
)
}
PreviewValueRow(name = "Large") {
PrezelCheckbox(
checked = !checkState,
modifier = Modifier.drawDashBorder(),
size = CheckboxSize.LARGE,
onCheckedChange = { checkState = it },
)
}
}
}

@Composable
private fun CheckboxRowPreview(
title: String,
content: @Composable RowScope.() -> Unit,
) {
Column(modifier = Modifier.padding(bottom = 16.dp)) {
Text(
text = title,
style = PrezelTextStyles.Caption2Regular.toTextStyle(),
color = PrezelTheme.colors.textLarge,
modifier = Modifier.padding(bottom = 4.dp),
)
Row(
horizontalArrangement = Arrangement.spacedBy(8.dp),
content = content,
)
}
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
package com.team.prezel.core.designsystem.component

import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Text
import androidx.compose.material3.VerticalDivider
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.team.prezel.core.designsystem.preview.PreviewScaffold
import com.team.prezel.core.designsystem.preview.SectionTitle
import com.team.prezel.core.designsystem.preview.ThemePreview
import com.team.prezel.core.designsystem.preview.BasicPreview
import com.team.prezel.core.designsystem.preview.PreviewSection
import com.team.prezel.core.designsystem.preview.PreviewValueRow
import com.team.prezel.core.designsystem.theme.PrezelTheme

enum class PrezelDividerType(
Expand Down Expand Up @@ -59,24 +57,34 @@ private fun PrezelDivider(
}
}

@ThemePreview
@BasicPreview
@Composable
private fun PrezelDividerPreview() {
PrezelTheme {
PreviewScaffold {
SectionTitle(title = "PrezelDivider - Horizontal")
Text("PrezelDividerType.DEFAULT")
private fun PrezelHorizontalDividerPreview() {
PreviewSection(
title = "PrezelDivider - Horizontal",
description = "Divider는 두 요소 사이를 구분합니다.",
) {
PreviewValueRow(name = "DEFAULT") {
PrezelHorizontalDivider(type = PrezelDividerType.DEFAULT)
Text("PrezelDividerType.THICK")
}
PreviewValueRow(name = "THICK") {
PrezelHorizontalDivider(type = PrezelDividerType.THICK)
}
}
}

Spacer(modifier = Modifier.height(20.dp))

SectionTitle(title = "PrezelDivider - Vertical")
Text("PrezelDividerType.DEFAULT")
PrezelVerticalDivider(type = PrezelDividerType.DEFAULT, modifier = Modifier.height(100.dp))
Text("PrezelDividerType.THICK")
PrezelVerticalDivider(type = PrezelDividerType.THICK, modifier = Modifier.height(100.dp))
@BasicPreview
@Composable
private fun PrezelVerticalDividerPreview() {
PreviewSection(
title = "PrezelDivider - Vertical",
description = "Divider는 두 요소 사이를 구분합니다.",
) {
PreviewValueRow(name = "DEFAULT", modifier = Modifier.height(100.dp)) {
PrezelVerticalDivider(type = PrezelDividerType.DEFAULT)
}
PreviewValueRow(name = "THICK", modifier = Modifier.height(100.dp)) {
PrezelVerticalDivider(type = PrezelDividerType.THICK)
}
}
}
Loading