@momo-kits/native-kits 0.167.1-duo.2 → 0.167.1-duo.2-debug
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/build.gradle.kts +11 -0
- package/compose/build.gradle.kts +190 -0
- package/compose/build.gradle.kts.backup +190 -0
- package/compose/compose.podspec +47 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +19 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +12 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +7 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +151 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +124 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +183 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +39 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +293 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +831 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +110 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +378 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +56 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +82 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +338 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +175 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +356 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +113 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +89 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +128 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +209 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +542 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +49 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +125 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +231 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +189 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +475 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +114 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +266 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +240 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +223 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +264 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +185 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +343 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +84 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +334 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +98 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +310 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +59 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +21 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +90 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +323 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +220 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +473 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +122 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +199 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +91 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +552 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +88 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +125 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +498 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +176 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +182 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +193 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +234 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +325 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +16 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitDesignSystem.kt +18 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +22 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +297 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +54 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +50 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/ScreenLayout.kt +157 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +66 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +104 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +48 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +299 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +58 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +129 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +106 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +205 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +393 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +622 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +148 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +35 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +175 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +232 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +169 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +381 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +83 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +105 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +74 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +347 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +37 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +363 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SideBar.kt +169 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +127 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +91 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +9 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +71 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +55 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +118 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +40 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +45 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +32 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +38 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +66 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +213 -0
- package/gradle/libs.versions.toml +69 -0
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +8 -0
- package/gradle.properties +26 -0
- package/gradlew +252 -0
- package/gradlew.bat +94 -0
- package/ios-demo/README.md +120 -0
- package/package.json +1 -1
- package/settings.gradle.kts +64 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
package vn.momo.kits.navigation.tracking
|
|
2
|
+
|
|
3
|
+
import vn.momo.kits.application.MiniAppContext
|
|
4
|
+
import vn.momo.maxapi.IMaxApi
|
|
5
|
+
import kotlin.time.Clock
|
|
6
|
+
import kotlin.time.ExperimentalTime
|
|
7
|
+
|
|
8
|
+
class ScreenTrackingState {
|
|
9
|
+
@OptIn(ExperimentalTime::class)
|
|
10
|
+
var time: Long = Clock.System.now().toEpochMilliseconds()
|
|
11
|
+
var releaseNavigated: Boolean = false
|
|
12
|
+
var releaseLoad: Boolean = false
|
|
13
|
+
var releaseInteraction: Boolean = false
|
|
14
|
+
var previousScreenName: String? = null
|
|
15
|
+
var action: String = "push"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
object ScreenTracker {
|
|
19
|
+
|
|
20
|
+
private var lastScreenName: String? = null
|
|
21
|
+
|
|
22
|
+
fun trackScreenNavigated(
|
|
23
|
+
maxApi: IMaxApi?,
|
|
24
|
+
context: MiniAppContext?,
|
|
25
|
+
screenName: String,
|
|
26
|
+
action: String,
|
|
27
|
+
state: ScreenTrackingState
|
|
28
|
+
) {
|
|
29
|
+
if (state.releaseNavigated) return
|
|
30
|
+
|
|
31
|
+
val previousScreen = lastScreenName
|
|
32
|
+
lastScreenName = screenName
|
|
33
|
+
|
|
34
|
+
maxApi?.track(
|
|
35
|
+
eventName = "auto_screen_navigated",
|
|
36
|
+
params = buildBaseParams(context, screenName).apply {
|
|
37
|
+
put("pre_screen_name", previousScreen)
|
|
38
|
+
put("state", "navigated")
|
|
39
|
+
put("action", action)
|
|
40
|
+
}
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
state.releaseNavigated = true
|
|
44
|
+
state.previousScreenName = previousScreen
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
fun trackScreenDisplayed(
|
|
48
|
+
maxApi: IMaxApi?,
|
|
49
|
+
context: MiniAppContext?,
|
|
50
|
+
screenName: String,
|
|
51
|
+
duration: Long,
|
|
52
|
+
state: ScreenTrackingState
|
|
53
|
+
) {
|
|
54
|
+
if (state.releaseLoad) return
|
|
55
|
+
|
|
56
|
+
maxApi?.track(
|
|
57
|
+
eventName = "auto_screen_displayed",
|
|
58
|
+
params = buildBaseParams(context, screenName).apply {
|
|
59
|
+
put("state", "load")
|
|
60
|
+
put("duration", duration)
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
state.releaseLoad = true
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
fun trackScreenInteracted(
|
|
68
|
+
maxApi: IMaxApi?,
|
|
69
|
+
context: MiniAppContext?,
|
|
70
|
+
screenName: String,
|
|
71
|
+
duration: Long,
|
|
72
|
+
totalDuration: Long,
|
|
73
|
+
state: ScreenTrackingState
|
|
74
|
+
) {
|
|
75
|
+
if (state.releaseInteraction) return
|
|
76
|
+
|
|
77
|
+
maxApi?.track(
|
|
78
|
+
eventName = "auto_screen_interacted",
|
|
79
|
+
params = buildBaseParams(context, screenName).apply {
|
|
80
|
+
put("state", "interaction")
|
|
81
|
+
put("duration", duration)
|
|
82
|
+
put("total_duration", totalDuration)
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
state.releaseInteraction = true
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private fun buildBaseParams(
|
|
90
|
+
context: MiniAppContext?,
|
|
91
|
+
screenName: String,
|
|
92
|
+
componentName: String = "Screen"
|
|
93
|
+
): MutableMap<String, Any?> {
|
|
94
|
+
return mutableMapOf(
|
|
95
|
+
"app_id" to context?.appId,
|
|
96
|
+
"feature_code" to context?.appCode,
|
|
97
|
+
"screen_name" to screenName,
|
|
98
|
+
"component_name" to componentName,
|
|
99
|
+
"tracking_source" to 1
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
fun trackPopupDisplayed(
|
|
104
|
+
maxApi: IMaxApi?,
|
|
105
|
+
context: MiniAppContext?,
|
|
106
|
+
parentScreenName: String?
|
|
107
|
+
) {
|
|
108
|
+
maxApi?.track(
|
|
109
|
+
eventName = "auto_popup_displayed",
|
|
110
|
+
params = mutableMapOf<String, Any?>(
|
|
111
|
+
"screen_name" to parentScreenName,
|
|
112
|
+
"tracking_source" to 1,
|
|
113
|
+
"app_id" to context?.appId,
|
|
114
|
+
"feature_code" to context?.appCode,
|
|
115
|
+
"kits_version" to null,
|
|
116
|
+
"component_name" to "Modal"
|
|
117
|
+
)
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
fun getLastScreenName(): String? = lastScreenName
|
|
122
|
+
|
|
123
|
+
@Suppress("UNUSED")
|
|
124
|
+
fun reset() {
|
|
125
|
+
lastScreenName = null
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package vn.momo.kits.platform
|
|
2
|
+
|
|
3
|
+
import androidx.compose.runtime.Composable
|
|
4
|
+
import androidx.compose.runtime.State
|
|
5
|
+
|
|
6
|
+
/** Fraction of container width, `null` when idle. Observe only — consuming would steal the
|
|
7
|
+
* gesture from NavHost. Always `null` on Android. */
|
|
8
|
+
@Composable
|
|
9
|
+
expect fun rememberBackGestureProgress(): State<Float?>
|
|
10
|
+
|
|
11
|
+
/** Android is a no-op: no host-owned recogniser to hand the gesture to. */
|
|
12
|
+
expect fun reportFloatingArrowBack(shouldUse: Boolean)
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
package vn.momo.kits.platform
|
|
2
|
+
|
|
3
|
+
import androidx.compose.foundation.Image
|
|
4
|
+
import androidx.compose.foundation.background
|
|
5
|
+
import androidx.compose.foundation.layout.Box
|
|
6
|
+
import androidx.compose.foundation.layout.fillMaxSize
|
|
7
|
+
import androidx.compose.runtime.Composable
|
|
8
|
+
import androidx.compose.runtime.LaunchedEffect
|
|
9
|
+
import androidx.compose.runtime.getValue
|
|
10
|
+
import androidx.compose.runtime.rememberUpdatedState
|
|
11
|
+
import androidx.compose.runtime.snapshotFlow
|
|
12
|
+
import androidx.compose.ui.Modifier
|
|
13
|
+
import androidx.compose.ui.graphics.Color
|
|
14
|
+
import io.github.alexzhirkevich.compottie.ExperimentalCompottieApi
|
|
15
|
+
import io.github.alexzhirkevich.compottie.LottieCompositionSpec
|
|
16
|
+
import io.github.alexzhirkevich.compottie.animateLottieCompositionAsState
|
|
17
|
+
import io.github.alexzhirkevich.compottie.dynamic.rememberLottieDynamicProperties
|
|
18
|
+
import io.github.alexzhirkevich.compottie.rememberLottieComposition
|
|
19
|
+
import io.github.alexzhirkevich.compottie.rememberLottiePainter
|
|
20
|
+
import vn.momo.kits.utils.readJson
|
|
21
|
+
|
|
22
|
+
@OptIn(ExperimentalCompottieApi::class)
|
|
23
|
+
@Composable
|
|
24
|
+
internal fun ComposeLottieAnimation(
|
|
25
|
+
path: String,
|
|
26
|
+
tintColor: Color?,
|
|
27
|
+
bgColor: Color?,
|
|
28
|
+
iterations: Int,
|
|
29
|
+
isPlaying: Boolean,
|
|
30
|
+
onEvent: ((String) -> Unit)?,
|
|
31
|
+
modifier: Modifier,
|
|
32
|
+
) {
|
|
33
|
+
val json = readJson(path)
|
|
34
|
+
|
|
35
|
+
if (json.isEmpty()) {
|
|
36
|
+
Box(modifier.background(bgColor ?: Color.Transparent))
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
val composition by rememberLottieComposition(json) {
|
|
41
|
+
LottieCompositionSpec.JsonString(json)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
val dynamicProperties = if (tintColor != null) {
|
|
45
|
+
rememberLottieDynamicProperties(tintColor) {
|
|
46
|
+
shapeLayer("**") {
|
|
47
|
+
fill("**") { color { tintColor } }
|
|
48
|
+
stroke("**") { color { tintColor } }
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
null
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
val lottieState = animateLottieCompositionAsState(
|
|
56
|
+
composition = composition,
|
|
57
|
+
iterations = iterations,
|
|
58
|
+
isPlaying = isPlaying,
|
|
59
|
+
restartOnPlay = false,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
val currentOnEvent by rememberUpdatedState(onEvent)
|
|
63
|
+
|
|
64
|
+
LaunchedEffect(isPlaying) {
|
|
65
|
+
currentOnEvent?.invoke(if (isPlaying) LottieEvent.Start else LottieEvent.Pause)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
LaunchedEffect(lottieState) {
|
|
69
|
+
var armed = false
|
|
70
|
+
snapshotFlow { lottieState.isAtEnd }.collect { atEnd ->
|
|
71
|
+
if (!atEnd) armed = true
|
|
72
|
+
else if (armed) { armed = false; currentOnEvent?.invoke(LottieEvent.Finish) }
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
Box(modifier.background(bgColor ?: Color.Transparent)) {
|
|
77
|
+
Image(
|
|
78
|
+
painter = rememberLottiePainter(
|
|
79
|
+
composition = composition,
|
|
80
|
+
progress = lottieState::value,
|
|
81
|
+
dynamicProperties = dynamicProperties,
|
|
82
|
+
enableExpressions = false,
|
|
83
|
+
expressionEngineFactory = { _, _ ->
|
|
84
|
+
error("Lottie JS expressions are disabled in MoMo kits")
|
|
85
|
+
},
|
|
86
|
+
),
|
|
87
|
+
contentDescription = null,
|
|
88
|
+
modifier = Modifier.fillMaxSize(),
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package vn.momo.kits.platform
|
|
2
|
+
|
|
3
|
+
import androidx.compose.runtime.Composable
|
|
4
|
+
|
|
5
|
+
// Overrides LocalDensity.fontScale with the live OS Dynamic Type scale so text re-scales while a
|
|
6
|
+
// screen is visible. Wrapped inside the containers so every screen is covered, not just callers of
|
|
7
|
+
// the app-level wrappers.
|
|
8
|
+
@Composable
|
|
9
|
+
expect fun ProvideOsFontScale(content: @Composable () -> Unit)
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package vn.momo.kits.platform
|
|
2
|
+
|
|
3
|
+
import androidx.compose.runtime.Composable
|
|
4
|
+
import androidx.compose.ui.Modifier
|
|
5
|
+
import androidx.compose.ui.graphics.Color
|
|
6
|
+
import androidx.compose.ui.graphics.NativePaint
|
|
7
|
+
import androidx.compose.ui.unit.Dp
|
|
8
|
+
import vn.momo.kits.navigation.Navigator
|
|
9
|
+
|
|
10
|
+
data class ScreenDimension(
|
|
11
|
+
val width: Int,
|
|
12
|
+
val height: Int,
|
|
13
|
+
)
|
|
14
|
+
|
|
15
|
+
expect fun getPlatformName(): String
|
|
16
|
+
|
|
17
|
+
@Composable
|
|
18
|
+
expect fun getScreenDimensions(): ScreenDimension
|
|
19
|
+
|
|
20
|
+
expect fun NativePaint.setMaskFilter(blurRadius: Float)
|
|
21
|
+
|
|
22
|
+
@Composable
|
|
23
|
+
expect fun getStatusBarHeight(): Dp
|
|
24
|
+
|
|
25
|
+
@Composable
|
|
26
|
+
expect fun BackHandler(enabled: Boolean, onBack: () -> Unit)
|
|
27
|
+
|
|
28
|
+
@Suppress("ParamsComparedByRef")
|
|
29
|
+
@Composable
|
|
30
|
+
expect fun ProvideNavigationEventDispatcherOwner(navigator: Navigator, content: @Composable () -> Unit)
|
|
31
|
+
|
|
32
|
+
@Composable
|
|
33
|
+
expect fun getScreenHeight(): Dp
|
|
34
|
+
|
|
35
|
+
sealed interface OSVersion {
|
|
36
|
+
val value: Int
|
|
37
|
+
data class Android(val sdk: Int) : OSVersion { override val value: Int get() = sdk }
|
|
38
|
+
data class IOS(val major: Int) : OSVersion { override val value: Int get() = major }
|
|
39
|
+
|
|
40
|
+
operator fun compareTo(other: Int): Int = value.compareTo(other)
|
|
41
|
+
}
|
|
42
|
+
expect fun getOSVersion(): OSVersion
|
|
43
|
+
|
|
44
|
+
fun supportsImePadding(): Boolean = when (val v = getOSVersion()) {
|
|
45
|
+
is OSVersion.Android -> v.sdk > 29
|
|
46
|
+
is OSVersion.IOS -> true
|
|
47
|
+
}
|
|
48
|
+
const val LottieIterateForever: Int = Int.MAX_VALUE
|
|
49
|
+
|
|
50
|
+
object LottieEvent {
|
|
51
|
+
const val Start = "start"
|
|
52
|
+
const val Pause = "pause"
|
|
53
|
+
const val Finish = "finish"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
@Composable
|
|
57
|
+
expect fun LottieAnimation(
|
|
58
|
+
path: String,
|
|
59
|
+
tintColor: Color? = null,
|
|
60
|
+
bgColor: Color? = null,
|
|
61
|
+
placedAsOverlay: Boolean = false,
|
|
62
|
+
iterations: Int = LottieIterateForever,
|
|
63
|
+
isPlaying: Boolean = true,
|
|
64
|
+
onEvent: ((String) -> Unit)? = null,
|
|
65
|
+
modifier: Modifier = Modifier,
|
|
66
|
+
useCompose: Boolean = false
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
expect fun NativePaint.setColor(
|
|
70
|
+
color: Color = Color.Black
|
|
71
|
+
)
|