@momo-kits/native-kits 0.167.1-beta.19-debug → 0.167.1-beta.20

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 (144) hide show
  1. package/ios/native-kits.podspec +1 -1
  2. package/ios-demo/MoMoUIKitsDemo.podspec +1 -1
  3. package/package.json +1 -1
  4. package/build.gradle.kts +0 -11
  5. package/compose/build.gradle.kts +0 -203
  6. package/compose/build.gradle.kts.backup +0 -203
  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 -151
  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 -124
  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 -831
  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 -49
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -86
  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 -189
  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 -266
  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 -223
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -264
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -185
  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 -220
  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 -552
  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 -125
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -207
  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 -176
  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/KitDesignSystem.kt +0 -18
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +0 -22
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -194
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -282
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -54
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -51
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -41
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -52
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -66
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -104
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -48
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -299
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +0 -58
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -129
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -106
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -201
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -393
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -595
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +0 -148
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +0 -35
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -184
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -217
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -169
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -357
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -83
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +0 -106
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +0 -75
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -309
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -39
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -364
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -127
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +0 -12
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -91
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +0 -9
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -71
  126. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  127. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
  128. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  129. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
  130. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +0 -40
  131. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +0 -45
  132. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +0 -32
  133. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +0 -38
  134. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +0 -66
  135. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -213
  136. package/gradle/libs.versions.toml +0 -69
  137. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  138. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  139. package/gradle.properties +0 -26
  140. package/gradlew +0 -252
  141. package/gradlew.bat +0 -94
  142. package/ios-demo/README.md +0 -120
  143. package/local.properties +0 -8
  144. package/settings.gradle.kts +0 -64
@@ -1,151 +0,0 @@
1
- package vn.momo.kits.platform
2
-
3
- import android.annotation.SuppressLint
4
- import android.content.res.Resources
5
- import android.graphics.BlurMaskFilter
6
- import android.graphics.PorterDuff
7
- import android.graphics.PorterDuffColorFilter
8
- import android.os.Build
9
- import androidx.compose.foundation.layout.Box
10
- import androidx.compose.runtime.Composable
11
- import androidx.compose.runtime.LaunchedEffect
12
- import androidx.compose.runtime.getValue
13
- import androidx.compose.runtime.rememberUpdatedState
14
- import androidx.compose.runtime.snapshotFlow
15
- import androidx.compose.ui.Modifier
16
- import androidx.compose.ui.graphics.Color
17
- import androidx.compose.ui.graphics.NativePaint
18
- import androidx.compose.ui.graphics.toArgb
19
- import androidx.compose.ui.platform.LocalConfiguration
20
- import androidx.compose.ui.semantics.contentDescription
21
- import androidx.compose.ui.semantics.semantics
22
- import androidx.compose.ui.unit.Dp
23
- import androidx.compose.ui.unit.dp
24
- import com.airbnb.lottie.LottieProperty
25
- import com.airbnb.lottie.compose.LottieAnimation
26
- import com.airbnb.lottie.compose.LottieCompositionSpec
27
- import com.airbnb.lottie.compose.animateLottieCompositionAsState
28
- import com.airbnb.lottie.compose.rememberLottieComposition
29
- import com.airbnb.lottie.compose.rememberLottieDynamicProperties
30
- import com.airbnb.lottie.compose.rememberLottieDynamicProperty
31
- import vn.momo.kits.const.AppNavigationBar
32
- import vn.momo.kits.const.AppStatusBar
33
- import vn.momo.kits.navigation.Navigator
34
- import vn.momo.kits.utils.readJson
35
- import androidx.activity.compose.BackHandler as AndroidBackHandler
36
-
37
- actual fun getPlatformName(): String = "Android"
38
-
39
- @Composable
40
- actual fun getScreenDimensions(): ScreenDimension {
41
- val config = LocalConfiguration.current
42
- return ScreenDimension(
43
- config.screenWidthDp, config.screenHeightDp
44
- )
45
- }
46
-
47
- actual fun NativePaint.setMaskFilter(blurRadius: Float) {
48
- this.maskFilter = BlurMaskFilter(blurRadius, BlurMaskFilter.Blur.NORMAL)
49
- }
50
-
51
- @SuppressLint("InternalInsetResource")
52
- @Composable
53
- actual fun getStatusBarHeight(): Dp {
54
- val resourceId = Resources.getSystem().getIdentifier(
55
- "status_bar_height",
56
- "dimen",
57
- "android"
58
- )
59
- return if(resourceId > 0) Resources.getSystem().getDimensionPixelSize(resourceId).dp else 0.dp
60
- }
61
-
62
- @Composable
63
- actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) {
64
- AndroidBackHandler(enabled = enabled, onBack = onBack)
65
- }
66
-
67
- @Composable
68
- actual fun ProvideNavigationEventDispatcherOwner(navigator: Navigator, content: @Composable () -> Unit) {
69
- content()
70
- }
71
-
72
- @Composable
73
- actual fun getScreenHeight(): Dp {
74
- return getScreenDimensions().height.dp + if (getOSVersion() >= 35) 0.dp else AppStatusBar.current + AppNavigationBar.current
75
- }
76
-
77
- actual fun getOSVersion(): OSVersion = OSVersion.Android(sdk = Build.VERSION.SDK_INT)
78
-
79
- @Composable
80
- actual fun LottieAnimation(
81
- path: String,
82
- tintColor: Color?,
83
- bgColor: Color?,
84
- placedAsOverlay: Boolean,
85
- iterations: Int,
86
- isPlaying: Boolean,
87
- onEvent: ((String) -> Unit)?,
88
- modifier: Modifier,
89
- useCompose: Boolean
90
- ) {
91
- if (useCompose) {
92
- ComposeLottieAnimation(path, tintColor, bgColor, iterations, isPlaying, onEvent, modifier)
93
- return
94
- }
95
-
96
- val json = readJson(path)
97
-
98
- if (json.isEmpty()) {
99
- Box(modifier)
100
- return
101
- }
102
-
103
- val composition by rememberLottieComposition(
104
- LottieCompositionSpec.JsonString(json)
105
- )
106
-
107
- val colorFilter = PorterDuffColorFilter(
108
- tintColor?.toArgb() ?: Color.White.toArgb(),
109
- PorterDuff.Mode.SRC_ATOP
110
- )
111
-
112
- val dynamicProperties = rememberLottieDynamicProperties(
113
- rememberLottieDynamicProperty(
114
- property = LottieProperty.COLOR_FILTER,
115
- value = colorFilter,
116
- keyPath = arrayOf("**")
117
- )
118
- )
119
-
120
- val lottieState = animateLottieCompositionAsState(
121
- composition = composition,
122
- iterations = iterations,
123
- isPlaying = isPlaying,
124
- restartOnPlay = false,
125
- )
126
-
127
- val currentOnEvent by rememberUpdatedState(onEvent)
128
-
129
- LaunchedEffect(isPlaying) {
130
- currentOnEvent?.invoke(if (isPlaying) LottieEvent.Start else LottieEvent.Pause)
131
- }
132
-
133
- LaunchedEffect(lottieState) {
134
- var armed = false
135
- snapshotFlow { lottieState.isAtEnd }.collect { atEnd ->
136
- if (!atEnd) armed = true
137
- else if (armed) { armed = false; currentOnEvent?.invoke(LottieEvent.Finish) }
138
- }
139
- }
140
-
141
- LottieAnimation(
142
- composition = composition,
143
- progress = { lottieState.progress },
144
- dynamicProperties = if (tintColor != null) dynamicProperties else null,
145
- modifier = modifier
146
- )
147
- }
148
-
149
- actual fun NativePaint.setColor(color: Color){
150
- this.color = color.toArgb()
151
- }
@@ -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,124 +0,0 @@
1
- package vn.momo.kits.application
2
-
3
- import androidx.compose.runtime.Immutable
4
- import androidx.compose.runtime.getValue
5
- import androidx.compose.runtime.mutableStateOf
6
- import androidx.compose.runtime.setValue
7
- import androidx.compose.runtime.staticCompositionLocalOf
8
- import vn.momo.kits.components.TrustBannerData
9
-
10
- @Immutable
11
- data class FeatureFlags(
12
- val showBaseLineDebug: Boolean? = false,
13
- )
14
-
15
- @Immutable
16
- data class DesignSystemConfig(
17
- val trustBanner: TrustBannerData? = null,
18
- val headerBar: String? = null,
19
- val headerGradient: String? = null,
20
- )
21
-
22
- // App-wide holder seeded by the host (same pattern as KitFontScale), so direct NavigationContainer
23
- // callers get the config without passing it. Snapshot state: a config fetched after first frame recomposes.
24
- object KitDesignSystemConfig {
25
- var config by mutableStateOf<DesignSystemConfig?>(null)
26
- private set
27
-
28
- fun update(config: DesignSystemConfig?) {
29
- this.config = config
30
- }
31
- }
32
-
33
- @Immutable
34
- data class MiniAppContext(
35
- val appIcon: String = "",
36
- val appName: Any? = null,
37
- val appId: String = "",
38
- val appCode: String = "",
39
- val description: Any? = null,
40
- val support: Map<String, Any?> = emptyMap(),
41
- val toolkitConfig: Map<String, Any?> = emptyMap(),
42
- val providerId: String = "",
43
- val permissions: List<Map<String, Any>>? = emptyList(),
44
- val features: FeatureFlags? = null,
45
- val scaleSizeMaxRate: Float? = null,
46
- val userScaleRate: Float? = null,
47
- val useOSScaleRate: Boolean? = null,
48
- ) {
49
- companion object {
50
-
51
- fun toMap(context: MiniAppContext?): Map<String, Any?> = mapOf(
52
- "icon" to (context?.appIcon ?: ""),
53
- "name" to context?.appName,
54
- "appId" to (context?.appId ?: ""),
55
- "code" to (context?.appCode ?: ""),
56
- "description" to (context?.description ?: ""),
57
- "support" to (context?.support ?: emptyMap()),
58
- "toolkitConfig" to (context?.toolkitConfig ?: emptyMap()),
59
- "providerId" to (context?.providerId ?: ""),
60
- "permissions" to (context?.permissions ?: emptyList()),
61
- )
62
-
63
- fun merge(parent: MiniAppContext?, child: MiniAppContext?): MiniAppContext? {
64
- if (parent == null && child == null) return null
65
- if (parent == null) return child
66
- if (child == null) return parent
67
-
68
- return MiniAppContext(
69
- appIcon = parent.appIcon.ifBlank { child.appIcon },
70
- appName = parent.appName ?: child.appName,
71
- appId = parent.appId.ifBlank { child.appId },
72
- appCode = parent.appCode.ifBlank { child.appCode },
73
- description = parent.description ?: child.description,
74
- support = mergeMaps(parent.support, child.support),
75
- toolkitConfig = mergeMaps(parent.toolkitConfig, child.toolkitConfig),
76
- providerId = parent.providerId.ifBlank { child.providerId },
77
- permissions = if (!parent.permissions.isNullOrEmpty()) parent.permissions else child.permissions,
78
- features = mergeFeatureFlags(parent.features, child.features),
79
- scaleSizeMaxRate = parent.scaleSizeMaxRate ?: child.scaleSizeMaxRate,
80
- userScaleRate = parent.userScaleRate ?: child.userScaleRate,
81
- useOSScaleRate = parent.useOSScaleRate ?: child.useOSScaleRate,
82
- )
83
- }
84
-
85
- private fun mergeMaps(parent: Map<String, Any?>, child: Map<String, Any?>): Map<String, Any?> {
86
- return child + parent
87
- }
88
-
89
- private fun mergeFeatureFlags(parent: FeatureFlags?, child: FeatureFlags?): FeatureFlags? {
90
- if (parent == null && child == null) return null
91
- if (parent == null) return child
92
- if (child == null) return parent
93
-
94
- return FeatureFlags(
95
- showBaseLineDebug = parent.showBaseLineDebug ?: child.showBaseLineDebug
96
- )
97
- }
98
- }
99
- }
100
-
101
- @Immutable
102
- data class ComponentInformation(
103
- val componentName: String? = null,
104
- val componentId: String? = null,
105
- val params: Map<String,Any?>? = null,
106
- val action: String? = null
107
- )
108
-
109
- var IsShowBaseLineDebug = false
110
-
111
- val LocalContext = staticCompositionLocalOf<MiniAppContext?> {
112
- null
113
- }
114
-
115
- val LocalComponentInformation = staticCompositionLocalOf<ComponentInformation?> {
116
- null
117
- }
118
-
119
- val LocalDesignSystemConfig = staticCompositionLocalOf<DesignSystemConfig?> {
120
- null
121
- }
122
-
123
- @Deprecated("Max font scale is fixed at MAX_FONT_SCALE (1.5); this CompositionLocal is no longer read.")
124
- 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
- )