11package to.bitkit.ui.components
22
3+ import androidx.annotation.DrawableRes
4+ import androidx.compose.foundation.background
35import androidx.compose.foundation.layout.Arrangement
6+ import androidx.compose.foundation.layout.Box
47import androidx.compose.foundation.layout.Column
58import androidx.compose.foundation.layout.PaddingValues
6- import androidx.compose.foundation.layout.Spacer
79import androidx.compose.foundation.layout.fillMaxWidth
810import androidx.compose.foundation.layout.height
911import androidx.compose.foundation.layout.padding
1012import androidx.compose.foundation.layout.size
11- import androidx.compose.foundation.layout.width
13+ import androidx.compose.foundation.shape.CircleShape
1214import androidx.compose.material.icons.Icons
1315import androidx.compose.material.icons.filled.ContentPaste
1416import androidx.compose.material3.Button
1517import androidx.compose.material3.ButtonDefaults
1618import androidx.compose.material3.Icon
1719import androidx.compose.runtime.Composable
20+ import androidx.compose.ui.Alignment
1821import androidx.compose.ui.Modifier
1922import androidx.compose.ui.draw.alpha
23+ import androidx.compose.ui.draw.clip
2024import androidx.compose.ui.graphics.Color
25+ import androidx.compose.ui.graphics.painter.Painter
26+ import androidx.compose.ui.graphics.vector.ImageVector
2127import androidx.compose.ui.res.painterResource
2228import androidx.compose.ui.tooling.preview.Preview
29+ import androidx.compose.ui.unit.Dp
2330import androidx.compose.ui.unit.dp
2431import to.bitkit.R
25- import to.bitkit.ui.theme.AppShapes
2632import to.bitkit.ui.theme.AppThemeSurface
2733import to.bitkit.ui.theme.Colors
34+ import to.bitkit.ui.theme.Shapes
2835
2936@Composable
3037fun RectangleButton (
3138 label : String ,
32- icon : @Composable () -> Unit ,
3339 modifier : Modifier = Modifier ,
40+ @DrawableRes icon : Int? = null,
41+ imageVector : ImageVector ? = null,
42+ iconTint : Color = Colors .White ,
3443 enabled : Boolean = true,
44+ iconSize : Dp = 20.dp,
3545 onClick : () -> Unit = {},
3646) {
3747 Button (
3848 onClick = onClick,
3949 colors = ButtonDefaults .buttonColors(
40- containerColor = Colors .White10 ,
50+ containerColor = Colors .Gray6 ,
4151 ),
4252 enabled = enabled,
43- shape = AppShapes .small ,
44- contentPadding = PaddingValues (24 .dp),
53+ shape = Shapes .medium ,
54+ contentPadding = PaddingValues (horizontal = 16 .dp, vertical = 0 .dp),
4555 modifier = modifier
4656 .alpha(if (enabled) 1f else 0.5f )
4757 .height(80 .dp)
4858 .fillMaxWidth()
4959 ) {
50- icon()
51- Spacer (modifier = Modifier .width(16 .dp))
60+ icon?.let {
61+ CircularIcon (
62+ painter = painterResource(it),
63+ iconTint = iconTint,
64+ iconSize = iconSize
65+ )
66+ }
67+ imageVector?.let {
68+ CircularIcon (
69+ imageVector = it,
70+ iconTint = iconTint,
71+ iconSize = iconSize
72+ )
73+ }
74+ HorizontalSpacer (16 .dp)
5275 BodyMSB (text = label, color = Colors .White )
53- Spacer (modifier = Modifier .weight(1f ))
76+ FillWidth ()
77+ }
78+ }
79+
80+ @Composable
81+ private fun CircularIcon (
82+ iconTint : Color ,
83+ iconSize : Dp ,
84+ painter : Painter ? = null,
85+ imageVector : ImageVector ? = null,
86+ ) {
87+ Box (
88+ modifier = Modifier
89+ .clip(CircleShape )
90+ .size(40 .dp)
91+ .background(Colors .Black ),
92+ contentAlignment = Alignment .Center
93+ ) {
94+ when {
95+ painter != null -> Icon (
96+ painter = painter,
97+ contentDescription = null ,
98+ tint = iconTint,
99+ modifier = Modifier .size(iconSize),
100+ )
101+
102+ imageVector != null -> Icon (
103+ imageVector = imageVector,
104+ contentDescription = null ,
105+ tint = iconTint,
106+ modifier = Modifier .size(iconSize),
107+ )
108+ }
54109 }
55110}
56111
@@ -64,26 +119,14 @@ private fun RectangleButtonPreview() {
64119 ) {
65120 RectangleButton (
66121 label = " Button" ,
67- icon = {
68- Icon (
69- painter = painterResource(R .drawable.ic_scan),
70- contentDescription = null ,
71- tint = Color .Unspecified ,
72- modifier = Modifier .size(28 .dp),
73- )
74- }
122+ icon = R .drawable.ic_scan
75123 )
76124 RectangleButton (
77125 label = " Button Disabled" ,
78126 enabled = false ,
79- icon = {
80- Icon (
81- imageVector = Icons .Default .ContentPaste ,
82- contentDescription = null ,
83- tint = Colors .Brand ,
84- modifier = Modifier .size(28 .dp),
85- )
86- }
127+ icon = null ,
128+ iconTint = Colors .Purple ,
129+ imageVector = Icons .Default .ContentPaste ,
87130 )
88131 }
89132 }
0 commit comments