@momo-kits/native-kits 0.157.2-debug → 0.157.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 -110
- 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/BaselineView.kt +0 -198
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -357
- 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 -448
- 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 -231
- 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/ScaleSizeScope.kt +0 -17
- 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 -185
- 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 -62
- 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/settings.gradle.kts +0 -52
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.animation.core.LinearEasing
|
|
4
|
-
import androidx.compose.animation.core.RepeatMode
|
|
5
|
-
import androidx.compose.animation.core.animateFloat
|
|
6
|
-
import androidx.compose.animation.core.infiniteRepeatable
|
|
7
|
-
import androidx.compose.animation.core.rememberInfiniteTransition
|
|
8
|
-
import androidx.compose.animation.core.tween
|
|
9
|
-
import androidx.compose.foundation.background
|
|
10
|
-
import androidx.compose.foundation.border
|
|
11
|
-
import androidx.compose.foundation.layout.Box
|
|
12
|
-
import androidx.compose.foundation.layout.BoxWithConstraints
|
|
13
|
-
import androidx.compose.foundation.layout.fillMaxSize
|
|
14
|
-
import androidx.compose.runtime.Composable
|
|
15
|
-
import androidx.compose.runtime.remember
|
|
16
|
-
import androidx.compose.ui.Modifier
|
|
17
|
-
import androidx.compose.ui.draw.drawBehind
|
|
18
|
-
import androidx.compose.ui.geometry.Offset
|
|
19
|
-
import androidx.compose.ui.graphics.Brush
|
|
20
|
-
import androidx.compose.ui.unit.dp
|
|
21
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
22
|
-
import vn.momo.kits.const.Colors
|
|
23
|
-
import vn.momo.kits.modifier.conditional
|
|
24
|
-
|
|
25
|
-
// Pre-computed shimmer colors to avoid repeated list creation
|
|
26
|
-
private val shimmerColors = listOf(
|
|
27
|
-
Colors.black_05,
|
|
28
|
-
Colors.black_03,
|
|
29
|
-
Colors.black_05,
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
// Constants for better performance
|
|
33
|
-
private const val SHADOW_BRUSH_PERCENTAGE = 0.6f
|
|
34
|
-
private const val DEFAULT_DURATION_MILLIS = 1000
|
|
35
|
-
|
|
36
|
-
@Composable
|
|
37
|
-
fun Skeleton() {
|
|
38
|
-
BoxWithConstraints(modifier = Modifier.fillMaxSize()) {
|
|
39
|
-
// Memoize width calculation
|
|
40
|
-
val maxWidthValue = remember(maxWidth) { maxWidth.value.toInt() }
|
|
41
|
-
|
|
42
|
-
Box(
|
|
43
|
-
modifier = Modifier
|
|
44
|
-
.fillMaxSize()
|
|
45
|
-
.background(Colors.black_05)
|
|
46
|
-
.conditional(IsShowBaseLineDebug) {
|
|
47
|
-
border(1.dp, Colors.blue_03)
|
|
48
|
-
}
|
|
49
|
-
.shimmerLoadingAnimation(maxWidth = maxWidthValue)
|
|
50
|
-
)
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
@Composable
|
|
55
|
-
fun Modifier.shimmerLoadingAnimation(
|
|
56
|
-
maxWidth: Int,
|
|
57
|
-
angleOfAxisY: Float = 0f,
|
|
58
|
-
durationMillis: Int = DEFAULT_DURATION_MILLIS,
|
|
59
|
-
): Modifier {
|
|
60
|
-
// Memoize calculations to avoid repeated computations
|
|
61
|
-
val widthOfShadowBrush = remember(maxWidth) {
|
|
62
|
-
(maxWidth * SHADOW_BRUSH_PERCENTAGE).toInt()
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
val animationTarget = remember(durationMillis, widthOfShadowBrush) {
|
|
66
|
-
(durationMillis + widthOfShadowBrush).toFloat()
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
val transition = rememberInfiniteTransition(label = "shimmer")
|
|
70
|
-
val translateAnimation = transition.animateFloat(
|
|
71
|
-
initialValue = 0f,
|
|
72
|
-
targetValue = animationTarget,
|
|
73
|
-
animationSpec = infiniteRepeatable(
|
|
74
|
-
animation = tween(
|
|
75
|
-
durationMillis = durationMillis,
|
|
76
|
-
easing = LinearEasing,
|
|
77
|
-
),
|
|
78
|
-
repeatMode = RepeatMode.Restart,
|
|
79
|
-
),
|
|
80
|
-
label = "shimmerTranslate"
|
|
81
|
-
)
|
|
82
|
-
|
|
83
|
-
return drawBehind {
|
|
84
|
-
// Memoize brush creation by using remember in the calling composable
|
|
85
|
-
val startX = translateAnimation.value - widthOfShadowBrush
|
|
86
|
-
val endX = translateAnimation.value
|
|
87
|
-
|
|
88
|
-
drawRect(
|
|
89
|
-
brush = Brush.linearGradient(
|
|
90
|
-
colors = shimmerColors,
|
|
91
|
-
start = Offset(x = startX, y = 0f),
|
|
92
|
-
end = Offset(x = endX, y = angleOfAxisY)
|
|
93
|
-
)
|
|
94
|
-
)
|
|
95
|
-
}
|
|
96
|
-
}
|
|
@@ -1,96 +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.clickable
|
|
6
|
-
import androidx.compose.foundation.layout.Box
|
|
7
|
-
import androidx.compose.foundation.layout.height
|
|
8
|
-
import androidx.compose.foundation.layout.padding
|
|
9
|
-
import androidx.compose.foundation.layout.size
|
|
10
|
-
import androidx.compose.foundation.layout.width
|
|
11
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
12
|
-
import androidx.compose.runtime.Composable
|
|
13
|
-
import androidx.compose.runtime.remember
|
|
14
|
-
import androidx.compose.ui.Alignment
|
|
15
|
-
import androidx.compose.ui.Modifier
|
|
16
|
-
import androidx.compose.ui.draw.clip
|
|
17
|
-
import androidx.compose.ui.graphics.Color
|
|
18
|
-
import androidx.compose.ui.unit.dp
|
|
19
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
20
|
-
import vn.momo.kits.const.Colors
|
|
21
|
-
import vn.momo.kits.const.Spacing
|
|
22
|
-
import vn.momo.kits.modifier.conditional
|
|
23
|
-
import vn.momo.kits.modifier.setAutomationId
|
|
24
|
-
|
|
25
|
-
// Pre-computed shapes to avoid repeated creation
|
|
26
|
-
private val switchShape = RoundedCornerShape(20.dp)
|
|
27
|
-
private val circleShape = RoundedCornerShape(percent = 100)
|
|
28
|
-
|
|
29
|
-
@Composable
|
|
30
|
-
fun Switch(
|
|
31
|
-
value: Boolean = false,
|
|
32
|
-
onChange: (Boolean) -> Unit = {},
|
|
33
|
-
disabled: Boolean = false,
|
|
34
|
-
title: String? = "",
|
|
35
|
-
accessibilityId: String? = ""
|
|
36
|
-
) {
|
|
37
|
-
// Memoize color calculations to avoid repeated conditional logic
|
|
38
|
-
val colors = remember(value, disabled) {
|
|
39
|
-
val circleColor = if (value) Colors.black_01 else Colors.black_03
|
|
40
|
-
val bgColor = when {
|
|
41
|
-
disabled && value -> Colors.green_09
|
|
42
|
-
disabled && !value -> Colors.black_05
|
|
43
|
-
value -> Colors.green_03
|
|
44
|
-
else -> Colors.black_07
|
|
45
|
-
}
|
|
46
|
-
circleColor to bgColor
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
val (circleBackgroundColor, backgroundColor) = colors
|
|
50
|
-
|
|
51
|
-
// Memoize automation ID to avoid string concatenation on every render
|
|
52
|
-
val automationIdValue = remember(accessibilityId, title, value) {
|
|
53
|
-
accessibilityId ?: "toggle_${title ?: "unknown"}_$value"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Memoize alignment calculation
|
|
57
|
-
val contentAlignment = remember(value) {
|
|
58
|
-
if (value) Alignment.CenterEnd else Alignment.CenterStart
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Memoize click handler to avoid lambda recreation
|
|
62
|
-
val onClickHandler = remember(onChange, value) {
|
|
63
|
-
{ onChange(!value) }
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
Box(modifier = Modifier.setAutomationId(automationIdValue)) {
|
|
67
|
-
Box(
|
|
68
|
-
modifier = Modifier
|
|
69
|
-
.width(38.dp)
|
|
70
|
-
.height(20.dp)
|
|
71
|
-
.border(0.dp, Color.Unspecified, switchShape)
|
|
72
|
-
.background(backgroundColor, switchShape)
|
|
73
|
-
.conditional(IsShowBaseLineDebug) {
|
|
74
|
-
border(1.dp, Colors.blue_03)
|
|
75
|
-
}
|
|
76
|
-
.clip(switchShape)
|
|
77
|
-
.clickable(enabled = !disabled, onClick = onClickHandler)
|
|
78
|
-
.padding(horizontal = Spacing.XS),
|
|
79
|
-
contentAlignment = contentAlignment
|
|
80
|
-
) {
|
|
81
|
-
Box(
|
|
82
|
-
modifier = Modifier
|
|
83
|
-
.size(14.dp)
|
|
84
|
-
.border(0.dp, Color.Unspecified, circleShape)
|
|
85
|
-
.background(circleBackgroundColor, circleShape),
|
|
86
|
-
contentAlignment = Alignment.Center
|
|
87
|
-
) {
|
|
88
|
-
Box(
|
|
89
|
-
Modifier
|
|
90
|
-
.size(6.dp)
|
|
91
|
-
.background(backgroundColor, circleShape)
|
|
92
|
-
)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
@@ -1,92 +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.Row
|
|
7
|
-
import androidx.compose.foundation.layout.height
|
|
8
|
-
import androidx.compose.foundation.layout.padding
|
|
9
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
10
|
-
import androidx.compose.runtime.Composable
|
|
11
|
-
import androidx.compose.ui.Alignment
|
|
12
|
-
import androidx.compose.ui.Modifier
|
|
13
|
-
import androidx.compose.ui.graphics.Color
|
|
14
|
-
import androidx.compose.ui.unit.dp
|
|
15
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
16
|
-
import vn.momo.kits.const.Colors
|
|
17
|
-
import vn.momo.kits.const.Radius
|
|
18
|
-
import vn.momo.kits.const.Spacing
|
|
19
|
-
import vn.momo.kits.const.Typography
|
|
20
|
-
import vn.momo.kits.const.scaleSize
|
|
21
|
-
import vn.momo.kits.modifier.conditional
|
|
22
|
-
|
|
23
|
-
enum class TagSize(val height: Float) {
|
|
24
|
-
Large(24.toFloat()),
|
|
25
|
-
Medium(18.toFloat())
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
enum class TagColor(val backgroundColor: Color, val textColor: Color) {
|
|
29
|
-
Default(Colors.black_04, Colors.black_17),
|
|
30
|
-
Orange(Colors.orange_08, Colors.orange_03),
|
|
31
|
-
Green(Colors.green_08, Colors.green_03),
|
|
32
|
-
Red(Colors.red_08, Colors.red_03),
|
|
33
|
-
Blue(Colors.blue_08, Colors.blue_03),
|
|
34
|
-
Grey(Colors.black_04, Colors.black_12),
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
@Composable
|
|
38
|
-
fun Tag(
|
|
39
|
-
label: String = "Label",
|
|
40
|
-
icon: String? = null,
|
|
41
|
-
color: TagColor = TagColor.Default,
|
|
42
|
-
size: TagSize = TagSize.Large,
|
|
43
|
-
customColor: Color? = null,
|
|
44
|
-
) {
|
|
45
|
-
val primaryColors = listOf(
|
|
46
|
-
Color(0xFFF0F0F0),
|
|
47
|
-
Color(0xFFEB2F96),
|
|
48
|
-
Color(0xFF962AF0),
|
|
49
|
-
Color(0xFF4E4BFF),
|
|
50
|
-
Color(0xFF007AFF),
|
|
51
|
-
Color(0xFF13C2C2),
|
|
52
|
-
Color(0xFF34C759),
|
|
53
|
-
Color(0xFFA0D911),
|
|
54
|
-
Color(0xFFFFCC00),
|
|
55
|
-
Color(0xFFFA8C16),
|
|
56
|
-
Color(0xFFFA541C),
|
|
57
|
-
Color(0xFFF5222D)
|
|
58
|
-
)
|
|
59
|
-
var tagColor = color.backgroundColor
|
|
60
|
-
var labelColor = color.textColor
|
|
61
|
-
|
|
62
|
-
if (primaryColors.contains(customColor)) {
|
|
63
|
-
tagColor = color.backgroundColor
|
|
64
|
-
labelColor = color.textColor
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
Box(
|
|
68
|
-
modifier = Modifier
|
|
69
|
-
.height(scaleSize(size.height).dp)
|
|
70
|
-
.background(tagColor, shape = RoundedCornerShape(Radius.S))
|
|
71
|
-
.conditional(IsShowBaseLineDebug) {
|
|
72
|
-
border(1.dp, Colors.blue_03)
|
|
73
|
-
}
|
|
74
|
-
.padding(horizontal = Spacing.S),
|
|
75
|
-
contentAlignment = Alignment.Center
|
|
76
|
-
) {
|
|
77
|
-
Row(verticalAlignment = Alignment.CenterVertically) {
|
|
78
|
-
if (icon != null) {
|
|
79
|
-
Icon(
|
|
80
|
-
source = icon,
|
|
81
|
-
size = 16.dp,
|
|
82
|
-
color = labelColor
|
|
83
|
-
)
|
|
84
|
-
}
|
|
85
|
-
Text(
|
|
86
|
-
text = label,
|
|
87
|
-
color = labelColor,
|
|
88
|
-
style = Typography.labelSMedium
|
|
89
|
-
)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.border
|
|
4
|
-
import androidx.compose.runtime.Composable
|
|
5
|
-
import androidx.compose.runtime.remember
|
|
6
|
-
import androidx.compose.ui.Modifier
|
|
7
|
-
import androidx.compose.ui.graphics.Color
|
|
8
|
-
import androidx.compose.ui.text.AnnotatedString
|
|
9
|
-
import androidx.compose.ui.text.TextLayoutResult
|
|
10
|
-
import androidx.compose.ui.text.TextStyle
|
|
11
|
-
import androidx.compose.ui.text.style.TextAlign
|
|
12
|
-
import androidx.compose.ui.text.style.TextDecoration
|
|
13
|
-
import androidx.compose.ui.text.style.TextOverflow
|
|
14
|
-
import androidx.compose.ui.unit.TextUnit
|
|
15
|
-
import androidx.compose.ui.unit.dp
|
|
16
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
17
|
-
import vn.momo.kits.const.AppTheme
|
|
18
|
-
import vn.momo.kits.const.Colors
|
|
19
|
-
import vn.momo.kits.const.Typography
|
|
20
|
-
import vn.momo.kits.const.getFontFamily
|
|
21
|
-
import vn.momo.kits.const.scaleSize
|
|
22
|
-
import vn.momo.kits.modifier.conditional
|
|
23
|
-
import vn.momo.kits.modifier.setAutomationId
|
|
24
|
-
|
|
25
|
-
@Composable
|
|
26
|
-
fun Text(
|
|
27
|
-
text: String,
|
|
28
|
-
color: Color? = null,
|
|
29
|
-
style: TextStyle = Typography.bodyDefaultRegular,
|
|
30
|
-
textAlign: TextAlign? = TextAlign.Start,
|
|
31
|
-
modifier: Modifier = Modifier,
|
|
32
|
-
maxLines: Int = Int.MAX_VALUE,
|
|
33
|
-
overflow: TextOverflow = TextOverflow.Clip,
|
|
34
|
-
textDecoration: TextDecoration? = null,
|
|
35
|
-
onTextLayout: ((TextLayoutResult) -> Unit)? = null,
|
|
36
|
-
fontFamily: String? = null,
|
|
37
|
-
minLines: Int = 1,
|
|
38
|
-
letterSpacing: TextUnit = TextUnit.Unspecified,
|
|
39
|
-
softWrap: Boolean = true,
|
|
40
|
-
accessibilityId: String? = null
|
|
41
|
-
) {
|
|
42
|
-
Text(
|
|
43
|
-
text = AnnotatedString(text),
|
|
44
|
-
color = color,
|
|
45
|
-
style = style,
|
|
46
|
-
textAlign = textAlign,
|
|
47
|
-
modifier = modifier,
|
|
48
|
-
maxLines = maxLines,
|
|
49
|
-
overflow = overflow,
|
|
50
|
-
textDecoration = textDecoration,
|
|
51
|
-
onTextLayout = onTextLayout,
|
|
52
|
-
fontFamily = fontFamily,
|
|
53
|
-
minLines = minLines,
|
|
54
|
-
letterSpacing = letterSpacing,
|
|
55
|
-
softWrap = softWrap,
|
|
56
|
-
accessibilityId = accessibilityId
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
@Composable
|
|
62
|
-
fun Text(
|
|
63
|
-
text: AnnotatedString,
|
|
64
|
-
color: Color? = null,
|
|
65
|
-
style: TextStyle = Typography.bodyDefaultRegular,
|
|
66
|
-
textAlign: TextAlign? = TextAlign.Start,
|
|
67
|
-
modifier: Modifier = Modifier,
|
|
68
|
-
maxLines: Int = Int.MAX_VALUE,
|
|
69
|
-
overflow: TextOverflow = TextOverflow.Clip,
|
|
70
|
-
textDecoration: TextDecoration? = null,
|
|
71
|
-
onTextLayout: ((TextLayoutResult) -> Unit)? = null,
|
|
72
|
-
fontFamily: String? = null,
|
|
73
|
-
minLines: Int = 1,
|
|
74
|
-
letterSpacing: TextUnit = TextUnit.Unspecified,
|
|
75
|
-
softWrap: Boolean = true,
|
|
76
|
-
accessibilityId: String? = null
|
|
77
|
-
) {
|
|
78
|
-
// Cache theme access to avoid repeated lookups
|
|
79
|
-
val theme = AppTheme.current
|
|
80
|
-
|
|
81
|
-
// Call @Composable functions directly in composable context
|
|
82
|
-
val scaledFontSize = scaleSize(style.fontSize)
|
|
83
|
-
val scaledLineHeight = scaleSize(style.lineHeight)
|
|
84
|
-
val fontFamilyResult = getFontFamily(fontFamily ?: theme.font, style.fontWeight)
|
|
85
|
-
|
|
86
|
-
// Now memoize the results
|
|
87
|
-
val fontSize = remember(scaledFontSize) { scaledFontSize }
|
|
88
|
-
val lineHeight = remember(scaledLineHeight) { scaledLineHeight }
|
|
89
|
-
val font = remember(fontFamilyResult) { fontFamilyResult }
|
|
90
|
-
|
|
91
|
-
// Memoize color calculation
|
|
92
|
-
val textColor = remember(color, theme) {
|
|
93
|
-
color ?: theme.colors.text.default
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
// Memoize style copy operation
|
|
97
|
-
val optimizedStyle = remember(style) {
|
|
98
|
-
style.copy(
|
|
99
|
-
fontWeight = null,
|
|
100
|
-
lineHeight = if (lineHeight.value.isFinite() && lineHeight.value > 0) lineHeight else style.lineHeight
|
|
101
|
-
)
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Memoize automation ID
|
|
105
|
-
val automationId = remember(accessibilityId, text) {
|
|
106
|
-
accessibilityId ?: text
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// on/off baseline config value, default will be false
|
|
110
|
-
|
|
111
|
-
androidx.compose.material3.Text(
|
|
112
|
-
modifier = modifier.conditional(IsShowBaseLineDebug){
|
|
113
|
-
border(1.dp, Colors.blue_03)
|
|
114
|
-
}.setAutomationId(automationId.toString()),
|
|
115
|
-
text = text,
|
|
116
|
-
color = textColor,
|
|
117
|
-
style = optimizedStyle,
|
|
118
|
-
textAlign = textAlign,
|
|
119
|
-
fontSize = fontSize,
|
|
120
|
-
fontFamily = font,
|
|
121
|
-
maxLines = maxLines,
|
|
122
|
-
softWrap = softWrap,
|
|
123
|
-
letterSpacing = letterSpacing,
|
|
124
|
-
minLines = minLines,
|
|
125
|
-
textDecoration = textDecoration,
|
|
126
|
-
onTextLayout = onTextLayout ?: {},
|
|
127
|
-
overflow = overflow
|
|
128
|
-
)
|
|
129
|
-
}
|
|
130
|
-
|
|
@@ -1,214 +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.clickable
|
|
6
|
-
import androidx.compose.foundation.layout.Arrangement
|
|
7
|
-
import androidx.compose.foundation.layout.Box
|
|
8
|
-
import androidx.compose.foundation.layout.Column
|
|
9
|
-
import androidx.compose.foundation.layout.IntrinsicSize
|
|
10
|
-
import androidx.compose.foundation.layout.Row
|
|
11
|
-
import androidx.compose.foundation.layout.Spacer
|
|
12
|
-
import androidx.compose.foundation.layout.fillMaxHeight
|
|
13
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
14
|
-
import androidx.compose.foundation.layout.height
|
|
15
|
-
import androidx.compose.foundation.layout.padding
|
|
16
|
-
import androidx.compose.foundation.layout.size
|
|
17
|
-
import androidx.compose.foundation.layout.width
|
|
18
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
19
|
-
import androidx.compose.runtime.Composable
|
|
20
|
-
import androidx.compose.ui.Alignment
|
|
21
|
-
import androidx.compose.ui.Modifier
|
|
22
|
-
import androidx.compose.ui.graphics.Color
|
|
23
|
-
import androidx.compose.ui.text.TextStyle
|
|
24
|
-
import androidx.compose.ui.text.font.FontWeight
|
|
25
|
-
import androidx.compose.ui.unit.dp
|
|
26
|
-
import androidx.compose.ui.unit.sp
|
|
27
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
28
|
-
import vn.momo.kits.const.AppTheme
|
|
29
|
-
import vn.momo.kits.const.Colors
|
|
30
|
-
import vn.momo.kits.const.Spacing
|
|
31
|
-
import vn.momo.kits.const.Typography
|
|
32
|
-
import vn.momo.kits.modifier.conditional
|
|
33
|
-
|
|
34
|
-
enum class TitleType { Card, Section }
|
|
35
|
-
enum class TitleSize { Small, Medium, Large }
|
|
36
|
-
enum class IconAlign { Top, Center, Bottom }
|
|
37
|
-
enum class ButtonSize { Small, Large }
|
|
38
|
-
|
|
39
|
-
@Composable
|
|
40
|
-
fun Title(
|
|
41
|
-
title: String,
|
|
42
|
-
type: TitleType = TitleType.Section,
|
|
43
|
-
size: TitleSize = TitleSize.Medium,
|
|
44
|
-
icon: String? = null,
|
|
45
|
-
iconColor: Color? = null,
|
|
46
|
-
iconAlign: IconAlign = IconAlign.Top,
|
|
47
|
-
showRightAction: Boolean = false,
|
|
48
|
-
showTrailingAction: Boolean = false,
|
|
49
|
-
badgeLabel: String? = null,
|
|
50
|
-
buttonTitle: String? = null,
|
|
51
|
-
buttonSize: ButtonSize = ButtonSize.Small,
|
|
52
|
-
onPressRightAction: () -> Unit = {},
|
|
53
|
-
onPressTrailingAction: () -> Unit = {},
|
|
54
|
-
textOnly: Boolean = false,
|
|
55
|
-
description: String? = null,
|
|
56
|
-
modifier: Modifier = Modifier
|
|
57
|
-
) {
|
|
58
|
-
val theme = AppTheme.current
|
|
59
|
-
val textStyle: TextStyle = when (type) {
|
|
60
|
-
TitleType.Card -> when (size) {
|
|
61
|
-
TitleSize.Small -> TextStyle(fontSize = 14.sp, lineHeight = 20.sp)
|
|
62
|
-
TitleSize.Medium -> TextStyle(fontSize = 16.sp, lineHeight = 22.sp)
|
|
63
|
-
TitleSize.Large -> TextStyle(fontSize = 18.sp, lineHeight = 26.sp)
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
TitleType.Section -> when (size) {
|
|
67
|
-
TitleSize.Small -> TextStyle(
|
|
68
|
-
fontSize = 16.sp,
|
|
69
|
-
lineHeight = 24.sp,
|
|
70
|
-
fontWeight = FontWeight.Bold
|
|
71
|
-
)
|
|
72
|
-
|
|
73
|
-
TitleSize.Medium -> TextStyle(
|
|
74
|
-
fontSize = 18.sp,
|
|
75
|
-
lineHeight = 26.sp,
|
|
76
|
-
fontWeight = FontWeight.Bold
|
|
77
|
-
)
|
|
78
|
-
|
|
79
|
-
TitleSize.Large -> TextStyle(
|
|
80
|
-
fontSize = 20.sp,
|
|
81
|
-
lineHeight = 28.sp,
|
|
82
|
-
fontWeight = FontWeight.Bold
|
|
83
|
-
)
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (textOnly) {
|
|
88
|
-
Text(
|
|
89
|
-
text = title,
|
|
90
|
-
style = textStyle,
|
|
91
|
-
modifier = modifier
|
|
92
|
-
)
|
|
93
|
-
return
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
Row(
|
|
97
|
-
modifier = modifier
|
|
98
|
-
.fillMaxWidth()
|
|
99
|
-
.height(IntrinsicSize.Min)
|
|
100
|
-
.conditional(IsShowBaseLineDebug) {
|
|
101
|
-
border(1.dp, Colors.blue_03)
|
|
102
|
-
}
|
|
103
|
-
.padding(8.dp),
|
|
104
|
-
verticalAlignment = Alignment.CenterVertically
|
|
105
|
-
) {
|
|
106
|
-
icon?.let {
|
|
107
|
-
Column(
|
|
108
|
-
modifier = Modifier.fillMaxHeight().padding(end = Spacing.S),
|
|
109
|
-
verticalArrangement = when (iconAlign) {
|
|
110
|
-
IconAlign.Top -> Arrangement.Top
|
|
111
|
-
IconAlign.Center -> Arrangement.Center
|
|
112
|
-
IconAlign.Bottom -> Arrangement.Bottom
|
|
113
|
-
},
|
|
114
|
-
) {
|
|
115
|
-
// Icon
|
|
116
|
-
Icon(
|
|
117
|
-
source = it,
|
|
118
|
-
color = iconColor ?: theme.colors.text.default,
|
|
119
|
-
modifier = Modifier.size(24.dp)
|
|
120
|
-
)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
Column(
|
|
125
|
-
modifier = Modifier.weight(1f)
|
|
126
|
-
) {
|
|
127
|
-
Row(
|
|
128
|
-
verticalAlignment = Alignment.CenterVertically
|
|
129
|
-
) {
|
|
130
|
-
Row(
|
|
131
|
-
verticalAlignment = Alignment.CenterVertically,
|
|
132
|
-
modifier = if (showTrailingAction) Modifier else Modifier.weight(1f),
|
|
133
|
-
) {
|
|
134
|
-
Text(
|
|
135
|
-
text = title,
|
|
136
|
-
style = textStyle,
|
|
137
|
-
maxLines = if (showTrailingAction || badgeLabel != null) 1 else 2,
|
|
138
|
-
)
|
|
139
|
-
|
|
140
|
-
// Badge
|
|
141
|
-
badgeLabel?.let {
|
|
142
|
-
Spacer(modifier = Modifier.width(4.dp))
|
|
143
|
-
Badge(
|
|
144
|
-
label = it
|
|
145
|
-
)
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
// Trailing action (icon)
|
|
151
|
-
if (showTrailingAction && !showRightAction) {
|
|
152
|
-
Spacer(modifier = Modifier.width(8.dp))
|
|
153
|
-
Box(
|
|
154
|
-
modifier = Modifier
|
|
155
|
-
.size(24.dp)
|
|
156
|
-
.background(
|
|
157
|
-
color = if (type == TitleType.Section) Colors.black_06.copy(0.6f) else Colors.black_06.copy(
|
|
158
|
-
0.3f
|
|
159
|
-
),
|
|
160
|
-
shape = RoundedCornerShape(12.dp)
|
|
161
|
-
)
|
|
162
|
-
.clickable { onPressTrailingAction() },
|
|
163
|
-
contentAlignment = Alignment.Center
|
|
164
|
-
) {
|
|
165
|
-
Icon(
|
|
166
|
-
source = "arrow_chevron_right_small",
|
|
167
|
-
size = 18.dp
|
|
168
|
-
)
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
// Description
|
|
174
|
-
description?.let {
|
|
175
|
-
Spacer(modifier = Modifier.height(4.dp))
|
|
176
|
-
Text(
|
|
177
|
-
text = it,
|
|
178
|
-
style = Typography.descriptionDefaultRegular,
|
|
179
|
-
color = theme.colors.text.secondary
|
|
180
|
-
)
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
// Right action (button or icon)
|
|
185
|
-
if (showRightAction && !showTrailingAction) {
|
|
186
|
-
Spacer(modifier = Modifier.width(8.dp))
|
|
187
|
-
if (buttonTitle != null) {
|
|
188
|
-
Text(
|
|
189
|
-
text = buttonTitle,
|
|
190
|
-
style = if (buttonSize === ButtonSize.Small) Typography.actionXsBold else Typography.actionSBold,
|
|
191
|
-
color = theme.colors.primary,
|
|
192
|
-
modifier = Modifier.clickable { onPressRightAction() }
|
|
193
|
-
)
|
|
194
|
-
} else {
|
|
195
|
-
Box(
|
|
196
|
-
modifier = Modifier
|
|
197
|
-
.size(24.dp)
|
|
198
|
-
.background(
|
|
199
|
-
color = Colors.pink_03.copy(alpha = 0.1f),
|
|
200
|
-
shape = RoundedCornerShape(12.dp)
|
|
201
|
-
)
|
|
202
|
-
.clickable { onPressRightAction() },
|
|
203
|
-
contentAlignment = Alignment.Center
|
|
204
|
-
) {
|
|
205
|
-
Icon(
|
|
206
|
-
source = "arrow_chevron_right_small",
|
|
207
|
-
modifier = Modifier.size(22.dp),
|
|
208
|
-
color = theme.colors.primary
|
|
209
|
-
)
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
}
|