@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,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.horizontalScroll
|
|
6
|
-
import androidx.compose.foundation.layout.Box
|
|
7
|
-
import androidx.compose.foundation.layout.Column
|
|
8
|
-
import androidx.compose.foundation.layout.Row
|
|
9
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
10
|
-
import androidx.compose.foundation.layout.height
|
|
11
|
-
import androidx.compose.foundation.layout.offset
|
|
12
|
-
import androidx.compose.foundation.layout.padding
|
|
13
|
-
import androidx.compose.foundation.layout.width
|
|
14
|
-
import androidx.compose.foundation.rememberScrollState
|
|
15
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
16
|
-
import androidx.compose.runtime.Composable
|
|
17
|
-
import androidx.compose.runtime.derivedStateOf
|
|
18
|
-
import androidx.compose.runtime.getValue
|
|
19
|
-
import androidx.compose.runtime.remember
|
|
20
|
-
import androidx.compose.ui.Alignment
|
|
21
|
-
import androidx.compose.ui.Modifier
|
|
22
|
-
import androidx.compose.ui.draw.clip
|
|
23
|
-
import androidx.compose.ui.unit.Dp
|
|
24
|
-
import androidx.compose.ui.unit.dp
|
|
25
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
26
|
-
import vn.momo.kits.const.AppTheme
|
|
27
|
-
import vn.momo.kits.const.Colors
|
|
28
|
-
import vn.momo.kits.const.Spacing
|
|
29
|
-
import vn.momo.kits.modifier.conditional
|
|
30
|
-
|
|
31
|
-
val INDICATOR_WIDTH = 24.dp
|
|
32
|
-
val PROGRESS_WIDTH = 72.dp
|
|
33
|
-
|
|
34
|
-
// Memoized offset calculation to avoid repeated computations during scroll
|
|
35
|
-
private fun calculateOffset(currentPosition: Int, maxBound: Int): Dp {
|
|
36
|
-
return if (maxBound == 0) 0.dp else {
|
|
37
|
-
(PROGRESS_WIDTH - INDICATOR_WIDTH) * (currentPosition / maxBound.toFloat())
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
@Composable
|
|
42
|
-
fun PaginationScroll(
|
|
43
|
-
modifier: Modifier = Modifier,
|
|
44
|
-
content: @Composable () -> Unit
|
|
45
|
-
) {
|
|
46
|
-
val scrollState = rememberScrollState()
|
|
47
|
-
val theme = AppTheme.current
|
|
48
|
-
|
|
49
|
-
// Use derivedStateOf to optimize scroll position calculations
|
|
50
|
-
val indicatorOffset by remember {
|
|
51
|
-
derivedStateOf {
|
|
52
|
-
calculateOffset(scrollState.value, scrollState.maxValue)
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// Cache theme colors to avoid repeated access
|
|
57
|
-
val (progressBackground, indicatorColor) = remember(theme) {
|
|
58
|
-
theme.colors.background.pressed to theme.colors.primary
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
|
62
|
-
Row(
|
|
63
|
-
modifier = modifier
|
|
64
|
-
.fillMaxWidth()
|
|
65
|
-
.conditional(IsShowBaseLineDebug) {
|
|
66
|
-
border(1.dp, Colors.blue_03)
|
|
67
|
-
}
|
|
68
|
-
.padding(bottom = Spacing.L)
|
|
69
|
-
.horizontalScroll(scrollState)
|
|
70
|
-
) {
|
|
71
|
-
content()
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// Progress indicator
|
|
75
|
-
Box(
|
|
76
|
-
modifier = Modifier
|
|
77
|
-
.clip(RoundedCornerShape(Spacing.XS))
|
|
78
|
-
.width(PROGRESS_WIDTH)
|
|
79
|
-
.height(4.dp)
|
|
80
|
-
.background(color = progressBackground)
|
|
81
|
-
) {
|
|
82
|
-
Box(
|
|
83
|
-
modifier = Modifier
|
|
84
|
-
.offset(x = indicatorOffset)
|
|
85
|
-
.clip(RoundedCornerShape(Spacing.XS))
|
|
86
|
-
.width(INDICATOR_WIDTH)
|
|
87
|
-
.height(4.dp)
|
|
88
|
-
.background(color = indicatorColor)
|
|
89
|
-
)
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
@@ -1,40 +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.Row
|
|
6
|
-
import androidx.compose.foundation.layout.padding
|
|
7
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
8
|
-
import androidx.compose.runtime.Composable
|
|
9
|
-
import androidx.compose.ui.Modifier
|
|
10
|
-
import androidx.compose.ui.graphics.Color
|
|
11
|
-
import androidx.compose.ui.unit.dp
|
|
12
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
13
|
-
import vn.momo.kits.const.Colors
|
|
14
|
-
import vn.momo.kits.const.Spacing
|
|
15
|
-
import vn.momo.kits.modifier.conditional
|
|
16
|
-
|
|
17
|
-
@Composable
|
|
18
|
-
fun PaginationWhiteDot(
|
|
19
|
-
activeIndex: Int = 0,
|
|
20
|
-
dataLength: Int = 3
|
|
21
|
-
) {
|
|
22
|
-
Row(
|
|
23
|
-
modifier = Modifier.background(
|
|
24
|
-
color = Color(0x33000000),
|
|
25
|
-
shape = RoundedCornerShape(Spacing.S)
|
|
26
|
-
)
|
|
27
|
-
.conditional(IsShowBaseLineDebug) {
|
|
28
|
-
border(1.dp, Colors.blue_03)
|
|
29
|
-
}
|
|
30
|
-
.padding(Spacing.XS)
|
|
31
|
-
) {
|
|
32
|
-
for (i in 0 until dataLength) {
|
|
33
|
-
Dot(
|
|
34
|
-
i == activeIndex,
|
|
35
|
-
Colors.black_01,
|
|
36
|
-
modifier = Modifier.padding(end = if (i != dataLength - 1) Spacing.XS else 0.dp)
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,352 +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.interaction.MutableInteractionSource
|
|
7
|
-
import androidx.compose.foundation.layout.Arrangement
|
|
8
|
-
import androidx.compose.foundation.layout.Box
|
|
9
|
-
import androidx.compose.foundation.layout.Column
|
|
10
|
-
import androidx.compose.foundation.layout.Row
|
|
11
|
-
import androidx.compose.foundation.layout.Spacer
|
|
12
|
-
import androidx.compose.foundation.layout.aspectRatio
|
|
13
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
14
|
-
import androidx.compose.foundation.layout.height
|
|
15
|
-
import androidx.compose.foundation.layout.offset
|
|
16
|
-
import androidx.compose.foundation.layout.padding
|
|
17
|
-
import androidx.compose.foundation.layout.width
|
|
18
|
-
import androidx.compose.foundation.lazy.LazyColumn
|
|
19
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
20
|
-
import androidx.compose.runtime.Composable
|
|
21
|
-
import androidx.compose.runtime.LaunchedEffect
|
|
22
|
-
import androidx.compose.runtime.MutableState
|
|
23
|
-
import androidx.compose.runtime.getValue
|
|
24
|
-
import androidx.compose.runtime.mutableStateOf
|
|
25
|
-
import androidx.compose.runtime.remember
|
|
26
|
-
import androidx.compose.runtime.setValue
|
|
27
|
-
import androidx.compose.ui.Alignment
|
|
28
|
-
import androidx.compose.ui.Modifier
|
|
29
|
-
import androidx.compose.ui.draw.clip
|
|
30
|
-
import androidx.compose.ui.text.TextLayoutResult
|
|
31
|
-
import androidx.compose.ui.unit.dp
|
|
32
|
-
import vn.momo.kits.const.AppTheme
|
|
33
|
-
import vn.momo.kits.const.Radius
|
|
34
|
-
import vn.momo.kits.const.Spacing
|
|
35
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
36
|
-
import vn.momo.kits.const.Colors
|
|
37
|
-
import vn.momo.kits.const.Typography
|
|
38
|
-
import vn.momo.kits.modifier.conditional
|
|
39
|
-
import vn.momo.kits.modifier.setAutomationId
|
|
40
|
-
import androidx.compose.ui.platform.LocalDensity
|
|
41
|
-
import androidx.compose.ui.unit.Dp
|
|
42
|
-
import vn.momo.kits.application.AppLanguage
|
|
43
|
-
import kotlin.math.min
|
|
44
|
-
|
|
45
|
-
data class PopupAction(
|
|
46
|
-
val title: String,
|
|
47
|
-
val onPress: (() -> Unit)?,
|
|
48
|
-
)
|
|
49
|
-
|
|
50
|
-
enum class PopupActionDirection {
|
|
51
|
-
ROW,
|
|
52
|
-
COLUMN,
|
|
53
|
-
AUTO
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
private fun heightForLines(
|
|
57
|
-
layout: TextLayoutResult,
|
|
58
|
-
targetLines: Float
|
|
59
|
-
): Float {
|
|
60
|
-
val clampedLines = targetLines.coerceAtLeast(1f)
|
|
61
|
-
val wholeLines = kotlin.math.floor(clampedLines).toInt()
|
|
62
|
-
val fractionalPart = clampedLines - wholeLines
|
|
63
|
-
|
|
64
|
-
val baseLineIndex = (wholeLines - 1)
|
|
65
|
-
.coerceAtLeast(0)
|
|
66
|
-
.coerceAtMost(layout.lineCount - 1)
|
|
67
|
-
|
|
68
|
-
var heightPx = layout.getLineBottom(baseLineIndex)
|
|
69
|
-
|
|
70
|
-
if (fractionalPart > 0f) {
|
|
71
|
-
val nextLineIndex = (baseLineIndex + 1)
|
|
72
|
-
.coerceAtMost(layout.lineCount - 1)
|
|
73
|
-
val nextBottomPx = layout.getLineBottom(nextLineIndex)
|
|
74
|
-
heightPx += (nextBottomPx - heightPx) * fractionalPart
|
|
75
|
-
}
|
|
76
|
-
return heightPx
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
data class PopupNotifyProps(
|
|
80
|
-
val image: String = "",
|
|
81
|
-
val title: String = "Title",
|
|
82
|
-
val description: String = "Description",
|
|
83
|
-
val error: String = "",
|
|
84
|
-
val primary: PopupAction? = null,
|
|
85
|
-
val secondary: PopupAction? = null,
|
|
86
|
-
val buttonDirection: PopupActionDirection = PopupActionDirection.ROW,
|
|
87
|
-
val onIconClose: () -> Unit,
|
|
88
|
-
val isShowCloseIcon: Boolean = true,
|
|
89
|
-
)
|
|
90
|
-
|
|
91
|
-
@Composable
|
|
92
|
-
fun PopupNotify(
|
|
93
|
-
props: PopupNotifyProps,
|
|
94
|
-
) {
|
|
95
|
-
var isScroll by remember { mutableStateOf(false) }
|
|
96
|
-
val layoutResult = remember { mutableStateOf<TextLayoutResult?>(null) }
|
|
97
|
-
|
|
98
|
-
val density = LocalDensity.current
|
|
99
|
-
var scrollHeight: Dp by remember { mutableStateOf(0.dp) }
|
|
100
|
-
|
|
101
|
-
LaunchedEffect(layoutResult.value) {
|
|
102
|
-
if ((layoutResult.value?.lineCount ?: 0) > 3) {
|
|
103
|
-
isScroll = true
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
val language = AppLanguage.current ?: "vi"
|
|
108
|
-
val errorCode: Map<String, String> = mapOf("vi" to "Mã lỗi: ", "en" to "Error code: ")
|
|
109
|
-
|
|
110
|
-
LaunchedEffect(layoutResult.value) {
|
|
111
|
-
layoutResult.value?.let { v ->
|
|
112
|
-
// cap visible height at ~8.5 lines
|
|
113
|
-
val textPx = v.size.height.toFloat()
|
|
114
|
-
val capPx = heightForLines(v, 8.5f)
|
|
115
|
-
|
|
116
|
-
isScroll = textPx >= capPx
|
|
117
|
-
scrollHeight = with(density) { min(textPx, capPx).toDp() }
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
val content: @Composable (Modifier) -> Unit = if (isScroll) {
|
|
122
|
-
{ modifier ->
|
|
123
|
-
LazyColumn(
|
|
124
|
-
modifier = modifier.height(scrollHeight)
|
|
125
|
-
) {
|
|
126
|
-
item {
|
|
127
|
-
Text(
|
|
128
|
-
text = props.description,
|
|
129
|
-
onTextLayout = { layoutResult.value = it },
|
|
130
|
-
style = Typography.bodyDefaultRegular
|
|
131
|
-
)
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
} else {
|
|
136
|
-
{ modifier ->
|
|
137
|
-
Box(modifier = modifier) {
|
|
138
|
-
Text(
|
|
139
|
-
text = props.description,
|
|
140
|
-
onTextLayout = { layoutResult.value = it },
|
|
141
|
-
style = Typography.bodyDefaultRegular
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
fun onClose(callback: (() -> Unit)?) {
|
|
148
|
-
callback?.invoke()
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
Box(
|
|
152
|
-
Modifier.setAutomationId("popup_notify"), contentAlignment = Alignment.TopEnd
|
|
153
|
-
) {
|
|
154
|
-
Column(
|
|
155
|
-
modifier = Modifier
|
|
156
|
-
.fillMaxWidth()
|
|
157
|
-
.padding(horizontal = 12.dp)
|
|
158
|
-
.clip(RoundedCornerShape(Radius.L))
|
|
159
|
-
.background(
|
|
160
|
-
AppTheme.current.colors.background.surface,
|
|
161
|
-
RoundedCornerShape(Radius.L)
|
|
162
|
-
)
|
|
163
|
-
.conditional(IsShowBaseLineDebug) {
|
|
164
|
-
border(1.dp, Colors.blue_03)
|
|
165
|
-
}
|
|
166
|
-
) {
|
|
167
|
-
if(props.image.isNotEmpty()) {
|
|
168
|
-
Image(
|
|
169
|
-
source = props.image,
|
|
170
|
-
modifier = Modifier.fillMaxWidth().aspectRatio(1.777f),
|
|
171
|
-
options = Options(alignment = Alignment.Center)
|
|
172
|
-
)
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
Column(modifier = Modifier.padding(Spacing.XL)) {
|
|
176
|
-
Text(
|
|
177
|
-
style = Typography.headerDefaultBold,
|
|
178
|
-
maxLines = 2,
|
|
179
|
-
text = props.title,
|
|
180
|
-
modifier = Modifier.setAutomationId("title_popup_permission")
|
|
181
|
-
)
|
|
182
|
-
content(Modifier.padding(top = Spacing.S))
|
|
183
|
-
if (props.error.isNotEmpty()) {
|
|
184
|
-
Text(
|
|
185
|
-
text = errorCode[language] + props.error,
|
|
186
|
-
style = Typography.descriptionXsRegular,
|
|
187
|
-
color = AppTheme.current.colors.text.hint,
|
|
188
|
-
maxLines = 1,
|
|
189
|
-
modifier = Modifier.padding(top = Spacing.S)
|
|
190
|
-
)
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
Box(
|
|
195
|
-
modifier = Modifier.padding(horizontal = Spacing.XL)
|
|
196
|
-
.padding(bottom = Spacing.XL)
|
|
197
|
-
) {
|
|
198
|
-
BuildAction(props.primary, props.secondary, props.buttonDirection, onAction = { callback ->
|
|
199
|
-
onClose(callback)
|
|
200
|
-
})
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
if(props.isShowCloseIcon) {
|
|
205
|
-
Box(
|
|
206
|
-
Modifier
|
|
207
|
-
.width(22.dp)
|
|
208
|
-
.height(22.dp)
|
|
209
|
-
.offset(x = -(1).dp, y = (-11).dp)
|
|
210
|
-
.background(
|
|
211
|
-
color = AppTheme.current.colors.text.default,
|
|
212
|
-
shape = RoundedCornerShape(Radius.M)
|
|
213
|
-
)
|
|
214
|
-
.border(
|
|
215
|
-
width = 2.dp,
|
|
216
|
-
color = AppTheme.current.colors.background.surface,
|
|
217
|
-
shape = RoundedCornerShape(Radius.M)
|
|
218
|
-
)
|
|
219
|
-
.clip(RoundedCornerShape(100))
|
|
220
|
-
.clickable(
|
|
221
|
-
interactionSource = remember { MutableInteractionSource() },
|
|
222
|
-
indication = null,
|
|
223
|
-
onClick = { onClose { props.onIconClose() } }
|
|
224
|
-
),
|
|
225
|
-
contentAlignment = Alignment.Center
|
|
226
|
-
) {
|
|
227
|
-
Icon(
|
|
228
|
-
source = "navigation_close",
|
|
229
|
-
color = AppTheme.current.colors.background.surface,
|
|
230
|
-
size = 16.dp,
|
|
231
|
-
modifier = Modifier.setAutomationId("ic_popup_close")
|
|
232
|
-
)
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
@Composable
|
|
239
|
-
fun BuildAction(
|
|
240
|
-
primary: PopupAction?,
|
|
241
|
-
secondary: PopupAction?,
|
|
242
|
-
buttonDirection: PopupActionDirection = PopupActionDirection.ROW,
|
|
243
|
-
onAction: (onPress: (() -> Unit)?) -> Unit,
|
|
244
|
-
) {
|
|
245
|
-
val closeAction = remember { mutableStateOf("button_action") }
|
|
246
|
-
when (buttonDirection) {
|
|
247
|
-
PopupActionDirection.AUTO -> {
|
|
248
|
-
if (secondary != null && (secondary.title.length > 12 || primary?.title?.length!! > 12)) {
|
|
249
|
-
renderColumn(
|
|
250
|
-
secondary = secondary,
|
|
251
|
-
onAction = onAction,
|
|
252
|
-
closeAction = closeAction,
|
|
253
|
-
primary = primary
|
|
254
|
-
)
|
|
255
|
-
} else {
|
|
256
|
-
renderRow(
|
|
257
|
-
secondary = secondary,
|
|
258
|
-
onAction = onAction,
|
|
259
|
-
closeAction = closeAction,
|
|
260
|
-
primary = primary
|
|
261
|
-
)
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
PopupActionDirection.ROW -> renderRow(
|
|
266
|
-
secondary = secondary,
|
|
267
|
-
onAction = onAction,
|
|
268
|
-
closeAction = closeAction,
|
|
269
|
-
primary = primary
|
|
270
|
-
)
|
|
271
|
-
|
|
272
|
-
else -> renderColumn(
|
|
273
|
-
secondary = secondary,
|
|
274
|
-
onAction = onAction,
|
|
275
|
-
closeAction = closeAction,
|
|
276
|
-
primary = primary
|
|
277
|
-
)
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
@Composable
|
|
282
|
-
fun renderRow(
|
|
283
|
-
secondary: PopupAction?,
|
|
284
|
-
closeAction: MutableState<String>,
|
|
285
|
-
primary: PopupAction?,
|
|
286
|
-
onAction: (onPress: (() -> Unit)?) -> Unit,
|
|
287
|
-
) {
|
|
288
|
-
Row(horizontalArrangement = Arrangement.Center) {
|
|
289
|
-
secondary?.let {
|
|
290
|
-
Box(Modifier.weight(1f)) {
|
|
291
|
-
Button(
|
|
292
|
-
size = Size.MEDIUM,
|
|
293
|
-
onClick = {
|
|
294
|
-
closeAction.value = "button_action"
|
|
295
|
-
onAction(it.onPress)
|
|
296
|
-
},
|
|
297
|
-
title = it.title,
|
|
298
|
-
type = ButtonType.TEXT,
|
|
299
|
-
modifier = Modifier.setAutomationId("btn_popup_cancel")
|
|
300
|
-
)
|
|
301
|
-
}
|
|
302
|
-
Spacer(modifier = Modifier.width(Spacing.S))
|
|
303
|
-
}
|
|
304
|
-
Box(Modifier.weight(1f)) {
|
|
305
|
-
Button(
|
|
306
|
-
size = Size.MEDIUM,
|
|
307
|
-
onClick = {
|
|
308
|
-
closeAction.value = "button_action"
|
|
309
|
-
onAction(primary?.onPress)
|
|
310
|
-
},
|
|
311
|
-
title = primary?.title ?: "",
|
|
312
|
-
modifier = Modifier.setAutomationId("btn_popup_allow")
|
|
313
|
-
)
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
@Composable
|
|
319
|
-
fun renderColumn(
|
|
320
|
-
secondary: PopupAction?,
|
|
321
|
-
closeAction: MutableState<String>,
|
|
322
|
-
primary: PopupAction?,
|
|
323
|
-
onAction: (onPress: (() -> Unit)?) -> Unit,
|
|
324
|
-
) {
|
|
325
|
-
Column(horizontalAlignment = Alignment.CenterHorizontally) {
|
|
326
|
-
Button(
|
|
327
|
-
size = Size.MEDIUM,
|
|
328
|
-
onClick = {
|
|
329
|
-
closeAction.value = "button_action"
|
|
330
|
-
onAction(primary?.onPress)
|
|
331
|
-
},
|
|
332
|
-
title = primary?.title ?: "",
|
|
333
|
-
modifier = Modifier.setAutomationId("btn_popup_allow")
|
|
334
|
-
)
|
|
335
|
-
secondary?.let {
|
|
336
|
-
Spacer(modifier = Modifier.height(Spacing.S))
|
|
337
|
-
secondary.let {
|
|
338
|
-
Button(
|
|
339
|
-
size = Size.MEDIUM,
|
|
340
|
-
onClick = {
|
|
341
|
-
closeAction.value = "button_action"
|
|
342
|
-
onAction(it.onPress)
|
|
343
|
-
},
|
|
344
|
-
title = it.title,
|
|
345
|
-
type = ButtonType.TEXT,
|
|
346
|
-
modifier = Modifier.setAutomationId("btn_popup_cancel")
|
|
347
|
-
)
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
@@ -1,103 +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.interaction.MutableInteractionSource
|
|
7
|
-
import androidx.compose.foundation.layout.Box
|
|
8
|
-
import androidx.compose.foundation.layout.Column
|
|
9
|
-
import androidx.compose.foundation.layout.aspectRatio
|
|
10
|
-
import androidx.compose.foundation.layout.fillMaxWidth
|
|
11
|
-
import androidx.compose.foundation.layout.height
|
|
12
|
-
import androidx.compose.foundation.layout.padding
|
|
13
|
-
import androidx.compose.foundation.layout.width
|
|
14
|
-
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
15
|
-
import androidx.compose.runtime.Composable
|
|
16
|
-
import androidx.compose.runtime.remember
|
|
17
|
-
import androidx.compose.ui.Alignment
|
|
18
|
-
import androidx.compose.ui.Modifier
|
|
19
|
-
import androidx.compose.ui.draw.clip
|
|
20
|
-
import androidx.compose.ui.layout.ContentScale
|
|
21
|
-
import androidx.compose.ui.unit.dp
|
|
22
|
-
import vn.momo.kits.const.AppTheme
|
|
23
|
-
import vn.momo.kits.const.Radius
|
|
24
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
25
|
-
import vn.momo.kits.const.Colors
|
|
26
|
-
import vn.momo.kits.const.Spacing
|
|
27
|
-
import vn.momo.kits.modifier.conditional
|
|
28
|
-
import vn.momo.kits.modifier.setAutomationId
|
|
29
|
-
import vn.momo.kits.utils.ifNotNull
|
|
30
|
-
|
|
31
|
-
@Composable
|
|
32
|
-
fun PopupPromotion(
|
|
33
|
-
source: String = "",
|
|
34
|
-
onPress: (() -> Unit) = {},
|
|
35
|
-
onClose: (() -> Unit) = {},
|
|
36
|
-
) {
|
|
37
|
-
Column(Modifier
|
|
38
|
-
.padding(horizontal = Spacing.M)
|
|
39
|
-
.conditional(IsShowBaseLineDebug) {
|
|
40
|
-
border(1.dp, Colors.blue_03)
|
|
41
|
-
}
|
|
42
|
-
.setAutomationId("popup_notify")) {
|
|
43
|
-
source.ifNotNull(
|
|
44
|
-
Image(
|
|
45
|
-
source = source,
|
|
46
|
-
modifier = Modifier.fillMaxWidth()
|
|
47
|
-
.aspectRatio(0.5625f)
|
|
48
|
-
.clickable(
|
|
49
|
-
interactionSource = remember { MutableInteractionSource() },
|
|
50
|
-
indication = null,
|
|
51
|
-
onClick = onPress
|
|
52
|
-
),
|
|
53
|
-
options = Options(alignment = Alignment.Center, contentScale = ContentScale.Fit)
|
|
54
|
-
), null
|
|
55
|
-
)
|
|
56
|
-
Box(
|
|
57
|
-
modifier = Modifier
|
|
58
|
-
.padding(top = Spacing.S)
|
|
59
|
-
.fillMaxWidth()
|
|
60
|
-
.width(40.dp)
|
|
61
|
-
.height(40.dp),
|
|
62
|
-
contentAlignment = Alignment.Center
|
|
63
|
-
) {
|
|
64
|
-
Box(
|
|
65
|
-
modifier = Modifier
|
|
66
|
-
.width(40.dp)
|
|
67
|
-
.height(40.dp)
|
|
68
|
-
.clickable(
|
|
69
|
-
interactionSource = remember { MutableInteractionSource() },
|
|
70
|
-
indication = null,
|
|
71
|
-
onClick = onClose
|
|
72
|
-
),
|
|
73
|
-
contentAlignment = Alignment.Center
|
|
74
|
-
) {
|
|
75
|
-
Box(
|
|
76
|
-
Modifier
|
|
77
|
-
.width(22.dp)
|
|
78
|
-
.height(22.dp)
|
|
79
|
-
.background(
|
|
80
|
-
color = AppTheme.current.colors.text.default,
|
|
81
|
-
shape = RoundedCornerShape(Radius.M)
|
|
82
|
-
)
|
|
83
|
-
.border(
|
|
84
|
-
width = 2.dp,
|
|
85
|
-
color = AppTheme.current.colors.background.surface,
|
|
86
|
-
shape = RoundedCornerShape(Radius.M)
|
|
87
|
-
)
|
|
88
|
-
.clip(RoundedCornerShape(100))
|
|
89
|
-
,
|
|
90
|
-
contentAlignment = Alignment.Center
|
|
91
|
-
) {
|
|
92
|
-
Icon(
|
|
93
|
-
source = "navigation_close",
|
|
94
|
-
color = AppTheme.current.colors.background.surface,
|
|
95
|
-
size = 16.dp,
|
|
96
|
-
modifier = Modifier.setAutomationId("ic_popup_close")
|
|
97
|
-
)
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.foundation.border
|
|
4
|
-
import androidx.compose.foundation.clickable
|
|
5
|
-
import androidx.compose.foundation.interaction.MutableInteractionSource
|
|
6
|
-
import androidx.compose.foundation.layout.Arrangement
|
|
7
|
-
import androidx.compose.foundation.layout.Box
|
|
8
|
-
import androidx.compose.foundation.layout.Row
|
|
9
|
-
import androidx.compose.foundation.layout.padding
|
|
10
|
-
import androidx.compose.foundation.layout.size
|
|
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.unit.dp
|
|
18
|
-
import vn.momo.kits.application.IsShowBaseLineDebug
|
|
19
|
-
import vn.momo.kits.const.AppTheme
|
|
20
|
-
import vn.momo.kits.const.Colors
|
|
21
|
-
import vn.momo.kits.const.Radius
|
|
22
|
-
import vn.momo.kits.const.Spacing
|
|
23
|
-
import vn.momo.kits.const.Typography
|
|
24
|
-
import vn.momo.kits.modifier.activeOpacityClickable
|
|
25
|
-
import vn.momo.kits.modifier.conditional
|
|
26
|
-
|
|
27
|
-
@Composable
|
|
28
|
-
fun Radio(
|
|
29
|
-
value: Any,
|
|
30
|
-
groupValue: Any,
|
|
31
|
-
disabled: Boolean = false,
|
|
32
|
-
onChange: () -> Unit = {},
|
|
33
|
-
label: String = "",
|
|
34
|
-
modifier: Modifier = Modifier,
|
|
35
|
-
) {
|
|
36
|
-
val selected = value == groupValue
|
|
37
|
-
val borderColor = when {
|
|
38
|
-
disabled && selected -> AppTheme.current.colors.background.tonal
|
|
39
|
-
disabled -> AppTheme.current.colors.text.disable
|
|
40
|
-
selected -> AppTheme.current.colors.primary
|
|
41
|
-
else -> AppTheme.current.colors.text.default
|
|
42
|
-
}
|
|
43
|
-
val borderWidth = if (selected) 6.dp else 2.dp
|
|
44
|
-
|
|
45
|
-
Row(
|
|
46
|
-
modifier = modifier.activeOpacityClickable(
|
|
47
|
-
onClick = onChange,
|
|
48
|
-
enabled = !disabled,
|
|
49
|
-
),
|
|
50
|
-
horizontalArrangement = Arrangement.Center,
|
|
51
|
-
verticalAlignment = Alignment.CenterVertically,
|
|
52
|
-
) {
|
|
53
|
-
Box(
|
|
54
|
-
modifier = modifier
|
|
55
|
-
.padding(end = if (label.isEmpty()) 0.dp else Spacing.XS)
|
|
56
|
-
.border(borderWidth, borderColor, RoundedCornerShape(Radius.M))
|
|
57
|
-
.conditional(IsShowBaseLineDebug) {
|
|
58
|
-
border(1.dp, Colors.blue_03)
|
|
59
|
-
}
|
|
60
|
-
.clip(RoundedCornerShape(Radius.M))
|
|
61
|
-
.size(20.dp)
|
|
62
|
-
)
|
|
63
|
-
if (label.isNotEmpty()) {
|
|
64
|
-
Text(
|
|
65
|
-
style = Typography.descriptionDefaultRegular,
|
|
66
|
-
text = label,
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
package vn.momo.kits.components
|
|
2
|
-
|
|
3
|
-
import androidx.compose.runtime.Composable
|
|
4
|
-
import androidx.compose.runtime.CompositionLocalProvider
|
|
5
|
-
import vn.momo.kits.application.ScaleSizeMaxRate
|
|
6
|
-
|
|
7
|
-
@Composable
|
|
8
|
-
fun ScaleSizeScope(
|
|
9
|
-
scaleSizeMaxRate: Float? = null,
|
|
10
|
-
content: @Composable () -> Unit
|
|
11
|
-
) {
|
|
12
|
-
CompositionLocalProvider(
|
|
13
|
-
ScaleSizeMaxRate provides scaleSizeMaxRate,
|
|
14
|
-
) {
|
|
15
|
-
content()
|
|
16
|
-
}
|
|
17
|
-
}
|