@momo-kits/native-kits 0.164.1-beta.16-debug → 0.164.1-beta.17

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.
Files changed (140) hide show
  1. package/ios/native-kits.podspec +1 -1
  2. package/ios-demo/MoMoUIKitsDemo.podspec +1 -1
  3. package/package.json +2 -2
  4. package/build.gradle.kts +0 -11
  5. package/compose/build.gradle.kts +0 -190
  6. package/compose/build.gradle.kts.backup +0 -190
  7. package/compose/compose.podspec +0 -47
  8. package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +0 -19
  9. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +0 -6
  10. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +0 -12
  11. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +0 -7
  12. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -150
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -52
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -106
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -183
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -207
  17. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -39
  18. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
  19. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
  20. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -293
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -826
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +0 -269
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -110
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -378
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +0 -56
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +0 -157
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -82
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -338
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -175
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -356
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -113
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -89
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -128
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +0 -209
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -542
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -125
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -231
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -134
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -475
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -114
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -214
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -240
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -216
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -259
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -182
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -343
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +0 -108
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -84
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -328
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -97
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -310
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -59
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +0 -87
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +0 -21
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -90
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +0 -323
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +0 -217
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +0 -473
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +0 -122
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +0 -199
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -91
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -470
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -88
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -131
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -203
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -498
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -175
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +0 -182
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -193
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -234
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -188
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -325
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +0 -16
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +0 -22
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -188
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -263
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -52
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -38
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -39
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -52
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -66
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -104
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -48
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -299
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -129
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -103
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -191
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -386
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -610
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +0 -157
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +0 -39
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -156
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -225
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -169
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -320
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -81
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -309
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -34
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -360
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -127
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +0 -15
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -91
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +0 -9
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -69
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
  126. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +0 -40
  127. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +0 -125
  128. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +0 -32
  129. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +0 -35
  130. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +0 -66
  131. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -220
  132. package/gradle/libs.versions.toml +0 -69
  133. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  134. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  135. package/gradle.properties +0 -26
  136. package/gradlew +0 -252
  137. package/gradlew.bat +0 -94
  138. package/ios-demo/README.md +0 -120
  139. package/local.properties +0 -8
  140. package/settings.gradle.kts +0 -64
@@ -1,52 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.foundation.background
4
- import androidx.compose.foundation.layout.*
5
- import androidx.compose.foundation.shape.RoundedCornerShape
6
- import androidx.compose.runtime.Composable
7
- import androidx.compose.ui.Modifier
8
- import androidx.compose.ui.graphics.Color
9
- import androidx.compose.ui.unit.dp
10
- import androidx.compose.ui.zIndex
11
- import vn.momo.kits.components.InputSearch
12
- import vn.momo.kits.components.InputSearchProps
13
- import vn.momo.kits.const.Radius
14
- import vn.momo.kits.const.Spacing
15
-
16
- @Composable
17
- internal fun AnimationSearchInput(
18
- animations: HeaderAnimations,
19
- inputSearchProps: InputSearchProps
20
- ) {
21
- Box(
22
- modifier = Modifier
23
- .fillMaxWidth()
24
- .offset(
25
- x = animations.translateX.dp,
26
- y = animations.translateY.dp
27
- )
28
- ) {
29
- Box(
30
- modifier = Modifier
31
- .height(HEADER_HEIGHT.dp)
32
- .padding(vertical = Spacing.S)
33
- .zIndex(1f)
34
- ) {
35
- Box(
36
- modifier = Modifier
37
- .width(animations.width.dp)
38
- .background(
39
- color = animations.backgroundSearch,
40
- shape = RoundedCornerShape(Radius.XL)
41
- )
42
- ) {
43
- InputSearch(
44
- inputSearchProps = inputSearchProps.copy(
45
- showButtonText = false,
46
- backgroundColor = Color.Transparent
47
- )
48
- )
49
- }
50
- }
51
- }
52
- }
@@ -1,106 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.runtime.Immutable
4
- import androidx.compose.runtime.staticCompositionLocalOf
5
- import vn.momo.kits.components.TrustBannerData
6
-
7
- @Immutable
8
- data class FeatureFlags(
9
- val showBaseLineDebug: Boolean? = false,
10
- )
11
-
12
- @Immutable
13
- data class DesignSystemConfig(
14
- val trustBanner: TrustBannerData? = null,
15
- val headerBar: String? = null,
16
- val headerGradient: String? = null,
17
- )
18
-
19
- @Immutable
20
- data class MiniAppContext(
21
- val appIcon: String = "",
22
- val appName: Any? = null,
23
- val appId: String = "",
24
- val appCode: String = "",
25
- val description: Any? = null,
26
- val support: Map<String, Any?> = emptyMap(),
27
- val toolkitConfig: Map<String, Any?> = emptyMap(),
28
- val providerId: String = "",
29
- val permissions: List<Map<String, Any>>? = emptyList(),
30
- val features: FeatureFlags? = null,
31
- val scaleSizeMaxRate: Float? = null,
32
- val userScaleRate: Float? = null,
33
- val useOSScaleRate: Boolean? = null,
34
- ) {
35
- companion object {
36
-
37
- fun toMap(context: MiniAppContext?): Map<String, Any?> = mapOf(
38
- "icon" to (context?.appIcon ?: ""),
39
- "name" to context?.appName,
40
- "appId" to (context?.appId ?: ""),
41
- "code" to (context?.appCode ?: ""),
42
- "description" to (context?.description ?: ""),
43
- "support" to (context?.support ?: emptyMap()),
44
- "toolkitConfig" to (context?.toolkitConfig ?: emptyMap()),
45
- "providerId" to (context?.providerId ?: ""),
46
- "permissions" to (context?.permissions ?: emptyList()),
47
- )
48
-
49
- fun merge(parent: MiniAppContext?, child: MiniAppContext?): MiniAppContext? {
50
- if (parent == null && child == null) return null
51
- if (parent == null) return child
52
- if (child == null) return parent
53
-
54
- return MiniAppContext(
55
- appIcon = parent.appIcon.ifBlank { child.appIcon },
56
- appName = parent.appName ?: child.appName,
57
- appId = parent.appId.ifBlank { child.appId },
58
- appCode = parent.appCode.ifBlank { child.appCode },
59
- description = parent.description ?: child.description,
60
- support = mergeMaps(parent.support, child.support),
61
- toolkitConfig = mergeMaps(parent.toolkitConfig, child.toolkitConfig),
62
- providerId = parent.providerId.ifBlank { child.providerId },
63
- permissions = if (!parent.permissions.isNullOrEmpty()) parent.permissions else child.permissions,
64
- features = mergeFeatureFlags(parent.features, child.features),
65
- scaleSizeMaxRate = parent.scaleSizeMaxRate ?: child.scaleSizeMaxRate,
66
- userScaleRate = parent.userScaleRate ?: child.userScaleRate,
67
- useOSScaleRate = parent.useOSScaleRate ?: child.useOSScaleRate,
68
- )
69
- }
70
-
71
- private fun mergeMaps(parent: Map<String, Any?>, child: Map<String, Any?>): Map<String, Any?> {
72
- return child + parent
73
- }
74
-
75
- private fun mergeFeatureFlags(parent: FeatureFlags?, child: FeatureFlags?): FeatureFlags? {
76
- if (parent == null && child == null) return null
77
- if (parent == null) return child
78
- if (child == null) return parent
79
-
80
- return FeatureFlags(
81
- showBaseLineDebug = parent.showBaseLineDebug ?: child.showBaseLineDebug
82
- )
83
- }
84
- }
85
- }
86
-
87
- @Immutable
88
- data class ComponentInformation(
89
- val componentName: String? = null,
90
- val componentId: String? = null,
91
- val params: Map<String,Any?>? = null,
92
- val action: String? = null
93
- )
94
-
95
- var IsShowBaseLineDebug = false
96
-
97
- val LocalContext = staticCompositionLocalOf<MiniAppContext?> {
98
- null
99
- }
100
-
101
- val LocalComponentInformation = staticCompositionLocalOf<ComponentInformation?> {
102
- null
103
- }
104
-
105
- @Deprecated("Max font scale is fixed at MAX_FONT_SCALE (1.5); this CompositionLocal is no longer read.")
106
- val ScaleSizeMaxRate = staticCompositionLocalOf<Float?> { null }
@@ -1,183 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.animation.*
4
- import androidx.compose.animation.core.CubicBezierEasing
5
- import androidx.compose.animation.core.animateDpAsState
6
- import androidx.compose.animation.core.tween
7
- import androidx.compose.foundation.ScrollState
8
- import androidx.compose.foundation.background
9
- import androidx.compose.foundation.interaction.MutableInteractionSource
10
- import androidx.compose.foundation.layout.*
11
- import androidx.compose.material3.AlertDialogDefaults.shape
12
- import androidx.compose.material3.FloatingActionButton
13
- import androidx.compose.material3.FloatingActionButtonDefaults
14
- import androidx.compose.runtime.*
15
- import androidx.compose.runtime.saveable.rememberSaveable
16
- import androidx.compose.ui.Alignment
17
- import androidx.compose.ui.Modifier
18
- import androidx.compose.ui.graphics.Color
19
- import androidx.compose.ui.unit.Dp
20
- import androidx.compose.ui.unit.dp
21
- import androidx.compose.ui.zIndex
22
- import kotlinx.coroutines.delay
23
- import kotlinx.coroutines.flow.MutableStateFlow
24
- import kotlinx.coroutines.flow.collectLatest
25
- import kotlinx.coroutines.launch
26
- import vn.momo.kits.components.Icon
27
- import vn.momo.kits.components.Text
28
- import vn.momo.kits.const.Typography
29
- import kotlin.time.Duration.Companion.milliseconds
30
-
31
- enum class FABSize {
32
- SMALL,
33
- DEFAULT,
34
- }
35
-
36
- enum class FABPosition {
37
- END,
38
- CENTER,
39
- }
40
-
41
- data class FabProps(
42
- val icon: String,
43
- val iconColor: Color? = null,
44
- val label: String? = null,
45
- val onClick: () -> Unit,
46
- val size: FABSize = FABSize.DEFAULT,
47
- val bottom: Dp? = null,
48
- val scrollState: ScrollState? = null,
49
- val position: FABPosition? = FABPosition.END,
50
- )
51
-
52
- @Deprecated("Use vn.momo.kits.navigation.FloatingButton instead", ReplaceWith("vn.momo.kits.navigation.FloatingButton"))
53
- @Composable
54
- internal fun FloatingButton(
55
- scrollPosition: Int,
56
- bottom: Dp,
57
- onClick: () -> Unit,
58
- containerColor: Color,
59
- contentColor: Color = containerColor,
60
- icon: String,
61
- iconColor: Color? = null,
62
- text: String? = null,
63
- elevation: androidx.compose.material3.FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(
64
- 4.dp,
65
- 4.dp,
66
- 4.dp,
67
- 4.dp
68
- ),
69
- size: FABSize = FABSize.DEFAULT,
70
- position: FABPosition = FABPosition.END,
71
- keyboardSize: Dp = 0.dp,
72
- ) {
73
- val scrollPositionStateFlow = remember { MutableStateFlow(scrollPosition) }
74
- var lastScrollPosition by rememberSaveable { mutableStateOf(0) }
75
- val coroutineScope = rememberCoroutineScope()
76
- var isExpanded by rememberSaveable { mutableStateOf(false) }
77
-
78
- val startPadding = if (isExpanded) 12.dp else 0.dp
79
- val endPadding = if (isExpanded) 12.dp else 0.dp
80
- val widthIn = if ((size === FABSize.SMALL)) 36.dp else 48.dp
81
-
82
-
83
- val width = animateDpAsState(
84
- targetValue = if (isExpanded && text != null) 80.dp else widthIn,
85
- animationSpec = tween(
86
- durationMillis = 200,
87
- easing = CubicBezierEasing(0.2f, 0.2f, 0.2f, 0.2f),
88
- )
89
- )
90
-
91
- LaunchedEffect(text) {
92
- if (text != null) {
93
- coroutineScope.launch {
94
- scrollPositionStateFlow
95
- .collectLatest { debouncedScrollPosition ->
96
- isExpanded = debouncedScrollPosition > lastScrollPosition
97
- delay(300.milliseconds)
98
- lastScrollPosition = debouncedScrollPosition
99
-
100
- }
101
- }
102
- }
103
- }
104
-
105
- LaunchedEffect(scrollPosition) {
106
- scrollPositionStateFlow.value = scrollPosition
107
- }
108
-
109
- Box(
110
- Modifier
111
- .fillMaxSize()
112
- .padding(end = 12.dp, bottom = bottom)
113
- .offset(y = -keyboardSize)
114
- .background(Color.Transparent)
115
- .zIndex(10f),
116
- contentAlignment = if (position == FABPosition.END) Alignment.BottomEnd else Alignment.BottomCenter,
117
- ) {
118
- FloatingActionButton(
119
- onClick = onClick,
120
- shape = shape,
121
- containerColor = containerColor,
122
- contentColor = contentColor,
123
- elevation = elevation,
124
- interactionSource = remember { MutableInteractionSource() },
125
- modifier = Modifier
126
- .sizeIn(minWidth = width.value)
127
- .height(widthIn)
128
- ) {
129
- Row(
130
- modifier = Modifier.padding(start = startPadding, end = endPadding),
131
- verticalAlignment = Alignment.CenterVertically,
132
- horizontalArrangement = if (isExpanded) Arrangement.Start else Arrangement.Center
133
- ) {
134
- Icon(
135
- icon,
136
- size = if (size === FABSize.SMALL) 12.dp else 24.dp,
137
- color = iconColor ?: Color.White
138
- )
139
- AnimatedVisibility(
140
- visible = isExpanded,
141
- enter = ExtendedFabExpandAnimation,
142
- exit = ExtendedFabCollapseAnimation,
143
- ) {
144
- Row {
145
- Spacer(Modifier.width(12.dp))
146
- Text(
147
- text ?: "",
148
- color = Color.White,
149
- style = Typography.actionDefaultBold
150
- )
151
- }
152
- }
153
- }
154
- }
155
- }
156
- }
157
-
158
- private val ExtendedFabCollapseAnimation = fadeOut(
159
- animationSpec = tween(
160
- durationMillis = 800,
161
- easing = CubicBezierEasing(0.0f, 0.0f, 1.0f, 1.0f),
162
- )
163
- ) + shrinkHorizontally(
164
- animationSpec = tween(
165
- durationMillis = 500,
166
- easing = CubicBezierEasing(0.2f, 0.0f, 0.0f, 1.0f),
167
- ),
168
- shrinkTowards = Alignment.Start,
169
- )
170
-
171
- private val ExtendedFabExpandAnimation = fadeIn(
172
- animationSpec = tween(
173
- durationMillis = 200,
174
- delayMillis = 100,
175
- easing = CubicBezierEasing(0.0f, 0.0f, 1.0f, 1.0f),
176
- ),
177
- ) + expandHorizontally(
178
- animationSpec = tween(
179
- durationMillis = 500,
180
- easing = CubicBezierEasing(0.2f, 0.0f, 0.0f, 1.0f),
181
- ),
182
- expandFrom = Alignment.Start,
183
- )
@@ -1,207 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.animation.core.animateFloatAsState
4
- import androidx.compose.foundation.background
5
- import androidx.compose.foundation.border
6
- import androidx.compose.foundation.clickable
7
- import androidx.compose.foundation.layout.*
8
- import androidx.compose.foundation.shape.RoundedCornerShape
9
- import androidx.compose.runtime.*
10
- import androidx.compose.ui.Alignment
11
- import androidx.compose.ui.Modifier
12
- import androidx.compose.ui.graphics.Color
13
- import androidx.compose.ui.graphics.graphicsLayer
14
- import androidx.compose.ui.text.style.TextAlign
15
- import androidx.compose.ui.unit.Dp
16
- import androidx.compose.ui.unit.dp
17
- import androidx.compose.ui.zIndex
18
- import kotlinx.coroutines.flow.distinctUntilChanged
19
- import kotlinx.coroutines.flow.map
20
- import vn.momo.kits.components.Icon
21
- import vn.momo.kits.components.InputSearch
22
- import vn.momo.kits.components.InputSearchProps
23
- import vn.momo.kits.const.AppTheme
24
- import vn.momo.kits.const.Colors
25
- import vn.momo.kits.const.Spacing
26
- import vn.momo.kits.modifier.conditional
27
- import vn.momo.kits.modifier.setAutomationId
28
- import vn.momo.kits.utils.getAppStatusBarHeight
29
-
30
- data class HeaderColor(val tintIconColor: Color, val backgroundButton: Color, val borderColor: Color)
31
- fun getHeaderColor(animatedHeader: AnimatedHeader?, opacity: Float, tintColor: Color?, defaultColor: Color): HeaderColor{
32
- return if(animatedHeader !== null)
33
- if (opacity == 1f || !animatedHeader.isSurface)
34
- HeaderColor(
35
- tintIconColor = Colors.black_17,
36
- backgroundButton = Colors.black_01.copy(alpha = 0.6f),
37
- borderColor = Colors.black_20.copy(alpha = 0.2f)
38
- )
39
- else
40
- HeaderColor(
41
- tintIconColor = Colors.black_01,
42
- backgroundButton = Colors.black_20.copy(alpha = 0.6f),
43
- borderColor = Color.Transparent
44
- )
45
- else
46
- if (tintColor == Colors.black_01)
47
- HeaderColor(
48
- tintIconColor = tintColor,
49
- backgroundButton = Colors.black_20.copy(alpha = 0.6f),
50
- borderColor = Colors.black_01.copy(alpha = 0.2f)
51
- )
52
- else
53
- HeaderColor(
54
- tintIconColor = tintColor ?: defaultColor,
55
- backgroundButton = Colors.black_01.copy(alpha = 0.6f),
56
- borderColor = Colors.black_20.copy(alpha = 0.2f)
57
- )
58
- }
59
-
60
- @Deprecated("Use vn.momo.kits.navigation.component.Header instead", ReplaceWith("vn.momo.kits.navigation.component.Header"))
61
- @Composable
62
- internal fun Header(
63
- headerType: HeaderType = HeaderType.DEFAULT,
64
- titlePosition: TitlePosition,
65
- title: String,
66
- headerRight: @Composable (() -> Unit)? = null,
67
- goBack: (() -> Unit)? = null,
68
- opacity: Float = 1f,
69
- animatedHeader: AnimatedHeader? = null,
70
- scrollState: Int = 0,
71
- inputSearchProps: InputSearchProps? = null,
72
- headerRightWidth: Dp = 0.dp,
73
- useAnimationSearch: Boolean = false,
74
- tintColor: Color? = null
75
- ) {
76
- val statusBarHeight = getAppStatusBarHeight()
77
- val color = getHeaderColor(animatedHeader, opacity, tintColor, AppTheme.current.colors.text.default)
78
- val tintIconColor = color.tintIconColor
79
- val backgroundButton = color.backgroundButton
80
- val borderColor = color.borderColor
81
-
82
- var colorFraction by remember { mutableStateOf(0f) }
83
-
84
- LaunchedEffect(scrollState) {
85
- snapshotFlow { scrollState }
86
- .map { (it / 50f).coerceIn(0f, 1f) }
87
- .distinctUntilChanged()
88
- .collect { fraction -> colorFraction = fraction }
89
- }
90
- val animations = useHeaderSearchAnimation(
91
- opacityAni = opacity,
92
- scrollState = scrollState,
93
- headerRightWidth = headerRightWidth,
94
- isBack = goBack != null
95
- )
96
-
97
- val backgroundSearch = animateColor(
98
- Colors.black_01,
99
- AppTheme.current.colors.background.default,
100
- colorFraction
101
- )
102
-
103
- val searchAnimationEnable =
104
- inputSearchProps != null && useAnimationSearch && headerType == HeaderType.EXTENDED
105
- val animatedAlpha by animateFloatAsState(targetValue = opacity, label = "BackgroundAlpha")
106
-
107
- if (headerType != HeaderType.NONE) {
108
- BoxWithConstraints(
109
- Modifier.height(statusBarHeight + HEADER_HEIGHT.dp)
110
- .fillMaxWidth()
111
- .conditional(animatedHeader !== null) { background(Color.White.copy(alpha = animatedAlpha)) }
112
- .zIndex(10f),
113
- contentAlignment = Alignment.BottomCenter
114
- ) {
115
- Row(
116
- modifier = Modifier.height(HEADER_HEIGHT.dp)
117
- .fillMaxWidth()
118
- .padding(horizontal = Spacing.M),
119
- verticalAlignment = Alignment.CenterVertically,
120
- horizontalArrangement = Arrangement.SpaceBetween
121
- ) {
122
- Box {
123
- if (goBack != null) {
124
- Box(
125
- modifier = Modifier
126
- .size(28.dp)
127
- .then(
128
- Modifier.border(
129
- 0.2.dp,
130
- borderColor,
131
- RoundedCornerShape(100)
132
- )
133
- )
134
- .background(
135
- backgroundButton,
136
- RoundedCornerShape(100)
137
- )
138
- .clickable(
139
- onClick = goBack
140
- )
141
- .padding(Spacing.XS)
142
- .setAutomationId("btn_navigation_back"),
143
- contentAlignment = Alignment.Center
144
- ) {
145
- Icon(
146
- source = "arrow-back",
147
- color = tintIconColor,
148
- size = 20.dp,
149
- )
150
- }
151
- }
152
- }
153
-
154
- if (useAnimationSearch || inputSearchProps == null) {
155
- if(headerRight == null){
156
- HeaderRight(opacity = opacity, animatedHeader = animatedHeader, tintColor = tintColor)
157
- } else {
158
- headerRight.invoke()
159
- }
160
- }
161
- }
162
-
163
- // Title
164
- Row(
165
- modifier = Modifier.height(HEADER_HEIGHT.dp)
166
- .fillMaxWidth()
167
- .padding(horizontal = Spacing.M),
168
- verticalAlignment = Alignment.CenterVertically,
169
- ) {
170
- if (goBack != null && titlePosition == TitlePosition.LEFT) {
171
- Spacer(Modifier.width(40.dp))
172
- }
173
- if (inputSearchProps != null && !useAnimationSearch) {
174
- InputSearch(inputSearchProps = inputSearchProps.copy(backgroundColor = backgroundSearch))
175
- } else {
176
- Box(
177
- Modifier.weight(1f).graphicsLayer {
178
- alpha = if (useAnimationSearch) {
179
- 1f - (opacity)
180
- } else {
181
- 1f
182
- }
183
- },
184
- contentAlignment = if (titlePosition == TitlePosition.LEFT) Alignment.TopStart else Alignment.Center
185
- ) {
186
- HeaderTitle(
187
- title = title,
188
- color = tintIconColor,
189
- modifier = Modifier
190
- .setAutomationId("title_navigation_header")
191
- .fillMaxWidth(fraction = if(titlePosition == TitlePosition.LEFT) 0.7f else 0.5f)
192
- ,
193
- textAlign = if(titlePosition == TitlePosition.LEFT) TextAlign.Start else TextAlign.Center
194
- )
195
- }
196
- }
197
- }
198
-
199
- if (searchAnimationEnable) {
200
- AnimationSearchInput(
201
- animations = animations,
202
- inputSearchProps = inputSearchProps
203
- )
204
- }
205
- }
206
- }
207
- }
@@ -1,39 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.animation.core.animateFloatAsState
4
- import androidx.compose.foundation.layout.Box
5
- import androidx.compose.foundation.layout.fillMaxWidth
6
- import androidx.compose.foundation.layout.height
7
- import androidx.compose.runtime.Composable
8
- import androidx.compose.runtime.getValue
9
- import androidx.compose.ui.Modifier
10
- import androidx.compose.ui.graphics.graphicsLayer
11
- import androidx.compose.ui.unit.dp
12
- import vn.momo.kits.components.Image
13
-
14
- @Deprecated("Use vn.momo.kits.navigation.component.Header instead", ReplaceWith("vn.momo.kits.navigation.component.Header"))
15
- @Composable
16
- internal fun HeaderAnimated(image: String, scrollState: Int = 0) {
17
- // Scale animation
18
- val scale by animateFloatAsState(
19
- targetValue = when {
20
- scrollState < 0 -> (-(scrollState / 300f)).coerceIn(1f, 4f)
21
- scrollState.toFloat() in 0f..300f -> 1f
22
- else -> 1f
23
- }
24
- )
25
-
26
- // Translation Y animation
27
-
28
- Box(modifier = Modifier.fillMaxWidth().height(200.dp)
29
- .graphicsLayer {
30
- scaleX = scale
31
- scaleY = scale
32
- }) {
33
- if (image.isEmpty()) return
34
- Image(
35
- source = image,
36
- modifier = Modifier.fillMaxWidth().height(200.dp)
37
- )
38
- }
39
- }
@@ -1,86 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.animation.animateColorAsState
4
- import androidx.compose.animation.core.animateFloatAsState
5
- import androidx.compose.foundation.layout.Box
6
- import androidx.compose.foundation.layout.fillMaxWidth
7
- import androidx.compose.runtime.Composable
8
- import androidx.compose.runtime.getValue
9
- import androidx.compose.ui.Modifier
10
- import androidx.compose.ui.graphics.Color
11
- import vn.momo.kits.const.AppTheme
12
- import vn.momo.kits.utils.getAppStatusBarHeight
13
-
14
- enum class TitlePosition {
15
- LEFT, CENTER,
16
- }
17
-
18
- enum class AnimatedHeaderRatio(val value: Float){
19
- RATIO_16_9(16f / 9f),
20
- RATIO_1_1(1f),
21
- RATIO_3_2(3f / 2f)
22
- }
23
-
24
- data class AnimatedHeader(
25
- val aspectRatio: AnimatedHeaderRatio = AnimatedHeaderRatio.RATIO_16_9,
26
- val isSurface: Boolean = true,
27
- val composable: @Composable (scrollState: Int) -> Unit = {}
28
- )
29
-
30
- internal fun animateColor(start: Color, stop: Color, fraction: Float): Color {
31
- return Color(
32
- red = start.red + fraction * (stop.red - start.red),
33
- green = start.green + fraction * (stop.green - start.green),
34
- blue = start.blue + fraction * (stop.blue - start.blue),
35
- alpha = start.alpha + fraction * (stop.alpha - start.alpha)
36
- )
37
- }
38
-
39
- @Deprecated("Use vn.momo.kits.navigation.component.HeaderBackground instead", ReplaceWith("vn.momo.kits.navigation.component.HeaderBackground"))
40
- @Composable
41
- internal fun HeaderBackground(
42
- headerType: HeaderType = HeaderType.DEFAULT,
43
- scrollState: Int,
44
- headerTransparent: Boolean = false,
45
- ) {
46
- val statusBarHeight = getAppStatusBarHeight()
47
-
48
- val opacityAni by animateFloatAsState(
49
- targetValue = (1 - (scrollState / HEADER_HEIGHT * 1f)).coerceIn(0f, 1f),
50
- )
51
-
52
- val backgroundColor by animateColorAsState(
53
- targetValue = if (headerTransparent) {
54
- Color.Transparent
55
- } else {
56
- animateColor(
57
- Color.Transparent,
58
- AppTheme.current.colors.background.surface,
59
- opacityAni
60
- )
61
- }
62
- )
63
-
64
- when (headerType) {
65
- HeaderType.DEFAULT -> {
66
- HeaderDefault(
67
- opacityAni = opacityAni,
68
- statusBarHeight = statusBarHeight,
69
- backgroundColor = backgroundColor,
70
- headerTransparent = headerTransparent
71
- )
72
- }
73
-
74
- HeaderType.EXTENDED -> {
75
- HeaderExtended(
76
- opacityAni = opacityAni,
77
- statusBarHeight = statusBarHeight,
78
- backgroundColor = backgroundColor,
79
- )
80
- }
81
-
82
- else -> {
83
- Box(modifier = Modifier.fillMaxWidth())
84
- }
85
- }
86
- }