@momo-kits/native-kits 0.167.1-beta.10-debug → 0.167.1-beta.11

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 (145) hide show
  1. package/ios/Application/ApplicationEnvironment.swift +6 -0
  2. package/ios/Application/Navigation/NavigationContainer.swift +4 -0
  3. package/ios/Colors+Radius+Spacing/Theme.swift +2 -2
  4. package/ios/Typography/Text.swift +0 -2
  5. package/package.json +1 -1
  6. package/build.gradle.kts +0 -11
  7. package/compose/build.gradle.kts +0 -190
  8. package/compose/build.gradle.kts.backup +0 -190
  9. package/compose/compose.podspec +0 -47
  10. package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +0 -19
  11. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +0 -6
  12. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +0 -12
  13. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +0 -7
  14. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -151
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -52
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -124
  17. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -183
  18. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -207
  19. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -39
  20. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -293
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -831
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +0 -269
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -110
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -378
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +0 -56
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +0 -157
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -82
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -338
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -175
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -356
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -113
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -89
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -128
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +0 -209
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -542
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -49
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -125
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -231
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -189
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -475
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -114
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -266
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -240
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -223
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -264
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -185
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -343
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +0 -108
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -84
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -328
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -97
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -310
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -59
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +0 -87
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +0 -21
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -90
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +0 -323
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +0 -220
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +0 -473
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +0 -122
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +0 -199
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -91
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -552
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -88
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -125
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -207
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -498
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -176
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +0 -182
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -193
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -234
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -188
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -325
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +0 -16
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitDesignSystem.kt +0 -18
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +0 -22
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -188
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -274
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -54
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -51
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -41
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -52
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -66
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -104
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -48
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -299
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +0 -58
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -129
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -106
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -201
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -393
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -595
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +0 -148
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +0 -35
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -175
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -225
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -169
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -357
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -83
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +0 -106
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +0 -75
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -309
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -36
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -365
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
  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 -71
  128. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  129. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
  130. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  131. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
  132. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +0 -40
  133. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +0 -45
  134. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +0 -32
  135. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +0 -38
  136. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +0 -66
  137. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -213
  138. package/gradle/libs.versions.toml +0 -69
  139. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  140. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  141. package/gradle.properties +0 -26
  142. package/gradlew +0 -252
  143. package/gradlew.bat +0 -94
  144. package/ios-demo/README.md +0 -120
  145. package/settings.gradle.kts +0 -64
@@ -1,365 +0,0 @@
1
- package vn.momo.kits.navigation.component
2
-
3
- import androidx.compose.foundation.background
4
- import androidx.compose.foundation.border
5
- import androidx.compose.foundation.layout.*
6
- import androidx.compose.foundation.shape.CircleShape
7
- import androidx.compose.foundation.shape.RoundedCornerShape
8
- import androidx.compose.foundation.text.BasicText
9
- import androidx.compose.foundation.text.TextAutoSize
10
- import androidx.compose.runtime.Composable
11
- import androidx.compose.runtime.Immutable
12
- import androidx.compose.runtime.remember
13
- import androidx.compose.ui.Alignment
14
- import androidx.compose.ui.Modifier
15
- import androidx.compose.ui.draw.clip
16
- import androidx.compose.ui.draw.clipToBounds
17
- import androidx.compose.ui.layout.ContentScale
18
- import androidx.compose.ui.text.TextStyle
19
- import androidx.compose.ui.text.font.FontWeight
20
- import androidx.compose.ui.text.style.TextOverflow
21
- import androidx.compose.ui.unit.Dp
22
- import androidx.compose.ui.unit.dp
23
- import androidx.compose.ui.unit.sp
24
- import vn.momo.kits.components.Image
25
- import vn.momo.kits.components.Options
26
- import vn.momo.kits.components.Skeleton
27
- import vn.momo.kits.components.Text
28
- import vn.momo.kits.const.AppTheme
29
- import vn.momo.kits.const.Colors
30
- import vn.momo.kits.const.KitDesignSystem
31
- import vn.momo.kits.const.Spacing
32
- import vn.momo.kits.const.Typography
33
- import vn.momo.kits.const.getFontFamily
34
- import vn.momo.kits.modifier.activeOpacityClickable
35
- import vn.momo.kits.navigation.component.HeaderTitle.User
36
- import vn.momo.kits.platform.getScreenDimensions
37
-
38
- @Composable
39
- internal fun HeaderUser(
40
- data: HeaderTitle
41
- ) {
42
- if (data !is User) return
43
-
44
- if (data.isLoading) {
45
- return TitleUserShimmer()
46
- }
47
-
48
- val maxWidth = getScreenDimensions().width.dp - 172.dp
49
-
50
- Row(
51
- modifier = Modifier
52
- .fillMaxWidth()
53
- .padding(vertical = Spacing.XS)
54
- .activeOpacityClickable(enabled = data.onPress != null, onClick = { data.onPress?.invoke() }),
55
- horizontalArrangement = Arrangement.SpaceBetween,
56
- verticalAlignment = Alignment.CenterVertically
57
- ) {
58
- Row(
59
- modifier = Modifier.widthIn(max = maxWidth),
60
- verticalAlignment = Alignment.CenterVertically
61
- ) {
62
- Box(modifier = Modifier.size(Spacing.XXL)) {
63
- AvatarGroup(urls = AvatarUrls(data.image ?: listOf()), title = data.title)
64
- if (data.dotColor != null) {
65
- Box(
66
- modifier = Modifier
67
- .align(Alignment.BottomEnd)
68
- .size(10.dp)
69
- .clip(CircleShape)
70
- .background(data.dotColor)
71
- )
72
- }
73
- }
74
-
75
- Spacer(Modifier.width(6.dp))
76
-
77
- Column(modifier = Modifier.weight(1f, fill = false)) {
78
- Row(verticalAlignment = Alignment.CenterVertically) {
79
- Text(
80
- text = data.title,
81
- color = data.tintColor,
82
- style = Typography.actionXsBold,
83
- fontFamily = if (KitDesignSystem.isWhiteList) "MoMoTrustDisplay" else "SFProText",
84
- maxLines = 1,
85
- overflow = TextOverflow.Ellipsis
86
- )
87
- if (data.icons.isNotEmpty()) {
88
- Spacer(Modifier.width(6.dp))
89
- Row(verticalAlignment = Alignment.CenterVertically) {
90
- data.icons.forEach { icon ->
91
- RemoteIcon16(url = icon)
92
- }
93
- }
94
- }
95
- }
96
-
97
- if (!data.subTitle.isNullOrEmpty()) {
98
- Spacer(Modifier.height(2.dp))
99
- Text(
100
- text = data.subTitle,
101
- color = data.tintColor,
102
- style = Typography.descriptionXsRegular,
103
- maxLines = 1,
104
- overflow = TextOverflow.Ellipsis
105
- )
106
- }
107
- }
108
- }
109
- }
110
- }
111
-
112
- @Composable
113
- private fun TitleUserShimmer() {
114
- val theme = AppTheme.current
115
- Row(
116
- modifier = Modifier
117
- .fillMaxWidth()
118
- .padding(vertical = Spacing.XS),
119
- verticalAlignment = Alignment.CenterVertically
120
- ) {
121
- Box(
122
- modifier = Modifier
123
- .size(Spacing.XXL)
124
- .clip(CircleShape)
125
- .background(theme.colors.border.default)
126
- ) {
127
- Skeleton()
128
- }
129
- Spacer(Modifier.width(Spacing.M / 2))
130
- Column(modifier = Modifier.fillMaxWidth()) {
131
- Box(
132
- modifier = Modifier
133
- .height(18.dp)
134
- .width(120.dp)
135
- .clip(RoundedCornerShape(8.dp))
136
- ) { Skeleton() }
137
- Spacer(Modifier.height(Spacing.XXS))
138
- Box(
139
- modifier = Modifier
140
- .height(12.dp)
141
- .width(120.dp)
142
- .clip(RoundedCornerShape(8.dp))
143
- ) { Skeleton() }
144
- }
145
- }
146
- }
147
-
148
- @Composable
149
- private fun AvatarGroup(
150
- urls: AvatarUrls?,
151
- title: String? = null,
152
- size: Dp = Spacing.XXL
153
- ) {
154
- val theme = AppTheme.current
155
- val modifierBorder = remember {
156
- Modifier.clip(CircleShape).border(width = (0.5).dp, color = theme.colors.border.default, shape = CircleShape)
157
- }
158
- val options = Options(
159
- contentScale = ContentScale.Crop,
160
- alignment = Alignment.Center
161
- )
162
-
163
- when (urls?.items?.size) {
164
- 0 -> InitialsAvatar(
165
- modifier = modifierBorder,
166
- name = title ?: "",
167
- fallbackInitials = null,
168
- size = size
169
- )
170
- 1 -> SingleAvatar(options = options, modifier = modifierBorder, urls.items[0], size)
171
- 2 -> TwoAvatar(options = options, modifier = modifierBorder, urls, size)
172
- 3 -> ThreeAvatar(options = options, modifier = modifierBorder, urls, size)
173
- 4 -> FourAvatar(options = options, modifier = modifierBorder, urls, size)
174
- else -> ManyAvatar(options = options, modifier = modifierBorder, urls!!, size)
175
- }
176
- }
177
-
178
- @Composable
179
- private fun SingleAvatar(options: Options, modifier: Modifier = Modifier, url: String, size: Dp) {
180
- Image(
181
- source = url,
182
- options = options,
183
- modifier = modifier
184
- .size(size)
185
- )
186
- }
187
-
188
- @Composable
189
- private fun TwoAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
190
- val child = 24.dp
191
- Box(modifier = Modifier.size(size)) {
192
- Image(
193
- source = urls.items[0],
194
- options = options,
195
- modifier = modifier
196
- .size(child)
197
- .align(Alignment.TopEnd)
198
- )
199
- Image(
200
- source = urls.items[1],
201
- options = options,
202
- modifier = modifier
203
- .size(child)
204
- .align(Alignment.BottomStart)
205
- )
206
- }
207
- }
208
-
209
- @Composable
210
- private fun ThreeAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
211
- val child = 16.dp
212
- Box(modifier = Modifier.size(size).padding(2.dp)) {
213
- Image(
214
- source = urls.items[0],
215
- options = options,
216
- modifier = modifier
217
- .size(child)
218
- .align(Alignment.BottomEnd)
219
- )
220
- Image(
221
- source = urls.items[1],
222
- options = options,
223
- modifier = modifier
224
- .size(child)
225
- .align(Alignment.TopCenter)
226
- )
227
- Image(
228
- source = urls.items[2],
229
- options = options,
230
- modifier = modifier
231
- .size(child)
232
- .align(Alignment.BottomStart)
233
- )
234
- }
235
- }
236
-
237
- @Composable
238
- private fun FourAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
239
- val child = 16.dp
240
- Box(modifier = Modifier.size(size).padding(1.dp)) {
241
- Image(
242
- source = urls.items[0],
243
- options = options,
244
- modifier = modifier
245
- .size(child)
246
- .align(Alignment.BottomStart)
247
- )
248
- Image(
249
- source = urls.items[1],
250
- options = options,
251
- modifier = modifier
252
- .size(child)
253
- .align(Alignment.BottomEnd)
254
- )
255
- Image(
256
- source = urls.items[2],
257
- options = options,
258
- modifier = modifier
259
- .size(child)
260
- .align(Alignment.TopEnd)
261
- )
262
- Image(
263
- source = urls.items[3],
264
- options = options,
265
- modifier = modifier
266
- .size(child)
267
- .align(Alignment.TopStart)
268
- )
269
- }
270
- }
271
-
272
- @Composable
273
- private fun ManyAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
274
- val child = 16.dp
275
- val more = urls.items.size - 3
276
- Box(modifier = Modifier.size(size).padding(1.dp)) {
277
- Image(
278
- source = urls.items[0],
279
- options = options,
280
- modifier = modifier
281
- .size(child)
282
- .align(Alignment.BottomStart)
283
- )
284
- Image(
285
- source = urls.items[1],
286
- options = options,
287
- modifier = modifier
288
- .size(child)
289
- .align(Alignment.TopEnd)
290
- )
291
- Image(
292
- source = urls.items[2],
293
- options = options,
294
- modifier = modifier
295
- .size(child)
296
- .align(Alignment.TopStart)
297
- )
298
- Box(
299
- modifier = modifier
300
- .size(child)
301
- .align(Alignment.BottomEnd)
302
- .background(Colors.pink_09)
303
- .padding(1.dp)
304
- .clipToBounds(),
305
- contentAlignment = Alignment.Center
306
- ) {
307
- BasicText(
308
- text = "+$more",
309
- style = TextStyle(
310
- color = Colors.pink_03,
311
- fontFamily = getFontFamily(AppTheme.current.font, FontWeight.Normal)
312
- ),
313
- maxLines = 1,
314
- autoSize = TextAutoSize.StepBased(
315
- minFontSize = 1.sp,
316
- maxFontSize = 10.sp,
317
- stepSize = 1.sp
318
- )
319
- )
320
- }
321
- }
322
- }
323
-
324
- @Composable
325
- private fun InitialsAvatar(
326
- modifier: Modifier = Modifier,
327
- name: String,
328
- fallbackInitials: String? = null,
329
- size: Dp = Spacing.XXL
330
- ) {
331
- val initials = remember(name, fallbackInitials) {
332
- fallbackInitials ?: run {
333
- val words = name.trim().split(Regex("\\s+")).takeLast(2)
334
- words.joinToString("") { it.firstOrNull()?.uppercase() ?: "" }
335
- }
336
- }
337
- Box(
338
- modifier = modifier
339
- .size(size)
340
- .background(Colors.pink_09),
341
- contentAlignment = Alignment.Center
342
- ) {
343
- Text(
344
- text = initials,
345
- color = Colors.pink_03,
346
- style = Typography.descriptionXsRegular
347
- )
348
- }
349
- }
350
-
351
- @Composable
352
- private fun RemoteIcon16(url: String) {
353
- Image(
354
- source = url,
355
- options = Options(
356
- contentScale = ContentScale.Crop
357
- ),
358
- modifier = Modifier
359
- .size(16.dp)
360
- .clip(RoundedCornerShape(4.dp)),
361
- )
362
- }
363
-
364
- @Immutable
365
- private data class AvatarUrls(val items: List<String>)
@@ -1,132 +0,0 @@
1
- package vn.momo.kits.navigation.component
2
-
3
- import androidx.compose.animation.core.Animatable
4
- import androidx.compose.animation.core.tween
5
- import androidx.compose.foundation.border
6
- import androidx.compose.foundation.layout.Box
7
- import androidx.compose.foundation.layout.fillMaxWidth
8
- import androidx.compose.foundation.layout.offset
9
- import androidx.compose.runtime.Composable
10
- import androidx.compose.runtime.DisposableEffect
11
- import androidx.compose.runtime.LaunchedEffect
12
- import androidx.compose.runtime.getValue
13
- import androidx.compose.runtime.mutableStateOf
14
- import androidx.compose.runtime.remember
15
- import androidx.compose.runtime.rememberCoroutineScope
16
- import androidx.compose.runtime.setValue
17
- import androidx.compose.ui.Modifier
18
- import androidx.compose.ui.layout.onGloballyPositioned
19
- import androidx.compose.ui.platform.LocalDensity
20
- import androidx.compose.ui.unit.IntOffset
21
- import androidx.compose.ui.unit.dp
22
- import kotlinx.coroutines.delay
23
- import vn.momo.kits.application.IsShowBaseLineDebug
24
- import vn.momo.kits.const.Colors
25
- import vn.momo.kits.modifier.conditional
26
- import kotlinx.coroutines.launch
27
- import vn.momo.kits.const.AppNavigationBar
28
- import vn.momo.kits.navigation.LocalFooterHeightPx
29
- import vn.momo.kits.navigation.LocalNavigator
30
- import vn.momo.kits.navigation.LocalOptions
31
- import vn.momo.kits.navigation.OverplayComponentRegistry
32
- import kotlin.time.Duration.Companion.milliseconds
33
-
34
- sealed class SnackBar(open val duration: Long? = null) {
35
- data class Custom(
36
- val content: @Composable () -> Unit,
37
- override val duration: Long? = 3000L
38
- ) : SnackBar(duration)
39
-
40
- data class Toast(
41
- override val duration: Long? = 3000L
42
- ) : SnackBar(duration)
43
- }
44
-
45
- @Composable
46
- internal fun SnackBar(
47
- data: SnackBar,
48
- onDismiss: (() -> Unit)?
49
- ) {
50
- val navigator = LocalNavigator.current
51
- val options = LocalOptions.current
52
- val density = LocalDensity.current
53
- val footerHeightPxState = LocalFooterHeightPx.current
54
- val navigationBar = AppNavigationBar.current
55
-
56
- val footerHeight = if (options.footerComponent != null) {
57
- footerHeightPxState.value
58
- } else {
59
- with(density){ navigationBar.toPx() }
60
- }.toInt()
61
-
62
- var startPosition by remember { mutableStateOf(Float.MAX_VALUE) }
63
- val targetPosition = 0f
64
-
65
- var offsetY by remember { mutableStateOf(Animatable(startPosition)) }
66
- val coroutineScope = rememberCoroutineScope()
67
-
68
- suspend fun openEvent() {
69
- offsetY.snapTo(startPosition)
70
- offsetY.animateTo(
71
- targetValue = targetPosition,
72
- animationSpec = tween(
73
- durationMillis = 350,
74
- )
75
- )
76
- }
77
-
78
- fun closeEvent() {
79
- coroutineScope.launch {
80
- offsetY.animateTo(
81
- targetValue = startPosition,
82
- animationSpec = tween(
83
- durationMillis = 200,
84
- )
85
- )
86
- navigator.hideSnackBar()
87
- }
88
- }
89
-
90
- LaunchedEffect(startPosition) {
91
- if (startPosition != Float.MAX_VALUE){
92
- openEvent()
93
- }
94
- }
95
-
96
- LaunchedEffect(data.duration) {
97
- val duration = data.duration
98
- if (duration != null) {
99
- delay(duration.milliseconds)
100
- navigator.hideSnackBar()
101
- }
102
- }
103
-
104
- DisposableEffect(Unit) {
105
- OverplayComponentRegistry.bindClose {
106
- closeEvent()
107
- }
108
- onDispose {
109
- onDismiss?.invoke()
110
- }
111
- }
112
-
113
- Box(
114
- modifier = Modifier
115
- .offset { IntOffset(0, offsetY.value.toInt() - footerHeight) }
116
- .onGloballyPositioned {
117
- if (startPosition != it.size.height.toFloat()) {
118
- startPosition = it.size.height.toFloat()
119
- offsetY = Animatable(startPosition)
120
- }
121
- }
122
- .fillMaxWidth()
123
- .conditional(IsShowBaseLineDebug) {
124
- border(1.dp, Colors.blue_03)
125
- }
126
- ) {
127
- when (data) {
128
- is SnackBar.Custom -> data.content()
129
- is SnackBar.Toast -> {}
130
- }
131
- }
132
- }
@@ -1,127 +0,0 @@
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
- }
@@ -1,12 +0,0 @@
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)