@momo-kits/native-kits 0.168.1-beta.11-debug → 0.168.1-beta.13

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 (147) hide show
  1. package/.claude/settings.local.json +185 -0
  2. package/CLAUDE.md +3 -2
  3. package/ios/Layout/ScreenLayout.swift +23 -3
  4. package/ios/Navigation/BottomSheet.swift +150 -22
  5. package/ios/Navigation/Component/SnackBar.swift +4 -0
  6. package/ios/Navigation/ModalScreen.swift +7 -3
  7. package/ios/Popup/PopupDisplay.swift +2 -2
  8. package/ios/Popup/PopupInput.swift +2 -2
  9. package/ios/Popup/PopupLayout.swift +15 -8
  10. package/ios/Popup/PopupNotify.swift +2 -2
  11. package/ios/native-kits.podspec +1 -1
  12. package/ios-demo/MoMoUIKitsDemo.podspec +1 -1
  13. package/package.json +1 -1
  14. package/build.gradle.kts +0 -11
  15. package/compose/build.gradle.kts +0 -198
  16. package/compose/build.gradle.kts.backup +0 -198
  17. package/compose/compose.podspec +0 -47
  18. package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +0 -20
  19. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +0 -6
  20. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +0 -12
  21. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +0 -7
  22. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -153
  23. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/ReservedRegions.android.kt +0 -6
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -110
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/DesignSystemKits.kt +0 -62
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -1071
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +0 -269
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +0 -56
  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 -81
  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 -357
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -115
  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 -478
  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 -265
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -235
  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 -265
  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 -361
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -108
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -308
  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 -330
  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 -207
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -92
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -560
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -86
  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 -501
  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 -236
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -180
  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 -17
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -194
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -287
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -54
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -50
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/ScreenLayout.kt +0 -306
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -41
  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 -338
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +0 -58
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -137
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -116
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -205
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -399
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -732
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +0 -148
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +0 -35
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -228
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -217
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/DuoBarCompression.kt +0 -97
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/DuoTabBar.kt +0 -377
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -169
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -455
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -105
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +0 -106
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +0 -74
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -399
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -39
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -363
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SideBar.kt +0 -192
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -133
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -127
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +0 -12
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -91
  126. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +0 -9
  127. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -74
  128. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ReservedRegions.kt +0 -20
  129. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  130. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
  131. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  132. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -118
  133. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +0 -42
  134. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +0 -45
  135. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +0 -32
  136. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +0 -38
  137. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +0 -66
  138. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -218
  139. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/ReservedRegions.ios.kt +0 -138
  140. package/gradle/libs.versions.toml +0 -69
  141. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  142. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  143. package/gradle.properties +0 -26
  144. package/gradlew +0 -252
  145. package/gradlew.bat +0 -94
  146. package/ios-demo/README.md +0 -120
  147. package/settings.gradle.kts +0 -64
@@ -1,153 +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
- actual fun isPhoneIdiom(): Boolean = false
40
-
41
- @Composable
42
- actual fun getScreenDimensions(): ScreenDimension {
43
- val config = LocalConfiguration.current
44
- return ScreenDimension(
45
- config.screenWidthDp, config.screenHeightDp
46
- )
47
- }
48
-
49
- actual fun NativePaint.setMaskFilter(blurRadius: Float) {
50
- this.maskFilter = BlurMaskFilter(blurRadius, BlurMaskFilter.Blur.NORMAL)
51
- }
52
-
53
- @SuppressLint("InternalInsetResource")
54
- @Composable
55
- actual fun getStatusBarHeight(): Dp {
56
- val resourceId = Resources.getSystem().getIdentifier(
57
- "status_bar_height",
58
- "dimen",
59
- "android"
60
- )
61
- return if(resourceId > 0) Resources.getSystem().getDimensionPixelSize(resourceId).dp else 0.dp
62
- }
63
-
64
- @Composable
65
- actual fun BackHandler(enabled: Boolean, onBack: () -> Unit) {
66
- AndroidBackHandler(enabled = enabled, onBack = onBack)
67
- }
68
-
69
- @Composable
70
- actual fun ProvideNavigationEventDispatcherOwner(navigator: Navigator, content: @Composable () -> Unit) {
71
- content()
72
- }
73
-
74
- @Composable
75
- actual fun getScreenHeight(): Dp {
76
- return getScreenDimensions().height.dp + if (getOSVersion() >= 35) 0.dp else AppStatusBar.current + AppNavigationBar.current
77
- }
78
-
79
- actual fun getOSVersion(): OSVersion = OSVersion.Android(sdk = Build.VERSION.SDK_INT)
80
-
81
- @Composable
82
- actual fun LottieAnimation(
83
- path: String,
84
- tintColor: Color?,
85
- bgColor: Color?,
86
- placedAsOverlay: Boolean,
87
- iterations: Int,
88
- isPlaying: Boolean,
89
- onEvent: ((String) -> Unit)?,
90
- modifier: Modifier,
91
- useCompose: Boolean
92
- ) {
93
- if (useCompose) {
94
- ComposeLottieAnimation(path, tintColor, bgColor, iterations, isPlaying, onEvent, modifier)
95
- return
96
- }
97
-
98
- val json = readJson(path)
99
-
100
- if (json.isEmpty()) {
101
- Box(modifier)
102
- return
103
- }
104
-
105
- val composition by rememberLottieComposition(
106
- LottieCompositionSpec.JsonString(json)
107
- )
108
-
109
- val colorFilter = PorterDuffColorFilter(
110
- tintColor?.toArgb() ?: Color.White.toArgb(),
111
- PorterDuff.Mode.SRC_ATOP
112
- )
113
-
114
- val dynamicProperties = rememberLottieDynamicProperties(
115
- rememberLottieDynamicProperty(
116
- property = LottieProperty.COLOR_FILTER,
117
- value = colorFilter,
118
- keyPath = arrayOf("**")
119
- )
120
- )
121
-
122
- val lottieState = animateLottieCompositionAsState(
123
- composition = composition,
124
- iterations = iterations,
125
- isPlaying = isPlaying,
126
- restartOnPlay = false,
127
- )
128
-
129
- val currentOnEvent by rememberUpdatedState(onEvent)
130
-
131
- LaunchedEffect(isPlaying) {
132
- currentOnEvent?.invoke(if (isPlaying) LottieEvent.Start else LottieEvent.Pause)
133
- }
134
-
135
- LaunchedEffect(lottieState) {
136
- var armed = false
137
- snapshotFlow { lottieState.isAtEnd }.collect { atEnd ->
138
- if (!atEnd) armed = true
139
- else if (armed) { armed = false; currentOnEvent?.invoke(LottieEvent.Finish) }
140
- }
141
- }
142
-
143
- LottieAnimation(
144
- composition = composition,
145
- progress = { lottieState.progress },
146
- dynamicProperties = if (tintColor != null) dynamicProperties else null,
147
- modifier = modifier
148
- )
149
- }
150
-
151
- actual fun NativePaint.setColor(color: Color){
152
- this.color = color.toArgb()
153
- }
@@ -1,6 +0,0 @@
1
- package vn.momo.kits.platform
2
-
3
- import androidx.compose.runtime.Composable
4
-
5
- @Composable
6
- internal actual fun rememberReservedRegions(): ReservedRegions = ReservedRegions()
@@ -1,110 +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
- val LocalDesignSystemConfig = staticCompositionLocalOf<DesignSystemConfig?> {
106
- null
107
- }
108
-
109
- @Deprecated("Max font scale is fixed at MAX_FONT_SCALE (1.5); this CompositionLocal is no longer read.")
110
- val ScaleSizeMaxRate = staticCompositionLocalOf<Float?> { null }
@@ -1,62 +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 kotlinx.coroutines.CoroutineScope
8
- import kotlinx.coroutines.Dispatchers
9
- import kotlinx.coroutines.Job
10
- import kotlinx.coroutines.SupervisorJob
11
- import kotlinx.coroutines.flow.Flow
12
- import kotlinx.coroutines.flow.MutableStateFlow
13
- import kotlinx.coroutines.flow.StateFlow
14
- import kotlinx.coroutines.flow.asStateFlow
15
- import kotlinx.coroutines.launch
16
-
17
- @Immutable
18
- data class DesignSystemKitsConfigs(
19
- val userScaleRate: Float = 1f,
20
- val useOSScaleRate: Boolean = true,
21
- val isWhiteList: Boolean = false,
22
- val designSystemConfig: DesignSystemConfig? = null,
23
- )
24
-
25
- // The kit is sandboxed from the host's storage/config, so the host implements this and hands it to init().
26
- interface DesignSystemKitsSource {
27
- // Sync read: seeds the kit before the first frame, so there is no default-then-real flicker.
28
- fun getConfigs(): DesignSystemKitsConfigs
29
-
30
- val configsFlow: Flow<DesignSystemKitsConfigs>
31
- }
32
-
33
- // App-wide design-system inputs (font scale, whitelist, remote config). scaleSize(), defaultTheme and
34
- // NavigationContainer fall back to these when no MiniAppContext / LocalDesignSystemConfig is provided.
35
- object DesignSystemKits {
36
- private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)
37
- private var observeJob: Job? = null
38
-
39
- // Snapshot state so Compose readers recompose (including non-composable getters like defaultTheme);
40
- // the StateFlow is for non-Compose observers, e.g. the host's SwiftUI bridge, where Compose's
41
- // global snapshot apply loop may never have started.
42
- private var currentConfigs by mutableStateOf(DesignSystemKitsConfigs())
43
- private val mutableConfigsFlow = MutableStateFlow(currentConfigs)
44
- val configsFlow: StateFlow<DesignSystemKitsConfigs> = mutableConfigsFlow.asStateFlow()
45
-
46
- // Idempotent: a repeated call (e.g. Activity re-creation) replaces the previous observer.
47
- fun init(source: DesignSystemKitsSource) {
48
- observeJob?.cancel()
49
- setConfigs(source.getConfigs())
50
- observeJob = scope.launch {
51
- source.configsFlow.collect { setConfigs(it) }
52
- }
53
- }
54
-
55
- // While init() is observing a source, its next emission overrides a value set here.
56
- fun setConfigs(configs: DesignSystemKitsConfigs) {
57
- currentConfigs = configs
58
- mutableConfigsFlow.value = configs
59
- }
60
-
61
- fun getConfigs(): DesignSystemKitsConfigs = currentConfigs
62
- }