@momo-kits/native-kits 0.162.16-debug → 0.162.16

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 (136) hide show
  1. package/package.json +1 -1
  2. package/build.gradle.kts +0 -11
  3. package/compose/build.gradle.kts +0 -190
  4. package/compose/build.gradle.kts.backup +0 -190
  5. package/compose/compose.podspec +0 -47
  6. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +0 -6
  7. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -123
  8. package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
  9. package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
  10. package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
  11. package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
  12. package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
  13. package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
  14. package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
  15. package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
  16. package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
  17. package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
  18. package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
  19. package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
  20. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
  21. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -52
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -101
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -183
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -207
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -39
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -294
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -826
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +0 -269
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -107
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -378
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +0 -157
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -82
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -338
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -175
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -356
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -113
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -89
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -128
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +0 -209
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -543
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -140
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -231
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -112
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -477
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -114
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -214
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -240
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -216
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -259
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -182
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -343
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +0 -108
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -84
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -328
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -97
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -310
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -59
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +0 -87
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +0 -17
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -90
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +0 -323
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +0 -217
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +0 -473
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +0 -122
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +0 -199
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -91
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -470
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -88
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -131
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -203
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -498
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -175
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +0 -182
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -193
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -234
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -188
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -306
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -188
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -270
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -2
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -35
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -2
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -52
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -66
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -104
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -48
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -253
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -129
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -98
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -154
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -360
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -562
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -154
  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 -320
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -81
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -309
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -34
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -360
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -128
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -70
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -58
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
  126. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  127. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
  128. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +0 -32
  129. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -184
  130. package/gradle/libs.versions.toml +0 -69
  131. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  132. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  133. package/gradle.properties +0 -26
  134. package/gradlew +0 -252
  135. package/gradlew.bat +0 -94
  136. package/settings.gradle.kts +0 -64
@@ -1,34 +0,0 @@
1
- package vn.momo.kits.navigation.component
2
-
3
- import androidx.compose.foundation.layout.fillMaxWidth
4
- import androidx.compose.runtime.Composable
5
- import androidx.compose.ui.Modifier
6
- import androidx.compose.ui.graphics.Color
7
- import androidx.compose.ui.text.style.TextAlign
8
- import androidx.compose.ui.text.style.TextOverflow
9
- import androidx.compose.ui.unit.sp
10
- import androidx.compose.ui.zIndex
11
- import vn.momo.kits.components.Text
12
- import vn.momo.kits.const.Typography
13
- import vn.momo.kits.modifier.setAutomationId
14
-
15
- @Composable
16
- internal fun HeaderTitle(
17
- title: String = "",
18
- color: Color? = null,
19
- modifier: Modifier = Modifier.fillMaxWidth(),
20
- textAlign: TextAlign = TextAlign.Start,
21
- ) {
22
- Text(
23
- modifier = modifier.zIndex(1f).setAutomationId("title_navigation_header"),
24
- text = title,
25
- textAlign = textAlign,
26
- style = Typography.actionSBold.copy(
27
- fontSize = 15.sp,
28
- lineHeight = 22.sp,
29
- ),
30
- color = color,
31
- maxLines = 1,
32
- overflow = TextOverflow.Ellipsis
33
- )
34
- }
@@ -1,360 +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.style.TextOverflow
20
- import androidx.compose.ui.unit.Dp
21
- import androidx.compose.ui.unit.dp
22
- import androidx.compose.ui.unit.sp
23
- import vn.momo.kits.components.Image
24
- import vn.momo.kits.components.Options
25
- import vn.momo.kits.components.Skeleton
26
- import vn.momo.kits.components.Text
27
- import vn.momo.kits.const.AppTheme
28
- import vn.momo.kits.const.Colors
29
- import vn.momo.kits.const.Spacing
30
- import vn.momo.kits.const.Typography
31
- import vn.momo.kits.modifier.activeOpacityClickable
32
- import vn.momo.kits.navigation.component.HeaderTitle.User
33
- import vn.momo.kits.platform.getScreenDimensions
34
-
35
- @Composable
36
- internal fun HeaderUser(
37
- data: HeaderTitle
38
- ) {
39
- if (data !is User) return
40
-
41
- if (data.isLoading) {
42
- return TitleUserShimmer()
43
- }
44
-
45
- val maxWidth = getScreenDimensions().width.dp - 172.dp
46
-
47
- Row(
48
- modifier = Modifier
49
- .fillMaxWidth()
50
- .padding(vertical = Spacing.XS)
51
- .activeOpacityClickable(enabled = data.onPress != null, onClick = { data.onPress?.invoke() }),
52
- horizontalArrangement = Arrangement.SpaceBetween,
53
- verticalAlignment = Alignment.CenterVertically
54
- ) {
55
- Row(
56
- modifier = Modifier.widthIn(max = maxWidth),
57
- verticalAlignment = Alignment.CenterVertically
58
- ) {
59
- Box(modifier = Modifier.size(Spacing.XXL)) {
60
- AvatarGroup(urls = AvatarUrls(data.image ?: listOf()), title = data.title)
61
- if (data.dotColor != null) {
62
- Box(
63
- modifier = Modifier
64
- .align(Alignment.BottomEnd)
65
- .size(10.dp)
66
- .clip(CircleShape)
67
- .background(data.dotColor)
68
- )
69
- }
70
- }
71
-
72
- Spacer(Modifier.width(6.dp))
73
-
74
- Column(modifier = Modifier.weight(1f, fill = false)) {
75
- Row(verticalAlignment = Alignment.CenterVertically) {
76
- Text(
77
- text = data.title,
78
- color = data.tintColor,
79
- style = Typography.actionXsBold,
80
- maxLines = 1,
81
- overflow = TextOverflow.Ellipsis
82
- )
83
- if (data.icons.isNotEmpty()) {
84
- Spacer(Modifier.width(6.dp))
85
- Row(verticalAlignment = Alignment.CenterVertically) {
86
- data.icons.forEach { icon ->
87
- RemoteIcon16(url = icon)
88
- }
89
- }
90
- }
91
- }
92
-
93
- if (!data.subTitle.isNullOrEmpty()) {
94
- Spacer(Modifier.height(2.dp))
95
- Text(
96
- text = data.subTitle,
97
- color = data.tintColor,
98
- style = Typography.descriptionXsRegular,
99
- maxLines = 1,
100
- overflow = TextOverflow.Ellipsis
101
- )
102
- }
103
- }
104
- }
105
- }
106
- }
107
-
108
- @Composable
109
- private fun TitleUserShimmer() {
110
- val theme = AppTheme.current
111
- Row(
112
- modifier = Modifier
113
- .fillMaxWidth()
114
- .padding(vertical = Spacing.XS),
115
- verticalAlignment = Alignment.CenterVertically
116
- ) {
117
- Box(
118
- modifier = Modifier
119
- .size(Spacing.XXL)
120
- .clip(CircleShape)
121
- .background(theme.colors.border.default)
122
- ) {
123
- Skeleton()
124
- }
125
- Spacer(Modifier.width(Spacing.M / 2))
126
- Column(modifier = Modifier.fillMaxWidth()) {
127
- Box(
128
- modifier = Modifier
129
- .height(18.dp)
130
- .width(120.dp)
131
- .clip(RoundedCornerShape(8.dp))
132
- ) { Skeleton() }
133
- Spacer(Modifier.height(Spacing.XXS))
134
- Box(
135
- modifier = Modifier
136
- .height(12.dp)
137
- .width(120.dp)
138
- .clip(RoundedCornerShape(8.dp))
139
- ) { Skeleton() }
140
- }
141
- }
142
- }
143
-
144
- @Composable
145
- private fun AvatarGroup(
146
- urls: AvatarUrls?,
147
- title: String? = null,
148
- size: Dp = Spacing.XXL
149
- ) {
150
- val theme = AppTheme.current
151
- val modifierBorder = remember {
152
- Modifier.clip(CircleShape).border(width = (0.5).dp, color = theme.colors.border.default, shape = CircleShape)
153
- }
154
- val options = Options(
155
- contentScale = ContentScale.Crop,
156
- alignment = Alignment.Center
157
- )
158
-
159
- when (urls?.items?.size) {
160
- 0 -> InitialsAvatar(
161
- modifier = modifierBorder,
162
- name = title ?: "",
163
- fallbackInitials = null,
164
- size = size
165
- )
166
- 1 -> SingleAvatar(options = options, modifier = modifierBorder, urls.items[0], size)
167
- 2 -> TwoAvatar(options = options, modifier = modifierBorder, urls, size)
168
- 3 -> ThreeAvatar(options = options, modifier = modifierBorder, urls, size)
169
- 4 -> FourAvatar(options = options, modifier = modifierBorder, urls, size)
170
- else -> ManyAvatar(options = options, modifier = modifierBorder, urls!!, size)
171
- }
172
- }
173
-
174
- @Composable
175
- private fun SingleAvatar(options: Options, modifier: Modifier = Modifier, url: String, size: Dp) {
176
- Image(
177
- source = url,
178
- options = options,
179
- modifier = modifier
180
- .size(size)
181
- )
182
- }
183
-
184
- @Composable
185
- private fun TwoAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
186
- val child = 24.dp
187
- Box(modifier = Modifier.size(size)) {
188
- Image(
189
- source = urls.items[0],
190
- options = options,
191
- modifier = modifier
192
- .size(child)
193
- .align(Alignment.TopEnd)
194
- )
195
- Image(
196
- source = urls.items[1],
197
- options = options,
198
- modifier = modifier
199
- .size(child)
200
- .align(Alignment.BottomStart)
201
- )
202
- }
203
- }
204
-
205
- @Composable
206
- private fun ThreeAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
207
- val child = 16.dp
208
- Box(modifier = Modifier.size(size).padding(2.dp)) {
209
- Image(
210
- source = urls.items[0],
211
- options = options,
212
- modifier = modifier
213
- .size(child)
214
- .align(Alignment.BottomEnd)
215
- )
216
- Image(
217
- source = urls.items[1],
218
- options = options,
219
- modifier = modifier
220
- .size(child)
221
- .align(Alignment.TopCenter)
222
- )
223
- Image(
224
- source = urls.items[2],
225
- options = options,
226
- modifier = modifier
227
- .size(child)
228
- .align(Alignment.BottomStart)
229
- )
230
- }
231
- }
232
-
233
- @Composable
234
- private fun FourAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
235
- val child = 16.dp
236
- Box(modifier = Modifier.size(size).padding(1.dp)) {
237
- Image(
238
- source = urls.items[0],
239
- options = options,
240
- modifier = modifier
241
- .size(child)
242
- .align(Alignment.BottomStart)
243
- )
244
- Image(
245
- source = urls.items[1],
246
- options = options,
247
- modifier = modifier
248
- .size(child)
249
- .align(Alignment.BottomEnd)
250
- )
251
- Image(
252
- source = urls.items[2],
253
- options = options,
254
- modifier = modifier
255
- .size(child)
256
- .align(Alignment.TopEnd)
257
- )
258
- Image(
259
- source = urls.items[3],
260
- options = options,
261
- modifier = modifier
262
- .size(child)
263
- .align(Alignment.TopStart)
264
- )
265
- }
266
- }
267
-
268
- @Composable
269
- private fun ManyAvatar(options: Options, modifier: Modifier = Modifier, urls: AvatarUrls, size: Dp) {
270
- val child = 16.dp
271
- val more = urls.items.size - 3
272
- Box(modifier = Modifier.size(size).padding(1.dp)) {
273
- Image(
274
- source = urls.items[0],
275
- options = options,
276
- modifier = modifier
277
- .size(child)
278
- .align(Alignment.BottomStart)
279
- )
280
- Image(
281
- source = urls.items[1],
282
- options = options,
283
- modifier = modifier
284
- .size(child)
285
- .align(Alignment.TopEnd)
286
- )
287
- Image(
288
- source = urls.items[2],
289
- options = options,
290
- modifier = modifier
291
- .size(child)
292
- .align(Alignment.TopStart)
293
- )
294
- Box(
295
- modifier = modifier
296
- .size(child)
297
- .align(Alignment.BottomEnd)
298
- .background(Colors.pink_09)
299
- .padding(1.dp)
300
- .clipToBounds(),
301
- contentAlignment = Alignment.Center
302
- ) {
303
- BasicText(
304
- text = "+$more",
305
- style = TextStyle(
306
- color = Colors.pink_03
307
- ),
308
- maxLines = 1,
309
- autoSize = TextAutoSize.StepBased(
310
- minFontSize = 1.sp,
311
- maxFontSize = 10.sp,
312
- stepSize = 1.sp
313
- )
314
- )
315
- }
316
- }
317
- }
318
-
319
- @Composable
320
- private fun InitialsAvatar(
321
- modifier: Modifier = Modifier,
322
- name: String,
323
- fallbackInitials: String? = null,
324
- size: Dp = Spacing.XXL
325
- ) {
326
- val initials = remember(name, fallbackInitials) {
327
- fallbackInitials ?: run {
328
- val words = name.trim().split(Regex("\\s+")).takeLast(2)
329
- words.joinToString("") { it.firstOrNull()?.uppercase() ?: "" }
330
- }
331
- }
332
- Box(
333
- modifier = modifier
334
- .size(size)
335
- .background(Colors.pink_09),
336
- contentAlignment = Alignment.Center
337
- ) {
338
- Text(
339
- text = initials,
340
- color = Colors.pink_03,
341
- style = Typography.descriptionXsRegular
342
- )
343
- }
344
- }
345
-
346
- @Composable
347
- private fun RemoteIcon16(url: String) {
348
- Image(
349
- source = url,
350
- options = Options(
351
- contentScale = ContentScale.Crop
352
- ),
353
- modifier = Modifier
354
- .size(16.dp)
355
- .clip(RoundedCornerShape(4.dp)),
356
- )
357
- }
358
-
359
- @Immutable
360
- 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,128 +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
- println("Tracking screen navigated native kit: $screenName")
35
- maxApi?.track(
36
- eventName = "auto_screen_navigated",
37
- params = buildBaseParams(context, screenName).apply {
38
- put("pre_screen_name", previousScreen)
39
- put("state", "navigated")
40
- put("action", action)
41
- }
42
- )
43
-
44
- state.releaseNavigated = true
45
- state.previousScreenName = previousScreen
46
- }
47
-
48
- fun trackScreenDisplayed(
49
- maxApi: IMaxApi?,
50
- context: MiniAppContext?,
51
- screenName: String,
52
- duration: Long,
53
- state: ScreenTrackingState
54
- ) {
55
- if (state.releaseLoad) return
56
-
57
- maxApi?.track(
58
- eventName = "auto_screen_displayed",
59
- params = buildBaseParams(context, screenName).apply {
60
- put("state", "load")
61
- put("duration", duration)
62
- }
63
- )
64
-
65
- state.releaseLoad = true
66
- }
67
-
68
- fun trackScreenInteracted(
69
- maxApi: IMaxApi?,
70
- context: MiniAppContext?,
71
- screenName: String,
72
- duration: Long,
73
- totalDuration: Long,
74
- state: ScreenTrackingState
75
- ) {
76
- if (state.releaseInteraction) return
77
-
78
- maxApi?.track(
79
- eventName = "auto_screen_interacted",
80
- params = buildBaseParams(context, screenName).apply {
81
- put("state", "interaction")
82
- put("duration", duration)
83
- put("total_duration", totalDuration)
84
- }
85
- )
86
-
87
- state.releaseInteraction = true
88
- }
89
-
90
- private fun buildBaseParams(
91
- context: MiniAppContext?,
92
- screenName: String,
93
- componentName: String = "Screen"
94
- ): MutableMap<String, Any?> {
95
- return mutableMapOf(
96
- "app_id" to context?.appId,
97
- "feature_code" to context?.appCode,
98
- "screen_name" to screenName,
99
- "component_name" to componentName,
100
- "tracking_source" to 1
101
- )
102
- }
103
-
104
- fun trackPopupDisplayed(
105
- maxApi: IMaxApi?,
106
- context: MiniAppContext?,
107
- parentScreenName: String?
108
- ) {
109
- maxApi?.track(
110
- eventName = "auto_popup_displayed",
111
- params = mutableMapOf<String, Any?>(
112
- "screen_name" to parentScreenName,
113
- "tracking_source" to 1,
114
- "app_id" to context?.appId,
115
- "feature_code" to context?.appCode,
116
- "kits_version" to null,
117
- "component_name" to "Modal"
118
- )
119
- )
120
- }
121
-
122
- fun getLastScreenName(): String? = lastScreenName
123
-
124
- @Suppress("UNUSED")
125
- fun reset() {
126
- lastScreenName = null
127
- }
128
- }