Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
package com.hyunjung.core.presentation.designsystem.component

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.hyunjung.core.presentation.designsystem.CherrydanColors
import com.hyunjung.core.presentation.designsystem.CherrydanTheme
import com.hyunjung.core.presentation.designsystem.CherrydanTypography

enum class CherrydanButtonStyle(
val containerColor: Color,
val contentColor: Color,
val disabledContainerColor: Color,
val disabledContentColor: Color
) {
GRAY(
containerColor = CherrydanColors.Gray2,
contentColor = CherrydanColors.Gray5,
disabledContainerColor = CherrydanColors.Gray2,
disabledContentColor = CherrydanColors.Gray5
),
MAIN_PINK_2(
containerColor = CherrydanColors.MainPink2,
contentColor = CherrydanColors.White,
disabledContainerColor = CherrydanColors.MainPink1,
disabledContentColor = CherrydanColors.White
),
MAIN_PINK_3(
containerColor = CherrydanColors.MainPink3,
contentColor = CherrydanColors.White,
disabledContainerColor = CherrydanColors.MainPink1,
disabledContentColor = CherrydanColors.White
)
}

enum class CherrydanButtonShape(val cornerRadius: Dp) {
ROUNDED_SMALL(2.dp),
ROUNDED_MEDIUM(4.dp)
}

enum class CherrydanButtonSize {
SMALL,
BIG
}

@Composable
fun CherrydanDefaultButton(
text: String,
onClick: () -> Unit,
modifier: Modifier = Modifier,
style: CherrydanButtonStyle = CherrydanButtonStyle.GRAY,
shape: CherrydanButtonShape = CherrydanButtonShape.ROUNDED_SMALL,
size: CherrydanButtonSize = CherrydanButtonSize.BIG,
enabled: Boolean = true,
textStyle: TextStyle = CherrydanTypography.Main5_R
) {
Box(
modifier = when (size) {
CherrydanButtonSize.SMALL -> {
modifier
.height(36.dp)
.clip(RoundedCornerShape(shape.cornerRadius))
.background(if (enabled) style.containerColor else style.disabledContainerColor)
.clickable(enabled = enabled, onClick = onClick)
}

CherrydanButtonSize.BIG -> {
modifier
.fillMaxWidth()
.clip(RoundedCornerShape(shape.cornerRadius))
.background(if (enabled) style.containerColor else style.disabledContainerColor)
.clickable(enabled = enabled, onClick = onClick)
.padding(vertical = 15.dp)
}
},
contentAlignment = Alignment.Center
) {
Text(
text = text,
style = textStyle,
color = if (enabled) style.contentColor else style.disabledContentColor,
)
}
}

@Preview
@Composable
private fun CherrydanGrayButtonPreview() {
CherrydanTheme {
CherrydanDefaultButton(
text = "Default Button",
onClick = {},
modifier = Modifier.fillMaxWidth(),
shape = CherrydanButtonShape.ROUNDED_MEDIUM,
enabled = true
)
}
}

@Preview
@Composable
private fun CherrydanPinkButtonPreview() {
CherrydanTheme {
Column(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
CherrydanDefaultButton(
text = "Pink1 Button",
onClick = {},
modifier = Modifier.fillMaxWidth(),
style = CherrydanButtonStyle.MAIN_PINK_2,
shape = CherrydanButtonShape.ROUNDED_MEDIUM,
enabled = false
)
CherrydanDefaultButton(
text = "Pink2 Button",
onClick = {},
modifier = Modifier.fillMaxWidth(),
style = CherrydanButtonStyle.MAIN_PINK_2,
shape = CherrydanButtonShape.ROUNDED_MEDIUM,
enabled = true
)
CherrydanDefaultButton(
text = "Pink3 Button",
onClick = {},
modifier = Modifier.fillMaxWidth(),
style = CherrydanButtonStyle.MAIN_PINK_3,
shape = CherrydanButtonShape.ROUNDED_MEDIUM,
enabled = true
)
}
}
}

@Preview
@Composable
private fun CherrydanSmallButtonPreview() {
CherrydanTheme {
Column(
verticalArrangement = Arrangement.spacedBy(8.dp),
) {
CherrydanDefaultButton(
text = "Gray Button",
onClick = {},
modifier = Modifier,
style = CherrydanButtonStyle.GRAY,
shape = CherrydanButtonShape.ROUNDED_SMALL,
size = CherrydanButtonSize.SMALL,
enabled = true
)
CherrydanDefaultButton(
text = "Pink1 Button",
onClick = {},
modifier = Modifier,
style = CherrydanButtonStyle.MAIN_PINK_2,
shape = CherrydanButtonShape.ROUNDED_SMALL,
size = CherrydanButtonSize.SMALL,
enabled = false
)
CherrydanDefaultButton(
text = "Pink2 Button",
onClick = {},
modifier = Modifier,
style = CherrydanButtonStyle.MAIN_PINK_2,
shape = CherrydanButtonShape.ROUNDED_SMALL,
size = CherrydanButtonSize.SMALL,
enabled = true
)
CherrydanDefaultButton(
text = "Pink3 Button",
onClick = {},
modifier = Modifier,
style = CherrydanButtonStyle.MAIN_PINK_3,
shape = CherrydanButtonShape.ROUNDED_SMALL,
size = CherrydanButtonSize.SMALL,
enabled = true
)
}
}
}
17 changes: 17 additions & 0 deletions core/presentation/ui/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,21 @@
<string name="search_toast_keyword">키워드 알림을 추가했어요.</string>
<string name="search_toast_cannot_keyword_1">키워드 알림을 더이상 추가할 수 없어요.</string>
<string name="search_toast_cannot_keyword_2">(마이페이지 > 내 정보 > 키워드 알림)에서 확인해 주세요.</string>

<!-- My Page Screen -->
<string name="my_page_title">마이페이지</string>
<string name="my_page_greeting"> 체리님 안녕하세요</string>
<string name="my_page_customer_center">고객 센터</string>
<string name="my_page_notice">공지 사항</string>
<string name="my_page_inquiry">1:1 문의</string>
<string name="my_page_faq">자주 묻는 질문</string>
<string name="my_page_guide">이용 가이드</string>
<string name="my_page_service_setting">서비스 설정</string>
<string name="my_page_notification_setting">알림 설정</string>
<string name="my_page_version_info">버전 정보</string>
<string name="my_page_privacy_policy">개인정보 처리방침</string>
<string name="my_page_terms_and_conditions">이용약관</string>
<string name="my_page_management_policy">운영정책</string>
<string name="my_page_withdrawal">회원탈퇴</string>
<string name="my_page_logout">로그아웃</string>
</resources>
Loading