@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.
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +107 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +2 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -115
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +1 -3
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +3 -2
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +1 -3
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +3 -3
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +1 -5
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +1 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
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
|
|
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.
|
|
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 =
|
|
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.
|
|
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
|
|