@momo-kits/native-kits 0.154.1-beta.6 → 0.154.1-beta.8

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.
@@ -0,0 +1,107 @@
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
+
8
+ private fun Map<String, Any?>?.string(key: String): String? =
9
+ (this?.get(key) as? String)
10
+
11
+ @Suppress("UNCHECKED_CAST")
12
+ private fun Map<String, Any?>?.mapStringAny(key: String): Map<String, Any?> =
13
+ (this?.get(key) as? Map<String, Any?>) ?: emptyMap()
14
+
15
+ @Suppress("UNCHECKED_CAST")
16
+ private fun Map<String, Any?>?.listOfMapStringAny(key: String): List<Map<String, Any>> =
17
+ (this?.get(key) as? List<Map<String, Any>>) ?: emptyList()
18
+
19
+ @Immutable
20
+ data class FeatureFlags(
21
+ val showBaseLineDebug: Boolean? = false,
22
+ )
23
+
24
+ @Immutable
25
+ data class KitConfig(
26
+ val trustBanner: TrustBannerData? = null,
27
+ val headerBar: String? = null,
28
+ val headerGradient: String? = null,
29
+ )
30
+
31
+ @Immutable
32
+ data class MiniAppContext(
33
+ val appIcon: String = "",
34
+ val appName: Any? = null,
35
+ val appId: String = "",
36
+ val appCode: String = "",
37
+ val description: Any? = null,
38
+ val support: Map<String, Any?> = emptyMap(),
39
+ val toolkitConfig: Map<String, Any?> = emptyMap(),
40
+ val providerId: String = "",
41
+ val permissions: List<Map<String, Any>>? = emptyList(),
42
+ val features: FeatureFlags? = null,
43
+ ) {
44
+ companion object {
45
+ private const val KEY_ICON = "icon"
46
+ private const val KEY_NAME = "name"
47
+ private const val KEY_APP_ID = "appId"
48
+ private const val KEY_CODE = "code"
49
+ private const val KEY_DESCRIPTION = "description"
50
+ private const val KEY_SUPPORT = "support"
51
+ private const val KEY_TOOLKIT_CFG = "toolkitConfig"
52
+ private const val KEY_PERMISSIONS = "permissions"
53
+ private const val KEY_ORIGIN_APP = "originAppId"
54
+
55
+ fun toMap(context: MiniAppContext?): Map<String, Any?> = mapOf(
56
+ "icon" to (context?.appIcon ?: ""),
57
+ "name" to context?.appName,
58
+ "appId" to (context?.appId ?: ""),
59
+ "code" to (context?.appCode ?: ""),
60
+ "description" to (context?.description ?: ""),
61
+ "support" to (context?.support ?: emptyMap()),
62
+ "toolkitConfig" to (context?.toolkitConfig ?: emptyMap()),
63
+ "providerId" to (context?.providerId ?: ""),
64
+ "permissions" to (context?.permissions ?: emptyList()),
65
+ )
66
+
67
+ fun fromMap(data: Map<String, Any?>?): MiniAppContext = MiniAppContext(
68
+ appIcon = data.string(KEY_ICON) ?: "",
69
+ appName = data?.get(KEY_NAME),
70
+ appId = data.string(KEY_APP_ID) ?: "",
71
+ appCode = data.string(KEY_CODE) ?: "",
72
+ description = data?.get(KEY_DESCRIPTION),
73
+ support = data.mapStringAny(KEY_SUPPORT),
74
+ toolkitConfig = data.mapStringAny(KEY_TOOLKIT_CFG),
75
+ providerId = computeProviderId(
76
+ originAppId = data.string(KEY_ORIGIN_APP),
77
+ appId = data.string(KEY_APP_ID)
78
+ ),
79
+ permissions = data.listOfMapStringAny(KEY_PERMISSIONS),
80
+ )
81
+
82
+ private fun computeProviderId(originAppId: String?, appId: String?): String {
83
+ val id = when {
84
+ !originAppId.isNullOrBlank() -> originAppId
85
+ !appId.isNullOrBlank() -> appId
86
+ else -> null
87
+ } ?: return "unknown"
88
+
89
+ val parts = id.split('.')
90
+ return parts.getOrNull(1) ?: "unknown"
91
+ }
92
+ }
93
+ }
94
+
95
+ val ApplicationContext = staticCompositionLocalOf<MiniAppContext?> {
96
+ null
97
+ }
98
+
99
+ val AppConfig = staticCompositionLocalOf<KitConfig?> {
100
+ null
101
+ }
102
+
103
+ val AppLanguage = staticCompositionLocalOf<String?> {
104
+ null
105
+ }
106
+
107
+ internal val ScaleSizeMaxRate = staticCompositionLocalOf<Float?> { null }
@@ -32,6 +32,7 @@ import vn.momo.kits.components.DotSize
32
32
  import vn.momo.kits.components.Icon
33
33
  import vn.momo.kits.const.AppTheme
34
34
  import vn.momo.kits.const.Colors
35
+ import vn.momo.kits.const.Spacing
35
36
 
36
37
  @Stable
37
38
  data class HeaderRightData(
@@ -77,11 +78,7 @@ data class NavigationButtonConfig(
77
78
  val onPress: () -> Unit
78
79
  )
79
80
 
80
- object Spacing {
81
- val M = 16.dp
82
- val S = 8.dp
83
- val XXS = 2.dp
84
- }
81
+
85
82
 
86
83
  @Deprecated("Use vn.momo.kits.navigation.component.HeaderRight instead", ReplaceWith("vn.momo.kits.navigation.component.HeaderRight"))
87
84
  @Composable
@@ -2,7 +2,6 @@ package vn.momo.kits.application
2
2
 
3
3
  import androidx.compose.runtime.Composable
4
4
  import androidx.compose.runtime.CompositionLocalProvider
5
- import androidx.compose.runtime.Immutable
6
5
  import androidx.compose.runtime.LaunchedEffect
7
6
  import androidx.compose.runtime.getValue
8
7
  import androidx.compose.runtime.mutableStateOf
@@ -10,7 +9,6 @@ import androidx.compose.runtime.remember
10
9
  import androidx.compose.runtime.setValue
11
10
  import androidx.compose.runtime.staticCompositionLocalOf
12
11
  import androidx.compose.ui.unit.Dp
13
- import vn.momo.kits.components.TrustBannerData
14
12
  import vn.momo.kits.const.AppStatusBar
15
13
  import vn.momo.kits.const.AppTheme
16
14
  import vn.momo.kits.const.Theme
@@ -64,123 +62,12 @@ class Navigator {
64
62
  }
65
63
  }
66
64
 
67
- @Immutable
68
- data class MiniAppContext(
69
- val appIcon: String = "",
70
- val appName: Any? = null,
71
- val appId: String = "",
72
- val appCode: String = "",
73
- val description: Any? = null,
74
- val support: Map<String, Any?> = emptyMap(),
75
- val toolkitConfig: Map<String, Any?> = emptyMap(),
76
- val providerId: String = "",
77
- val permissions: List<Map<String, Any>>? = emptyList(),
78
- val isBaselineEnabled: Boolean = false
79
- ) {
80
- companion object {
81
- private const val KEY_ICON = "icon"
82
- private const val KEY_NAME = "name"
83
- private const val KEY_APP_ID = "appId"
84
- private const val KEY_CODE = "code"
85
- private const val KEY_DESCRIPTION = "description"
86
- private const val KEY_SUPPORT = "support"
87
- private const val KEY_TOOLKIT_CFG = "toolkitConfig"
88
- private const val KEY_PERMISSIONS = "permissions"
89
- private const val KEY_ORIGIN_APP = "originAppId"
90
- private const val KEY_BASELINE_ENABLED = "isBaselineEnabled"
91
-
92
- fun toMap(context: MiniAppContext?): Map<String, Any?> = mapOf(
93
- "icon" to (context?.appIcon ?: ""),
94
- "name" to context?.appName,
95
- "appId" to (context?.appId ?: ""),
96
- "code" to (context?.appCode ?: ""),
97
- "description" to (context?.description ?: ""),
98
- "support" to (context?.support ?: emptyMap<String, Any?>()),
99
- "toolkitConfig" to (context?.toolkitConfig ?: emptyMap<String, Any?>()),
100
- "providerId" to (context?.providerId ?: ""),
101
- "permissions" to (context?.permissions ?: emptyList<Map<String, Any>>()),
102
- "isBaselineEnabled" to (context?.isBaselineEnabled ?: false)
103
- )
104
-
105
- fun fromMap(data: Map<String, Any?>?): MiniAppContext = MiniAppContext(
106
- appIcon = data.string(KEY_ICON) ?: "",
107
- appName = data?.get(KEY_NAME),
108
- appId = data.string(KEY_APP_ID) ?: "",
109
- appCode = data.string(KEY_CODE) ?: "",
110
- description = data?.get(KEY_DESCRIPTION),
111
- support = data.mapStringAny(KEY_SUPPORT),
112
- toolkitConfig = data.mapStringAny(KEY_TOOLKIT_CFG),
113
- providerId = computeProviderId(
114
- originAppId = data.string(KEY_ORIGIN_APP),
115
- appId = data.string(KEY_APP_ID)
116
- ),
117
- permissions = data.listOfMapStringAny(KEY_PERMISSIONS),
118
- isBaselineEnabled = data?.get(KEY_BASELINE_ENABLED) as Boolean
119
- )
120
-
121
- private fun computeProviderId(originAppId: String?, appId: String?): String {
122
- val id = when {
123
- !originAppId.isNullOrBlank() -> originAppId
124
- !appId.isNullOrBlank() -> appId
125
- else -> null
126
- } ?: return "unknown"
127
-
128
- val parts = id.split('.')
129
- return parts.getOrNull(1) ?: "unknown"
130
- }
131
- }
132
- }
133
-
134
- private fun Map<String, Any?>?.string(key: String): String? =
135
- (this?.get(key) as? String)
136
65
 
137
- @Suppress("UNCHECKED_CAST")
138
- private fun Map<String, Any?>?.mapStringAny(key: String): Map<String, Any?> =
139
- (this?.get(key) as? Map<String, Any?>) ?: emptyMap()
140
66
 
141
- @Suppress("UNCHECKED_CAST")
142
- private fun Map<String, Any?>?.listOfMapStringAny(key: String): List<Map<String, Any>> =
143
- (this?.get(key) as? List<Map<String, Any>>) ?: emptyList()
144
67
 
145
68
  @Deprecated("Use LocalApi instead", ReplaceWith("LocalApi"))
146
69
  val PlatformApi = staticCompositionLocalOf<Any?> { null }
147
70
 
148
- @Deprecated("Use LocalNavigator instead", ReplaceWith("LocalNavigator"))
149
- val AppNavigator = staticCompositionLocalOf<Navigator?> {
150
- null
151
- }
152
-
153
- val ApplicationContext = staticCompositionLocalOf<MiniAppContext?> {
154
- null
155
- }
156
-
157
- val AppConfig = staticCompositionLocalOf<KitConfig?> {
158
- null
159
- }
160
-
161
- val AppLanguage = staticCompositionLocalOf<String?> {
162
- null
163
- }
164
-
165
- val Feature = staticCompositionLocalOf<FeatureFlags?> {
166
- FeatureFlags(
167
- showBaseLineDebug = false
168
- )
169
- }
170
-
171
- @Immutable
172
- data class FeatureFlags(
173
- val showBaseLineDebug: Boolean? = false,
174
- )
175
-
176
- @Immutable
177
- data class KitConfig(
178
- val trustBanner: TrustBannerData? = null,
179
- val headerBar: String? = null,
180
- val headerGradient: String? = null,
181
- )
182
-
183
- internal var DesignSystemWhiteList: Boolean? = null
184
71
 
185
72
  @Deprecated("Use NavigationContainer instead", ReplaceWith("NavigationContainer"))
186
73
  @Composable
@@ -197,7 +84,6 @@ fun ApplicationContainer(
197
84
  var appTheme by remember { mutableStateOf(theme) }
198
85
 
199
86
  LaunchedEffect(Unit) {
200
- DesignSystemWhiteList = isWhiteList
201
87
  try {
202
88
  val headerBar = config?.headerBar
203
89
  if (headerBar != null && appTheme.assets.headerBackground == null) {
@@ -217,7 +103,6 @@ fun ApplicationContainer(
217
103
  CompositionLocalProvider(
218
104
  AppTheme provides appTheme,
219
105
  PlatformApi provides composeApi,
220
- AppNavigator provides Navigator(),
221
106
  AppStatusBar provides appStatusBarHeight,
222
107
  ApplicationContext provides applicationContext,
223
108
  AppConfig provides config,
@@ -2,9 +2,7 @@ package vn.momo.kits.components
2
2
 
3
3
  import androidx.compose.runtime.Composable
4
4
  import androidx.compose.runtime.CompositionLocalProvider
5
- import androidx.compose.runtime.staticCompositionLocalOf
6
-
7
- internal val ScaleSizeMaxRate = staticCompositionLocalOf<Float?> { null }
5
+ import vn.momo.kits.application.ScaleSizeMaxRate
8
6
 
9
7
  @Composable
10
8
  fun ScaleSizeScope(
@@ -12,7 +12,7 @@ import androidx.compose.ui.text.style.TextDecoration
12
12
  import androidx.compose.ui.text.style.TextOverflow
13
13
  import androidx.compose.ui.unit.TextUnit
14
14
  import androidx.compose.ui.unit.dp
15
- import vn.momo.kits.application.Feature
15
+ import vn.momo.kits.application.ApplicationContext
16
16
  import vn.momo.kits.const.AppTheme
17
17
  import vn.momo.kits.const.Colors
18
18
  import vn.momo.kits.const.Typography
@@ -38,6 +38,7 @@ fun Text(
38
38
  softWrap: Boolean = true,
39
39
  accessibilityId: String? = null
40
40
  ) {
41
+ val application = ApplicationContext.current
41
42
  // Cache theme access to avoid repeated lookups
42
43
  val theme = AppTheme.current
43
44
 
@@ -70,7 +71,7 @@ fun Text(
70
71
  }
71
72
 
72
73
  // on/off baseline config value, default will be false
73
- val showBaseLineDebug = Feature.current?.showBaseLineDebug ?: false
74
+ val showBaseLineDebug = application?.features?.showBaseLineDebug == true
74
75
 
75
76
  androidx.compose.material3.Text(
76
77
  modifier = modifier.conditional(showBaseLineDebug){
@@ -17,12 +17,10 @@ import androidx.compose.ui.draw.clip
17
17
  import androidx.compose.ui.graphics.Color
18
18
  import androidx.compose.ui.layout.ContentScale
19
19
  import androidx.compose.ui.unit.dp
20
- import androidx.compose.ui.unit.sp
21
20
  import vn.momo.kits.application.AppConfig
22
21
  import vn.momo.kits.application.AppLanguage
23
- import vn.momo.kits.modifier.noFeedbackClickable
24
- import vn.momo.kits.components.Text
25
22
  import vn.momo.kits.const.Typography
23
+ import vn.momo.kits.modifier.noFeedbackClickable
26
24
 
27
25
  val defaultBanner = TrustBannerData(
28
26
  content = mapOf(
@@ -15,10 +15,8 @@ import androidx.compose.ui.unit.sp
15
15
  import org.jetbrains.compose.resources.Font
16
16
  import org.jetbrains.compose.resources.FontResource
17
17
  import org.jetbrains.compose.resources.InternalResourceApi
18
- import vn.momo.kits.components.ScaleSizeMaxRate
18
+ import vn.momo.kits.application.ScaleSizeMaxRate
19
19
  import vn.momo.kits.platform.getScreenDimensions
20
- import kotlin.math.max
21
- import kotlin.math.min
22
20
  import vn.momo.uikits.resources.Res
23
21
  import vn.momo.uikits.resources.momosignature
24
22
  import vn.momo.uikits.resources.momotrustdisplay
@@ -31,6 +29,8 @@ import vn.momo.uikits.resources.sfprotext_regular
31
29
  import vn.momo.uikits.resources.sfprotext_semibold
32
30
  import vn.momo.uikits.resources.sfprotext_thin
33
31
  import vn.momo.uikits.resources.sfprotext_ultralight
32
+ import kotlin.math.max
33
+ import kotlin.math.min
34
34
 
35
35
  const val DEFAULT_SCREEN_SIZE = 375f
36
36
  const val MAX_FONT_SCALE = 1.5f
@@ -25,8 +25,6 @@ import androidx.navigation.toRoute
25
25
  import vn.momo.kits.application.AppConfig
26
26
  import vn.momo.kits.application.AppLanguage
27
27
  import vn.momo.kits.application.ApplicationContext
28
- import vn.momo.kits.application.Feature
29
- import vn.momo.kits.application.FeatureFlags
30
28
  import vn.momo.kits.application.KitConfig
31
29
  import vn.momo.kits.application.MiniAppContext
32
30
  import vn.momo.kits.const.AppNavigationBar
@@ -49,8 +47,7 @@ fun NavigationContainer(
49
47
  setNavigator: ((Navigator) -> Unit)? = null,
50
48
  statusBarHeight: Dp? = null,
51
49
  config: KitConfig? = null,
52
- language: String? = null,
53
- featureFlags: FeatureFlags
50
+ language: String? = null
54
51
  ){
55
52
  val navController = rememberNavController()
56
53
  val navigator = remember { Navigator(navController = navController, maxApi = maxApi) }
@@ -86,7 +83,6 @@ fun NavigationContainer(
86
83
  ApplicationContext provides applicationContext,
87
84
  AppConfig provides config,
88
85
  AppLanguage provides language,
89
- Feature provides featureFlags
90
86
  ) {
91
87
  LaunchedEffect(Unit) {
92
88
  setNavigator?.invoke(navigator)
@@ -26,11 +26,11 @@ import androidx.compose.ui.graphics.Color
26
26
  import androidx.compose.ui.unit.dp
27
27
  import vn.momo.kits.application.ApplicationContext
28
28
  import vn.momo.kits.application.MiniAppContext
29
- import vn.momo.kits.application.Spacing
30
29
  import vn.momo.kits.components.BadgeDot
31
30
  import vn.momo.kits.components.DotSize
32
31
  import vn.momo.kits.components.Icon
33
32
  import vn.momo.kits.const.Colors
33
+ import vn.momo.kits.const.Spacing
34
34
  import vn.momo.kits.modifier.activeOpacityClickable
35
35
  import vn.momo.kits.navigation.LocalMaxApi
36
36
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/native-kits",
3
- "version": "0.154.1-beta.6",
3
+ "version": "0.154.1-beta.8",
4
4
  "private": false,
5
5
  "dependencies": {
6
6
  "@momo-platform/native-max-api": "1.0.18"