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+ }
0 commit comments