Skip to content

Commit 130fda0

Browse files
authored
merge refactor/#74-component -> develop
[Refactor/#74] Acon 2.0 컴포넌트
2 parents 18dbbc8 + da22f1c commit 130fda0

22 files changed

Lines changed: 895 additions & 30 deletions

File tree

core/designsystem/build.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,8 @@ plugins {
66

77
android {
88
namespace = "com.acon.acon.core.designsystem"
9+
}
10+
11+
dependencies {
12+
implementation(libs.lottie.compose)
913
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
package com.acon.acon.core.designsystem.component.button.v2
2+
3+
import androidx.compose.foundation.BorderStroke
4+
import androidx.compose.foundation.interaction.MutableInteractionSource
5+
import androidx.compose.foundation.layout.PaddingValues
6+
import androidx.compose.foundation.layout.RowScope
7+
import androidx.compose.foundation.layout.fillMaxWidth
8+
import androidx.compose.foundation.shape.RoundedCornerShape
9+
import androidx.compose.material3.Button
10+
import androidx.compose.material3.ButtonColors
11+
import androidx.compose.material3.ButtonDefaults
12+
import androidx.compose.material3.ButtonElevation
13+
import androidx.compose.material3.Text
14+
import androidx.compose.runtime.Composable
15+
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.graphics.Shape
17+
import androidx.compose.ui.text.font.FontWeight
18+
import androidx.compose.ui.tooling.preview.Preview
19+
import androidx.compose.ui.unit.dp
20+
import com.acon.acon.core.designsystem.blur.LocalHazeState
21+
import com.acon.acon.core.designsystem.blur.defaultHazeEffect
22+
import com.acon.acon.core.designsystem.component.loading.AconCircularProgressBar
23+
import com.acon.acon.core.designsystem.theme.AconTheme
24+
25+
@Composable
26+
fun AconFilledButton(
27+
onClick: () -> Unit,
28+
modifier: Modifier = Modifier,
29+
isLoading: Boolean = false,
30+
enabled: Boolean = true,
31+
shape: Shape = RoundedCornerShape(12.dp),
32+
colors: ButtonColors = ButtonDefaults.buttonColors(
33+
containerColor = AconTheme.color.GlassWhiteDefault,
34+
contentColor = AconTheme.color.White,
35+
disabledContainerColor = AconTheme.color.GlassWhiteDisabled,
36+
disabledContentColor = AconTheme.color.Gray300,
37+
),
38+
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
39+
border: BorderStroke? = null,
40+
contentPadding: PaddingValues = PaddingValues(vertical = 15.dp),
41+
interactionSource: MutableInteractionSource? = null,
42+
content: @Composable() (RowScope.() -> Unit)
43+
) {
44+
45+
Button(
46+
onClick = onClick,
47+
modifier = modifier.defaultHazeEffect(
48+
hazeState = LocalHazeState.current,
49+
tintColor = AconTheme.color.GlassWhiteDefault,
50+
),
51+
enabled = enabled,
52+
shape = shape,
53+
colors = colors,
54+
elevation = elevation,
55+
border = border,
56+
contentPadding = contentPadding,
57+
interactionSource = interactionSource,
58+
) {
59+
if (isLoading) {
60+
AconCircularProgressBar()
61+
} else {
62+
content()
63+
}
64+
}
65+
}
66+
67+
@Composable
68+
@Preview
69+
private fun AconFilledButtonPreview() {
70+
AconTheme {
71+
AconFilledButton(
72+
onClick = { },
73+
modifier = Modifier.fillMaxWidth(),
74+
) {
75+
Text(
76+
text = "Button",
77+
style = AconTheme.typography.Title4,
78+
fontWeight = FontWeight.SemiBold
79+
)
80+
}
81+
}
82+
}
83+
84+
@Composable
85+
@Preview
86+
private fun AconFilledButtonLoadingPreview() {
87+
AconTheme {
88+
AconFilledButton(
89+
onClick = { },
90+
modifier = Modifier.fillMaxWidth(),
91+
isLoading = true,
92+
) { }
93+
}
94+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.acon.acon.core.designsystem.component.button.v2
2+
3+
import androidx.compose.foundation.BorderStroke
4+
import androidx.compose.foundation.interaction.MutableInteractionSource
5+
import androidx.compose.foundation.layout.PaddingValues
6+
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.foundation.shape.RoundedCornerShape
8+
import androidx.compose.material3.ButtonColors
9+
import androidx.compose.material3.ButtonDefaults
10+
import androidx.compose.material3.ButtonElevation
11+
import androidx.compose.material3.Text
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.ui.Modifier
14+
import androidx.compose.ui.graphics.Shape
15+
import androidx.compose.ui.text.TextStyle
16+
import androidx.compose.ui.text.font.FontWeight
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import androidx.compose.ui.unit.dp
19+
import com.acon.acon.core.designsystem.theme.AconTheme
20+
21+
@Composable
22+
fun AconFilledTextButton(
23+
text: String,
24+
onClick: () -> Unit,
25+
modifier: Modifier = Modifier,
26+
textStyle: TextStyle = AconTheme.typography.Title4.copy(fontWeight = FontWeight.SemiBold),
27+
isLoading: Boolean = false,
28+
enabled: Boolean = true,
29+
shape: Shape = RoundedCornerShape(12.dp),
30+
colors: ButtonColors = ButtonDefaults.buttonColors(
31+
containerColor = AconTheme. color. GlassWhiteDefault,
32+
contentColor = AconTheme. color. White,
33+
disabledContainerColor = AconTheme. color. GlassWhiteDisabled,
34+
disabledContentColor = AconTheme. color. Gray300
35+
),
36+
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
37+
border: BorderStroke? = null,
38+
contentPadding: PaddingValues = PaddingValues(vertical = 15.dp),
39+
interactionSource: MutableInteractionSource? = null,
40+
) {
41+
AconFilledButton(
42+
onClick = onClick,
43+
modifier = modifier,
44+
isLoading = isLoading,
45+
enabled = enabled,
46+
shape = shape,
47+
colors = colors,
48+
elevation = elevation,
49+
border = border,
50+
contentPadding = contentPadding,
51+
interactionSource = interactionSource,
52+
) {
53+
Text(
54+
text = text,
55+
style = textStyle
56+
)
57+
}
58+
}
59+
60+
@Composable
61+
@Preview
62+
private fun PreviewAconFilledTextButton() {
63+
AconFilledTextButton(
64+
text = "Text Button",
65+
onClick = { },
66+
modifier = Modifier.fillMaxWidth(),
67+
isLoading = false,
68+
)
69+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package com.acon.acon.core.designsystem.component.button.v2
2+
3+
import androidx.compose.foundation.BorderStroke
4+
import androidx.compose.foundation.interaction.MutableInteractionSource
5+
import androidx.compose.foundation.layout.PaddingValues
6+
import androidx.compose.foundation.layout.RowScope
7+
import androidx.compose.foundation.shape.CircleShape
8+
import androidx.compose.material3.Button
9+
import androidx.compose.material3.ButtonColors
10+
import androidx.compose.material3.ButtonDefaults
11+
import androidx.compose.material3.ButtonElevation
12+
import androidx.compose.material3.Text
13+
import androidx.compose.runtime.Composable
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.graphics.Color
16+
import androidx.compose.ui.graphics.Shape
17+
import androidx.compose.ui.text.font.FontWeight
18+
import androidx.compose.ui.tooling.preview.Preview
19+
import androidx.compose.ui.unit.dp
20+
import com.acon.acon.core.designsystem.blur.LocalHazeState
21+
import com.acon.acon.core.designsystem.blur.defaultHazeEffect
22+
import com.acon.acon.core.designsystem.component.loading.AconCircularProgressBar
23+
import com.acon.acon.core.designsystem.theme.AconTheme
24+
25+
@Composable
26+
fun AconOutlinedButton(
27+
onClick: () -> Unit,
28+
modifier: Modifier = Modifier,
29+
isLoading: Boolean = false,
30+
enabled: Boolean = true,
31+
shape: Shape = CircleShape,
32+
colors: ButtonColors = ButtonDefaults.buttonColors(
33+
containerColor = Color.Transparent,
34+
contentColor = AconTheme.color.White,
35+
disabledContainerColor = AconTheme.color.GlassWhiteDisabled,
36+
disabledContentColor = Color.Transparent,
37+
),
38+
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
39+
border: BorderStroke = if (enabled) BorderStroke(
40+
width = 1.dp,
41+
color = AconTheme.color.GlassWhiteDefault,
42+
) else BorderStroke(
43+
width = 1.dp,
44+
color = AconTheme.color.GlassWhiteDisabled,
45+
),
46+
contentPadding: PaddingValues = PaddingValues(vertical = 12.dp, horizontal = 46.dp),
47+
interactionSource: MutableInteractionSource? = null,
48+
content: @Composable() (RowScope.() -> Unit)
49+
) {
50+
51+
Button(
52+
onClick = onClick,
53+
modifier = modifier.defaultHazeEffect(
54+
hazeState = LocalHazeState.current,
55+
tintColor = AconTheme.color.GlassWhiteDefault,
56+
),
57+
enabled = enabled,
58+
shape = shape,
59+
colors = colors,
60+
elevation = elevation,
61+
border = border,
62+
contentPadding = contentPadding,
63+
interactionSource = interactionSource,
64+
) {
65+
if (isLoading) {
66+
AconCircularProgressBar()
67+
} else {
68+
content()
69+
}
70+
}
71+
}
72+
73+
@Composable
74+
@Preview
75+
private fun AconOutlinedButtonPreview() {
76+
AconOutlinedButton(
77+
onClick = { },
78+
isLoading = false,
79+
content = {
80+
Text(
81+
text = "Button",
82+
style = AconTheme.typography.Body1,
83+
fontWeight = FontWeight.SemiBold
84+
)
85+
}
86+
)
87+
}
88+
89+
@Composable
90+
@Preview
91+
private fun AconOutlinedButtonLoadingPreview() {
92+
AconOutlinedButton(
93+
onClick = { },
94+
isLoading = true,
95+
content = {}
96+
)
97+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.acon.acon.core.designsystem.component.button.v2
2+
3+
import androidx.compose.foundation.BorderStroke
4+
import androidx.compose.foundation.interaction.MutableInteractionSource
5+
import androidx.compose.foundation.layout.PaddingValues
6+
import androidx.compose.foundation.layout.fillMaxWidth
7+
import androidx.compose.foundation.shape.CircleShape
8+
import androidx.compose.foundation.shape.RoundedCornerShape
9+
import androidx.compose.material3.ButtonColors
10+
import androidx.compose.material3.ButtonDefaults
11+
import androidx.compose.material3.ButtonElevation
12+
import androidx.compose.material3.Text
13+
import androidx.compose.runtime.Composable
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.graphics.Color
16+
import androidx.compose.ui.graphics.Shape
17+
import androidx.compose.ui.text.TextStyle
18+
import androidx.compose.ui.text.font.FontWeight
19+
import androidx.compose.ui.tooling.preview.Preview
20+
import androidx.compose.ui.unit.dp
21+
import com.acon.acon.core.designsystem.theme.AconTheme
22+
23+
@Composable
24+
fun AconOutlinedTextButton(
25+
text: String,
26+
onClick: () -> Unit,
27+
modifier: Modifier = Modifier,
28+
textStyle: TextStyle = AconTheme.typography.Title4.copy(fontWeight = FontWeight.SemiBold),
29+
isLoading: Boolean = false,
30+
enabled: Boolean = true,
31+
shape: Shape = CircleShape,
32+
colors: ButtonColors = ButtonDefaults.buttonColors(
33+
containerColor = Color.Transparent,
34+
contentColor = AconTheme.color.White,
35+
disabledContainerColor = AconTheme.color.GlassWhiteDisabled,
36+
disabledContentColor = Color.Transparent,
37+
),
38+
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
39+
border: BorderStroke = if (enabled) BorderStroke(
40+
width = 1.dp,
41+
color = AconTheme.color.GlassWhiteDefault,
42+
) else BorderStroke(
43+
width = 1.dp,
44+
color = AconTheme.color.GlassWhiteDisabled,
45+
),
46+
contentPadding: PaddingValues = PaddingValues(vertical = 12.dp, horizontal = 46.dp),
47+
interactionSource: MutableInteractionSource? = null,
48+
) {
49+
AconOutlinedButton (
50+
onClick = onClick,
51+
modifier = modifier,
52+
isLoading = isLoading,
53+
enabled = enabled,
54+
shape = shape,
55+
colors = colors,
56+
elevation = elevation,
57+
border = border,
58+
contentPadding = contentPadding,
59+
interactionSource = interactionSource,
60+
) {
61+
Text(
62+
text = text,
63+
style = textStyle
64+
)
65+
}
66+
}
67+
68+
@Composable
69+
@Preview
70+
private fun PreviewAconFilledTextButton() {
71+
AconOutlinedTextButton(
72+
text = "Text Button",
73+
onClick = { },
74+
modifier = Modifier.fillMaxWidth(),
75+
isLoading = false,
76+
)
77+
}

0 commit comments

Comments
 (0)