@momo-kits/native-kits 0.157.1-test.2-debug → 0.157.1-test.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/build.gradle.kts +0 -11
- package/compose/build.gradle.kts +0 -180
- package/compose/build.gradle.kts.backup +0 -180
- package/compose/compose.podspec +0 -54
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -103
- package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
- package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -57
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -107
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -201
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -222
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -48
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -305
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -720
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -121
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -405
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -85
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -340
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -340
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -94
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -136
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -543
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -148
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -188
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -116
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -450
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -172
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -255
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -232
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -233
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -254
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -241
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -364
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -92
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -352
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -103
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -70
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -96
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -96
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -92
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -130
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -214
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -576
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -177
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -205
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -239
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -191
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -306
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -13
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -186
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -285
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -35
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -59
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -68
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -14
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -50
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -239
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -119
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -98
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -161
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -331
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -497
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -162
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -243
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -187
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -279
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -80
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -306
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -32
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -370
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -42
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -21
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -88
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -149
- package/gradle/libs.versions.toml +0 -57
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +0 -8
- package/gradle.properties +0 -26
- package/gradlew +0 -252
- package/gradlew.bat +0 -94
- package/local.properties +0 -8
- package/settings.gradle.kts +0 -52
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.background
|
|
4
|
-
import androidx.compose.foundation.border
|
|
5
|
-
import androidx.compose.foundation.layout.Box
|
|
6
|
-
import androidx.compose.foundation.layout.size
|
|
7
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
8
|
-
import androidx.compose.runtime.Composable
|
|
9
|
-
import androidx.compose.ui.Modifier
|
|
10
|
-
import androidx.compose.ui.unit.dp
|
|
11
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
12
|
-
import vn.momo.kits.const.Colors
|
|
13
|
-
import vn.momo.kits.const.Radius
|
|
14
|
-
import vn.momo.kits.modifier.conditional
|
|
15
|
-
|
|
16
|
-
enum class DotSize(val size: Int) {
|
|
17
|
-
Small(10),
|
|
18
|
-
Large(16)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
@Composable
|
|
22
|
-
fun BadgeDot(size: DotSize = DotSize.Large, modifier: Modifier = Modifier) {
|
|
23
|
-
Box(
|
|
24
|
-
modifier = modifier
|
|
25
|
-
.size(size.size.dp)
|
|
26
|
-
.border(width = 1.dp, color = Colors.black_01, shape = RoundedCornerShape(Radius.S))
|
|
27
|
-
.background(color = Colors.red_03, shape = RoundedCornerShape(Radius.S))
|
|
28
|
-
.conditional(IsShowBaseLineDebug) {
|
|
29
|
-
border(1.dp, Colors.blue_03)
|
|
30
|
-
}
|
|
31
|
-
)
|
|
32
|
-
}
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.Canvas
|
|
4
|
-
import androidx.compose.foundation.background
|
|
5
|
-
import androidx.compose.foundation.border
|
|
6
|
-
import androidx.compose.foundation.layout.Box
|
|
7
|
-
import androidx.compose.foundation.layout.Row
|
|
8
|
-
import androidx.compose.foundation.layout.height
|
|
9
|
-
import androidx.compose.foundation.layout.padding
|
|
10
|
-
import androidx.compose.foundation.layout.size
|
|
11
|
-
import androidx.compose.foundation.layout.width
|
|
12
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
13
|
-
import androidx.compose.runtime.Composable
|
|
14
|
-
import androidx.compose.runtime.remember
|
|
15
|
-
import androidx.compose.ui.Alignment
|
|
16
|
-
import androidx.compose.ui.Modifier
|
|
17
|
-
import androidx.compose.ui.geometry.CornerRadius
|
|
18
|
-
import androidx.compose.ui.geometry.Offset
|
|
19
|
-
import androidx.compose.ui.geometry.Rect
|
|
20
|
-
import androidx.compose.ui.geometry.RoundRect
|
|
21
|
-
import androidx.compose.ui.geometry.Size
|
|
22
|
-
import androidx.compose.ui.graphics.Color
|
|
23
|
-
import androidx.compose.ui.graphics.Path
|
|
24
|
-
import androidx.compose.ui.graphics.graphicsLayer
|
|
25
|
-
import androidx.compose.ui.layout.ContentScale
|
|
26
|
-
import androidx.compose.ui.platform.LocalDensity
|
|
27
|
-
import androidx.compose.ui.text.rememberTextMeasurer
|
|
28
|
-
import androidx.compose.ui.text.style.TextAlign
|
|
29
|
-
import androidx.compose.ui.text.style.TextOverflow
|
|
30
|
-
import androidx.compose.ui.unit.Dp
|
|
31
|
-
import androidx.compose.ui.unit.dp
|
|
32
|
-
import androidx.compose.ui.unit.sp
|
|
33
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
34
|
-
import vn.momo.kits.const.AppTheme
|
|
35
|
-
import vn.momo.kits.const.Colors
|
|
36
|
-
import vn.momo.kits.const.Typography
|
|
37
|
-
import vn.momo.kits.const.getFontFamily
|
|
38
|
-
import vn.momo.kits.const.scaleSize
|
|
39
|
-
import vn.momo.kits.modifier.conditional
|
|
40
|
-
|
|
41
|
-
@Composable
|
|
42
|
-
fun BadgeRibbon(
|
|
43
|
-
position: RibbonPosition = RibbonPosition.TopRight,
|
|
44
|
-
label: String = "Label",
|
|
45
|
-
isRound: Boolean = false,
|
|
46
|
-
modifier: Modifier = Modifier,
|
|
47
|
-
) {
|
|
48
|
-
val theme = AppTheme.current
|
|
49
|
-
|
|
50
|
-
val rotate = if (position == RibbonPosition.TopRight || position == RibbonPosition.BottomRight) 180f else 0f
|
|
51
|
-
val useUpTail = position == RibbonPosition.BottomLeft || position == RibbonPosition.TopRight
|
|
52
|
-
val verticalAlignment = when(position){
|
|
53
|
-
RibbonPosition.TopLeft, RibbonPosition.BottomRight -> Alignment.Top
|
|
54
|
-
RibbonPosition.BottomLeft, RibbonPosition.TopRight -> Alignment.Bottom
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
Row(
|
|
58
|
-
modifier = modifier
|
|
59
|
-
.height(ribbonHeight)
|
|
60
|
-
.conditional(IsShowBaseLineDebug) {
|
|
61
|
-
border(1.dp, Colors.blue_03)
|
|
62
|
-
}
|
|
63
|
-
.graphicsLayer { rotationZ = rotate },
|
|
64
|
-
verticalAlignment = verticalAlignment
|
|
65
|
-
) {
|
|
66
|
-
if (useUpTail) {
|
|
67
|
-
UpTail()
|
|
68
|
-
} else {
|
|
69
|
-
DownTail()
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (isRound) {
|
|
73
|
-
renderRoundContent(label, rotate, theme.colors.warning.primary)
|
|
74
|
-
} else {
|
|
75
|
-
renderSkewContent(label, rotate, theme.colors.warning.primary)
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
@Composable
|
|
81
|
-
internal fun renderRoundContent(label: String, rotate: Float, backgroundColor: Color){
|
|
82
|
-
Box(
|
|
83
|
-
modifier = Modifier
|
|
84
|
-
.height(roundHeight)
|
|
85
|
-
.background(
|
|
86
|
-
color = backgroundColor,
|
|
87
|
-
shape = RoundedCornerShape(
|
|
88
|
-
topEnd = roundRightRadius,
|
|
89
|
-
bottomEnd = roundRightRadius,
|
|
90
|
-
)
|
|
91
|
-
)
|
|
92
|
-
.padding(end = roundPaddingEnd),
|
|
93
|
-
contentAlignment = Alignment.Center,
|
|
94
|
-
) {
|
|
95
|
-
Label(label, rotate)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
@Composable
|
|
100
|
-
internal fun renderSkewContent(label: String, rotate: Float, backgroundColor: Color){
|
|
101
|
-
Box(
|
|
102
|
-
modifier = Modifier
|
|
103
|
-
.height(skewBodyHeight)
|
|
104
|
-
.background(backgroundColor),
|
|
105
|
-
contentAlignment = Alignment.Center
|
|
106
|
-
) {
|
|
107
|
-
Label(label, rotate)
|
|
108
|
-
}
|
|
109
|
-
RightTail()
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
@Composable
|
|
113
|
-
internal fun Label(label: String, rotate: Float){
|
|
114
|
-
Text(
|
|
115
|
-
text = label,
|
|
116
|
-
color = Colors.black_01,
|
|
117
|
-
maxLines = 1,
|
|
118
|
-
overflow = TextOverflow.Ellipsis,
|
|
119
|
-
style = Typography.labelXsMedium,
|
|
120
|
-
modifier = Modifier.graphicsLayer { rotationZ = rotate }
|
|
121
|
-
)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
@Composable
|
|
125
|
-
internal fun UpTail() {
|
|
126
|
-
Image(
|
|
127
|
-
source = "https://static.momocdn.net/app/img/kits/utils/Head_down_4x.png",
|
|
128
|
-
modifier = Modifier
|
|
129
|
-
.graphicsLayer { rotationZ = 180f }
|
|
130
|
-
.width(headTailWidth)
|
|
131
|
-
.height(headTailHeight),
|
|
132
|
-
options = Options(
|
|
133
|
-
contentScale = ContentScale.FillBounds,
|
|
134
|
-
)
|
|
135
|
-
)
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
@Composable
|
|
139
|
-
internal fun DownTail() {
|
|
140
|
-
Image(
|
|
141
|
-
source = "https://static.momocdn.net/app/img/kits/utils/Head_4x.png",
|
|
142
|
-
modifier = Modifier
|
|
143
|
-
.width(headTailWidth)
|
|
144
|
-
.height(headTailHeight),
|
|
145
|
-
options = Options(
|
|
146
|
-
contentScale = ContentScale.FillBounds,
|
|
147
|
-
)
|
|
148
|
-
)
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
@Composable
|
|
152
|
-
internal fun RightTail() {
|
|
153
|
-
Image(
|
|
154
|
-
source = "https://static.momocdn.net/app/img/kits/utils/Tail_4x.png",
|
|
155
|
-
modifier = Modifier
|
|
156
|
-
.width(skewTailWidth)
|
|
157
|
-
.height(skewTailHeight),
|
|
158
|
-
options = Options(
|
|
159
|
-
contentScale = ContentScale.FillBounds,
|
|
160
|
-
)
|
|
161
|
-
)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
@Composable
|
|
165
|
-
fun RoundedBadgeRibbon(
|
|
166
|
-
text: String = "Label",
|
|
167
|
-
position: RibbonPosition = RibbonPosition.TopLeft,
|
|
168
|
-
modifier: Modifier = Modifier
|
|
169
|
-
) {
|
|
170
|
-
val theme = AppTheme.current
|
|
171
|
-
val density = LocalDensity.current
|
|
172
|
-
val style = Typography.labelXsMedium
|
|
173
|
-
val fontFamily = style.fontFamily
|
|
174
|
-
|
|
175
|
-
val scaledFontSize = scaleSize(style.fontSize.value).sp
|
|
176
|
-
val fontFamilyResult = getFontFamily(fontFamily?.toString() ?: theme.font, style.fontWeight)
|
|
177
|
-
|
|
178
|
-
val fontSize = remember(scaledFontSize) { scaledFontSize }
|
|
179
|
-
val font = remember(fontFamilyResult) { fontFamilyResult }
|
|
180
|
-
val textMeasurer = rememberTextMeasurer()
|
|
181
|
-
|
|
182
|
-
val textLayoutResult = remember(text, fontSize, font) {
|
|
183
|
-
textMeasurer.measure(
|
|
184
|
-
text = text,
|
|
185
|
-
style = style.copy(fontSize = fontSize, fontFamily = font)
|
|
186
|
-
)
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
val textWidth = with(density) { textLayoutResult.size.width.toDp() }
|
|
190
|
-
val textHeight = with(density) { textLayoutResult.size.height.toDp() }
|
|
191
|
-
|
|
192
|
-
val minRibbonHeight = (textHeight * 1.2f).coerceAtLeast(16.dp)
|
|
193
|
-
val paddingBottom = minRibbonHeight / 4f
|
|
194
|
-
val badgeHeight = minRibbonHeight + paddingBottom
|
|
195
|
-
val horizontalPadding = paddingBottom
|
|
196
|
-
val badgeWidth = (textWidth + horizontalPadding * 2).coerceAtLeast(28.dp)
|
|
197
|
-
|
|
198
|
-
val (rotateZ, scaleY, scaleX) = when (position) {
|
|
199
|
-
RibbonPosition.TopLeft -> Triple(0f, 1f, -1f)
|
|
200
|
-
RibbonPosition.TopRight -> Triple(0f, 1f, 1f)
|
|
201
|
-
RibbonPosition.BottomRight -> Triple(0f, -1f, 1f)
|
|
202
|
-
RibbonPosition.BottomLeft -> Triple(0f, -1f, -1f)
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
Box(
|
|
206
|
-
modifier = modifier
|
|
207
|
-
.size(width = badgeWidth, height = badgeHeight)
|
|
208
|
-
.graphicsLayer {
|
|
209
|
-
rotationZ = rotateZ
|
|
210
|
-
this.scaleY = scaleY
|
|
211
|
-
this.scaleX = scaleX
|
|
212
|
-
}
|
|
213
|
-
) {
|
|
214
|
-
val roundedRect = (badgeHeight - paddingBottom) / 2f
|
|
215
|
-
|
|
216
|
-
Canvas(modifier = Modifier.matchParentSize()) {
|
|
217
|
-
val width = size.width
|
|
218
|
-
val height = size.height
|
|
219
|
-
val ribbonHeight = height - paddingBottom.toPx()
|
|
220
|
-
val cornerRadius = roundedRect.toPx()
|
|
221
|
-
|
|
222
|
-
val mainColor = Color(0xFFFA541C)
|
|
223
|
-
val tailColor = Color(0xFFC41B24)
|
|
224
|
-
|
|
225
|
-
val headWidth = 4.dp.toPx()
|
|
226
|
-
val leftSectionWidth = width * (9f / 28f)
|
|
227
|
-
val middleSectionWidth = width - leftSectionWidth - headWidth
|
|
228
|
-
val rightX = leftSectionWidth + middleSectionWidth
|
|
229
|
-
|
|
230
|
-
// 1. Tail + 2. BG
|
|
231
|
-
val leftMiddlePath = Path().apply {
|
|
232
|
-
addRoundRect(
|
|
233
|
-
RoundRect(
|
|
234
|
-
rect = Rect(
|
|
235
|
-
left = 0f,
|
|
236
|
-
top = 0f,
|
|
237
|
-
right = rightX + 1f,
|
|
238
|
-
bottom = ribbonHeight
|
|
239
|
-
),
|
|
240
|
-
topLeft = CornerRadius(cornerRadius, cornerRadius),
|
|
241
|
-
topRight = CornerRadius.Zero,
|
|
242
|
-
bottomRight = CornerRadius.Zero,
|
|
243
|
-
bottomLeft = CornerRadius(cornerRadius, cornerRadius)
|
|
244
|
-
)
|
|
245
|
-
)
|
|
246
|
-
}
|
|
247
|
-
drawPath(
|
|
248
|
-
path = leftMiddlePath,
|
|
249
|
-
color = mainColor
|
|
250
|
-
)
|
|
251
|
-
|
|
252
|
-
// 3. Head
|
|
253
|
-
val headPath = Path().apply {
|
|
254
|
-
addRoundRect(
|
|
255
|
-
RoundRect(
|
|
256
|
-
rect = Rect(
|
|
257
|
-
left = rightX,
|
|
258
|
-
top = 0f,
|
|
259
|
-
right = rightX + headWidth,
|
|
260
|
-
bottom = ribbonHeight
|
|
261
|
-
),
|
|
262
|
-
topLeft = CornerRadius.Zero,
|
|
263
|
-
topRight = CornerRadius(cornerRadius, cornerRadius),
|
|
264
|
-
bottomRight = CornerRadius.Zero,
|
|
265
|
-
bottomLeft = CornerRadius.Zero
|
|
266
|
-
)
|
|
267
|
-
)
|
|
268
|
-
}
|
|
269
|
-
drawPath(
|
|
270
|
-
path = headPath,
|
|
271
|
-
color = mainColor
|
|
272
|
-
)
|
|
273
|
-
|
|
274
|
-
// Draw bottom tail section
|
|
275
|
-
val tailY = ribbonHeight
|
|
276
|
-
val tailHeight = paddingBottom.toPx()
|
|
277
|
-
val halfHeadWidth = headWidth / 2f
|
|
278
|
-
val tailStartX = rightX + headWidth - halfHeadWidth
|
|
279
|
-
|
|
280
|
-
// Background square (main color)
|
|
281
|
-
drawRect(
|
|
282
|
-
color = mainColor,
|
|
283
|
-
topLeft = Offset(tailStartX, tailY),
|
|
284
|
-
size = Size(halfHeadWidth, halfHeadWidth)
|
|
285
|
-
)
|
|
286
|
-
|
|
287
|
-
val tailRoundRadius = tailHeight
|
|
288
|
-
val tailRightPath = Path().apply {
|
|
289
|
-
addRoundRect(
|
|
290
|
-
RoundRect(
|
|
291
|
-
rect = Rect(
|
|
292
|
-
left = tailStartX,
|
|
293
|
-
top = tailY,
|
|
294
|
-
right = tailStartX + halfHeadWidth,
|
|
295
|
-
bottom = tailY + tailHeight
|
|
296
|
-
),
|
|
297
|
-
topLeft = CornerRadius.Zero,
|
|
298
|
-
topRight = CornerRadius(tailRoundRadius, tailRoundRadius),
|
|
299
|
-
bottomRight = CornerRadius(tailRoundRadius, tailRoundRadius),
|
|
300
|
-
bottomLeft = CornerRadius.Zero
|
|
301
|
-
)
|
|
302
|
-
)
|
|
303
|
-
}
|
|
304
|
-
drawPath(
|
|
305
|
-
path = tailRightPath,
|
|
306
|
-
color = tailColor
|
|
307
|
-
)
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
Text(
|
|
311
|
-
text = text,
|
|
312
|
-
modifier = Modifier
|
|
313
|
-
.padding(bottom = paddingBottom)
|
|
314
|
-
.padding(horizontal = paddingBottom / 2)
|
|
315
|
-
.align(Alignment.Center)
|
|
316
|
-
.graphicsLayer {
|
|
317
|
-
rotationZ = rotateZ
|
|
318
|
-
this.scaleY = scaleY
|
|
319
|
-
this.scaleX = scaleX
|
|
320
|
-
},
|
|
321
|
-
textAlign = TextAlign.Center,
|
|
322
|
-
style = Typography.labelXsMedium,
|
|
323
|
-
maxLines = 1,
|
|
324
|
-
overflow = TextOverflow.Ellipsis,
|
|
325
|
-
color = Colors.black_01
|
|
326
|
-
)
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
internal val ribbonHeight: Dp = 20.dp
|
|
331
|
-
internal val roundHeight: Dp = 16.dp
|
|
332
|
-
internal val skewBodyHeight: Dp = 16.dp
|
|
333
|
-
internal val roundRightRadius: Dp = 12.dp
|
|
334
|
-
internal val roundPaddingEnd: Dp = 6.dp
|
|
335
|
-
internal val skewTailWidth: Dp = 8.dp
|
|
336
|
-
internal val skewTailHeight: Dp = 16.dp
|
|
337
|
-
internal val headTailWidth: Dp = 5.dp
|
|
338
|
-
internal val headTailHeight: Dp = 20.dp
|
|
339
|
-
|
|
340
|
-
enum class RibbonPosition {TopLeft, TopRight, BottomLeft, BottomRight}
|
|
@@ -1,340 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.animation.core.animateDpAsState
|
|
4
|
-
import androidx.compose.animation.core.animateFloatAsState
|
|
5
|
-
import androidx.compose.animation.core.tween
|
|
6
|
-
import androidx.compose.foundation.background
|
|
7
|
-
import androidx.compose.foundation.border
|
|
8
|
-
import androidx.compose.foundation.clickable
|
|
9
|
-
import androidx.compose.foundation.interaction.MutableInteractionSource
|
|
10
|
-
import androidx.compose.foundation.interaction.collectIsPressedAsState
|
|
11
|
-
import androidx.compose.foundation.layout.Arrangement
|
|
12
|
-
import androidx.compose.foundation.layout.Box
|
|
13
|
-
import androidx.compose.foundation.layout.Row
|
|
14
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
15
|
-
import androidx.compose.foundation.layout.height
|
|
16
|
-
import androidx.compose.foundation.layout.padding
|
|
17
|
-
import androidx.compose.foundation.layout.size
|
|
18
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
19
|
-
import androidx.compose.runtime.Composable
|
|
20
|
-
import androidx.compose.runtime.getValue
|
|
21
|
-
import androidx.compose.runtime.remember
|
|
22
|
-
import androidx.compose.ui.Alignment
|
|
23
|
-
import androidx.compose.ui.Modifier
|
|
24
|
-
import androidx.compose.ui.draw.alpha
|
|
25
|
-
import androidx.compose.ui.draw.clip
|
|
26
|
-
import androidx.compose.ui.graphics.Color
|
|
27
|
-
import androidx.compose.ui.text.TextStyle
|
|
28
|
-
import androidx.compose.ui.text.style.TextOverflow
|
|
29
|
-
import androidx.compose.ui.unit.Dp
|
|
30
|
-
import androidx.compose.ui.unit.dp
|
|
31
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
32
|
-
import vn.momo.kits.const.AppTheme
|
|
33
|
-
import vn.momo.kits.const.Colors
|
|
34
|
-
import vn.momo.kits.const.Radius
|
|
35
|
-
import vn.momo.kits.const.Spacing
|
|
36
|
-
import vn.momo.kits.const.Typography
|
|
37
|
-
import vn.momo.kits.modifier.conditional
|
|
38
|
-
import vn.momo.kits.platform.LottieAnimation
|
|
39
|
-
|
|
40
|
-
enum class ButtonType {
|
|
41
|
-
PRIMARY,
|
|
42
|
-
SECONDARY,
|
|
43
|
-
TONAL,
|
|
44
|
-
OUTLINE,
|
|
45
|
-
DANGER,
|
|
46
|
-
TEXT,
|
|
47
|
-
DISABLED
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
data class ButtonSpecs(
|
|
51
|
-
val height: Dp,
|
|
52
|
-
val radius: Dp,
|
|
53
|
-
val padding: Dp,
|
|
54
|
-
val width: Dp,
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
enum class Size(val value: ButtonSpecs) {
|
|
58
|
-
LARGE(
|
|
59
|
-
ButtonSpecs(
|
|
60
|
-
height = 48.dp,
|
|
61
|
-
radius = Radius.S,
|
|
62
|
-
padding = Spacing.L,
|
|
63
|
-
width = 128.dp
|
|
64
|
-
)
|
|
65
|
-
),
|
|
66
|
-
MEDIUM(
|
|
67
|
-
ButtonSpecs(
|
|
68
|
-
height = 36.dp,
|
|
69
|
-
radius = Radius.S,
|
|
70
|
-
padding = Spacing.M,
|
|
71
|
-
width = 80.dp
|
|
72
|
-
)
|
|
73
|
-
),
|
|
74
|
-
SMALL(
|
|
75
|
-
ButtonSpecs(
|
|
76
|
-
height = 28.dp,
|
|
77
|
-
radius = Radius.S,
|
|
78
|
-
padding = Spacing.S,
|
|
79
|
-
width = 60.dp
|
|
80
|
-
)
|
|
81
|
-
)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
private val styleCache = mapOf(
|
|
85
|
-
Size.LARGE to Typography.actionDefaultBold,
|
|
86
|
-
Size.MEDIUM to Typography.actionSBold,
|
|
87
|
-
Size.SMALL to Typography.actionXsBold
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
private val iconSizeCache = mapOf(
|
|
91
|
-
Size.LARGE to 24.dp,
|
|
92
|
-
Size.MEDIUM to 16.dp,
|
|
93
|
-
Size.SMALL to 16.dp
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
private val iconSpaceCache = mapOf(
|
|
97
|
-
Size.SMALL to Spacing.XS,
|
|
98
|
-
Size.MEDIUM to Spacing.S,
|
|
99
|
-
Size.LARGE to Spacing.S
|
|
100
|
-
)
|
|
101
|
-
|
|
102
|
-
internal fun getStyle(size: Size): TextStyle {
|
|
103
|
-
return styleCache[size] ?: Typography.actionDefaultBold
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
internal fun getIconSize(size: Size): Dp = iconSizeCache[size] ?: 24.dp
|
|
107
|
-
internal fun getIconSpace(size: Size): Dp = iconSpaceCache[size] ?: Spacing.S
|
|
108
|
-
|
|
109
|
-
@Composable
|
|
110
|
-
internal fun getTextColor(loading: Boolean, type: ButtonType): Color {
|
|
111
|
-
val theme = AppTheme.current
|
|
112
|
-
|
|
113
|
-
return remember(type, theme, loading) {
|
|
114
|
-
when (type) {
|
|
115
|
-
ButtonType.DISABLED -> theme.colors.text.disable
|
|
116
|
-
ButtonType.PRIMARY -> Colors.black_01
|
|
117
|
-
ButtonType.SECONDARY -> theme.colors.text.default
|
|
118
|
-
ButtonType.OUTLINE -> theme.colors.primary
|
|
119
|
-
ButtonType.TONAL -> theme.colors.primary
|
|
120
|
-
ButtonType.DANGER -> Colors.black_01
|
|
121
|
-
ButtonType.TEXT -> theme.colors.primary
|
|
122
|
-
}.withLoading(loading)
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
@Composable
|
|
127
|
-
internal fun RenderTitle(size: Size, title: String = "", textColor: Color) {
|
|
128
|
-
val style = remember(size) { getStyle(size) }
|
|
129
|
-
Text(
|
|
130
|
-
style = style,
|
|
131
|
-
text = title,
|
|
132
|
-
color = textColor,
|
|
133
|
-
overflow = TextOverflow.Ellipsis,
|
|
134
|
-
maxLines = 1
|
|
135
|
-
)
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
//TODO add internal
|
|
139
|
-
@Composable
|
|
140
|
-
fun RenderIcon(
|
|
141
|
-
size: Size,
|
|
142
|
-
isIconLeft: Boolean,
|
|
143
|
-
useTintColor: Boolean = true,
|
|
144
|
-
icon: String = "",
|
|
145
|
-
forceLoading: Boolean = false,
|
|
146
|
-
bgColor: Color? = null,
|
|
147
|
-
textColor: Color? = null,
|
|
148
|
-
) {
|
|
149
|
-
val iconSize = remember(size) { getIconSize(size) }
|
|
150
|
-
val margin = remember(size) { getIconSpace(size) }
|
|
151
|
-
val color = if (useTintColor) textColor else Color.Unspecified
|
|
152
|
-
|
|
153
|
-
val modifier = Modifier.padding(
|
|
154
|
-
start = if (isIconLeft) 0.dp else margin,
|
|
155
|
-
end = if (isIconLeft) margin else 0.dp
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
if (forceLoading) {
|
|
159
|
-
Box(modifier) {
|
|
160
|
-
LottieAnimation(
|
|
161
|
-
modifier = Modifier.size(iconSize),
|
|
162
|
-
bgColor = bgColor,
|
|
163
|
-
tintColor = color,
|
|
164
|
-
path = "files/lottie_circle_loader"
|
|
165
|
-
)
|
|
166
|
-
}
|
|
167
|
-
} else if (icon.isNotEmpty()) {
|
|
168
|
-
Icon(
|
|
169
|
-
source = icon,
|
|
170
|
-
color = color,
|
|
171
|
-
size = iconSize,
|
|
172
|
-
modifier = modifier
|
|
173
|
-
)
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
private fun shouldLoadingOnLeft(iconLeft: String, iconRight: String): Boolean {
|
|
178
|
-
val hasLeft = iconLeft.isNotEmpty()
|
|
179
|
-
val hasRight = iconRight.isNotEmpty()
|
|
180
|
-
return when {
|
|
181
|
-
!hasLeft && !hasRight -> true
|
|
182
|
-
hasLeft && !hasRight -> true
|
|
183
|
-
!hasLeft && hasRight -> false
|
|
184
|
-
hasLeft && hasRight -> false
|
|
185
|
-
else -> true
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
@Composable
|
|
190
|
-
internal fun getTypeStyle(
|
|
191
|
-
type: ButtonType,
|
|
192
|
-
color: Color? = AppTheme.current.colors.primary,
|
|
193
|
-
size: Size,
|
|
194
|
-
bgColor: Color,
|
|
195
|
-
): Modifier {
|
|
196
|
-
val theme = AppTheme.current
|
|
197
|
-
val radius = remember(size) { size.value.radius }
|
|
198
|
-
val modifier = Modifier.background(bgColor)
|
|
199
|
-
|
|
200
|
-
return remember(type, color, theme, radius, bgColor) {
|
|
201
|
-
when (type) {
|
|
202
|
-
ButtonType.DISABLED -> modifier
|
|
203
|
-
.border(0.dp, Color.Unspecified, RoundedCornerShape(radius))
|
|
204
|
-
|
|
205
|
-
ButtonType.PRIMARY -> modifier
|
|
206
|
-
.border(0.dp, Color.Unspecified, RoundedCornerShape(radius))
|
|
207
|
-
|
|
208
|
-
ButtonType.SECONDARY -> modifier
|
|
209
|
-
.border(1.dp, theme.colors.border.default, RoundedCornerShape(radius))
|
|
210
|
-
|
|
211
|
-
ButtonType.OUTLINE -> modifier
|
|
212
|
-
.border(1.dp, color ?: theme.colors.primary, RoundedCornerShape(radius))
|
|
213
|
-
|
|
214
|
-
ButtonType.TONAL -> modifier
|
|
215
|
-
.border(0.dp, Color.Unspecified, RoundedCornerShape(radius))
|
|
216
|
-
|
|
217
|
-
ButtonType.DANGER -> modifier
|
|
218
|
-
.border(0.dp, Color.Unspecified, RoundedCornerShape(radius))
|
|
219
|
-
|
|
220
|
-
ButtonType.TEXT -> modifier
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
@Composable
|
|
226
|
-
internal fun getButtonBackgroundColor(
|
|
227
|
-
loading: Boolean,
|
|
228
|
-
type: ButtonType
|
|
229
|
-
): Color {
|
|
230
|
-
val theme = AppTheme.current
|
|
231
|
-
|
|
232
|
-
return remember(loading, type, theme) {
|
|
233
|
-
when (type) {
|
|
234
|
-
ButtonType.DISABLED -> theme.colors.background.disable.withLoading(loading)
|
|
235
|
-
ButtonType.PRIMARY -> theme.colors.primary.withLoading(loading)
|
|
236
|
-
ButtonType.SECONDARY -> theme.colors.background.surface.withLoading(loading)
|
|
237
|
-
ButtonType.OUTLINE -> theme.colors.background.surface.withLoading(loading)
|
|
238
|
-
ButtonType.TONAL -> theme.colors.background.tonal.withLoading(loading)
|
|
239
|
-
ButtonType.DANGER -> theme.colors.error.primary.withLoading(loading)
|
|
240
|
-
ButtonType.TEXT -> Color.Unspecified
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
internal fun Color.withLoading(loading: Boolean): Color =
|
|
246
|
-
this.copy(alpha = if (loading) 0.75f else 1f)
|
|
247
|
-
|
|
248
|
-
@Composable
|
|
249
|
-
fun Button(
|
|
250
|
-
onClick: () -> Unit,
|
|
251
|
-
type: ButtonType = ButtonType.PRIMARY,
|
|
252
|
-
size: Size = Size.LARGE,
|
|
253
|
-
iconRight: String = "",
|
|
254
|
-
iconLeft: String = "",
|
|
255
|
-
title: String = "Button",
|
|
256
|
-
loading: Boolean = false,
|
|
257
|
-
useTintColor: Boolean = true,
|
|
258
|
-
isFull: Boolean = true,
|
|
259
|
-
modifier: Modifier = Modifier,
|
|
260
|
-
) {
|
|
261
|
-
val radius = remember(size) { size.value.radius }
|
|
262
|
-
val isEnabled = remember(type) { type != ButtonType.DISABLED }
|
|
263
|
-
val loadingOnLeft = remember(iconLeft, iconRight) {
|
|
264
|
-
shouldLoadingOnLeft(iconLeft, iconRight)
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
val sizeSpecs = remember(size) { size.value }
|
|
268
|
-
|
|
269
|
-
val interactionSource = remember { MutableInteractionSource() }
|
|
270
|
-
val isPressed by interactionSource.collectIsPressedAsState()
|
|
271
|
-
|
|
272
|
-
val animatedPadding by animateDpAsState(
|
|
273
|
-
targetValue = if (isPressed && isEnabled && !loading) 2.dp else 0.dp,
|
|
274
|
-
animationSpec = tween(100),
|
|
275
|
-
label = "pressPadding"
|
|
276
|
-
)
|
|
277
|
-
|
|
278
|
-
val targetAlpha = if (isPressed && isEnabled && !loading) 0.5f else 1f
|
|
279
|
-
val alpha by animateFloatAsState(
|
|
280
|
-
targetValue = targetAlpha,
|
|
281
|
-
animationSpec = tween(100),
|
|
282
|
-
label = "buttonPressAlpha"
|
|
283
|
-
)
|
|
284
|
-
|
|
285
|
-
val clickableModifier =
|
|
286
|
-
if (isEnabled && !loading) {
|
|
287
|
-
modifier
|
|
288
|
-
.then(if (isFull) Modifier.fillMaxWidth() else Modifier)
|
|
289
|
-
.clip(RoundedCornerShape(radius))
|
|
290
|
-
.clickable(
|
|
291
|
-
enabled = isEnabled && !loading,
|
|
292
|
-
interactionSource = interactionSource,
|
|
293
|
-
indication = null,
|
|
294
|
-
onClick = onClick
|
|
295
|
-
)
|
|
296
|
-
.alpha(alpha)
|
|
297
|
-
} else {
|
|
298
|
-
modifier
|
|
299
|
-
.then(if (isFull) Modifier.fillMaxWidth() else Modifier)
|
|
300
|
-
.clip(RoundedCornerShape(radius))
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
val bgColor = getButtonBackgroundColor(loading, type)
|
|
304
|
-
val textColor = getTextColor(loading, type)
|
|
305
|
-
|
|
306
|
-
Row(
|
|
307
|
-
modifier = clickableModifier
|
|
308
|
-
.padding(horizontal = animatedPadding)
|
|
309
|
-
.clip(RoundedCornerShape(radius))
|
|
310
|
-
.then(getTypeStyle(type, size = size, bgColor = bgColor))
|
|
311
|
-
.conditional(IsShowBaseLineDebug) {
|
|
312
|
-
border(1.dp, Colors.blue_03)
|
|
313
|
-
}
|
|
314
|
-
.padding(horizontal = sizeSpecs.padding)
|
|
315
|
-
.height(sizeSpecs.height),
|
|
316
|
-
horizontalArrangement = Arrangement.Center,
|
|
317
|
-
verticalAlignment = Alignment.CenterVertically,
|
|
318
|
-
) {
|
|
319
|
-
RenderIcon(
|
|
320
|
-
size = size,
|
|
321
|
-
isIconLeft = true,
|
|
322
|
-
useTintColor = useTintColor,
|
|
323
|
-
icon = iconLeft,
|
|
324
|
-
forceLoading = loading && loadingOnLeft,
|
|
325
|
-
bgColor = bgColor,
|
|
326
|
-
textColor = textColor
|
|
327
|
-
)
|
|
328
|
-
RenderTitle(size, title, textColor = textColor)
|
|
329
|
-
RenderIcon(
|
|
330
|
-
size = size,
|
|
331
|
-
isIconLeft = false,
|
|
332
|
-
useTintColor = useTintColor,
|
|
333
|
-
icon = iconRight,
|
|
334
|
-
forceLoading = loading && !loadingOnLeft,
|
|
335
|
-
bgColor = bgColor,
|
|
336
|
-
textColor = textColor
|
|
337
|
-
)
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
|