@momo-kits/native-kits 0.164.1-beta.17-debug → 0.164.1-beta.18

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 (140) hide show
  1. package/ios/native-kits.podspec +1 -1
  2. package/ios-demo/MoMoUIKitsDemo.podspec +1 -1
  3. package/package.json +2 -2
  4. package/build.gradle.kts +0 -11
  5. package/compose/build.gradle.kts +0 -190
  6. package/compose/build.gradle.kts.backup +0 -190
  7. package/compose/compose.podspec +0 -47
  8. package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +0 -19
  9. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +0 -6
  10. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +0 -12
  11. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +0 -7
  12. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -150
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -52
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +0 -106
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -183
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -207
  17. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -39
  18. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
  19. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
  20. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -293
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -826
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +0 -269
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -110
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -378
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +0 -56
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +0 -157
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -82
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -32
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -338
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +0 -175
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -356
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +0 -113
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -89
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -128
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +0 -209
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -542
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -76
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -125
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -231
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -134
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -475
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -114
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -214
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -240
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -216
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -259
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -182
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -343
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +0 -108
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -56
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -41
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -84
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -40
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -328
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -97
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +0 -310
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -59
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +0 -87
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +0 -21
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -90
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +0 -323
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +0 -217
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +0 -473
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +0 -122
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +0 -199
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -91
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +0 -470
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -88
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -131
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -203
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +0 -498
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -175
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +0 -182
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -193
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -234
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -188
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -325
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +0 -16
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +0 -22
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -16
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -188
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -263
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -52
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -38
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -39
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -52
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -66
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +0 -104
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -48
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -299
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -129
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -103
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -191
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -386
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +0 -8
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -595
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +0 -157
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +0 -39
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -156
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -225
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -169
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -320
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -81
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -309
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -34
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -360
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +0 -132
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +0 -127
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +0 -15
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +0 -91
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +0 -9
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -69
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -55
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +0 -15
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -105
  126. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +0 -40
  127. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +0 -119
  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/BackGesture.ios.kt +0 -35
  130. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +0 -66
  131. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -220
  132. package/gradle/libs.versions.toml +0 -69
  133. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  134. package/gradle/wrapper/gradle-wrapper.properties +0 -8
  135. package/gradle.properties +0 -26
  136. package/gradlew +0 -252
  137. package/gradlew.bat +0 -94
  138. package/ios-demo/README.md +0 -120
  139. package/local.properties +0 -8
  140. package/settings.gradle.kts +0 -64
@@ -1,263 +0,0 @@
1
- package vn.momo.kits.const
2
-
3
- import androidx.compose.runtime.Composable
4
- import androidx.compose.runtime.Immutable
5
- import androidx.compose.ui.platform.LocalDensity
6
- import androidx.compose.ui.text.TextStyle
7
- import androidx.compose.ui.text.font.FontFamily
8
- import androidx.compose.ui.text.font.FontWeight
9
- import androidx.compose.ui.text.style.TextDecoration
10
- import androidx.compose.ui.unit.*
11
- import vn.momo.kits.application.LocalContext
12
- import vn.momo.kits.platform.getScreenDimensions
13
- import kotlin.math.max
14
- import kotlin.math.min
15
-
16
- const val DEFAULT_SCREEN_SIZE = 375f
17
- const val MAX_FONT_SCALE = 1.5f
18
- const val MAX_DEVICE_SCALE = 5
19
-
20
- @Composable
21
- fun scaleSize(size: Float): Float {
22
- val context = LocalContext.current
23
- // Host-pushed context wins; otherwise fall back to the app-wide KitFontScale holder.
24
- val useOsScale = context?.useOSScaleRate ?: KitFontScale.useOSScaleRate
25
- if (!useOsScale) {
26
- return size * (context?.userScaleRate ?: KitFontScale.userScaleRate)
27
- }
28
- val scaleSizeMaxRate: Float = MAX_FONT_SCALE
29
- val deviceWidth = getScreenDimensions().width
30
- val deviceScale = deviceWidth / DEFAULT_SCREEN_SIZE
31
-
32
- val density = LocalDensity.current
33
- val fontScale = density.fontScale
34
-
35
- var fontSizeScaleDevice = size
36
- var fontSizeScaleOS = size
37
-
38
- if (deviceScale > 1) {
39
- fontSizeScaleDevice =
40
- min(deviceScale * fontSizeScaleDevice, fontSizeScaleDevice + MAX_DEVICE_SCALE)
41
- }
42
-
43
- if (fontScale > 1) {
44
- fontSizeScaleOS = min(fontScale * fontSizeScaleOS, fontSizeScaleOS * scaleSizeMaxRate)
45
- }
46
-
47
- return max(
48
- fontSizeScaleDevice,
49
- fontSizeScaleOS
50
- )
51
- }
52
-
53
- @Composable
54
- fun scaleSize(size: TextUnit): TextUnit {
55
- if (!size.isSp) return size
56
-
57
- val density = LocalDensity.current
58
-
59
- val scaled = scaleSize(size.value)
60
- val spValue = scaled / density.fontScale
61
-
62
- return TextUnit(value = spValue, type = TextUnitType.Sp)
63
- }
64
-
65
- @Composable
66
- fun scaleSize(size: Dp): Dp {
67
- return scaleSize(size.value).dp
68
- }
69
-
70
- @Composable
71
- fun scaleSize(textStyle: TextStyle): TextStyle {
72
- return textStyle.copy(
73
- fontSize = if (textStyle.fontSize != TextUnit.Unspecified)
74
- scaleSize(textStyle.fontSize)
75
- else
76
- TextUnit.Unspecified,
77
-
78
- lineHeight = if (textStyle.lineHeight != TextUnit.Unspecified)
79
- scaleSize(textStyle.lineHeight)
80
- else
81
- TextUnit.Unspecified,
82
- )
83
- }
84
-
85
-
86
- /**
87
- * Tên file font trong tài nguyên native của app host (xem [hostFontFamily]).
88
- *
89
- * SDK không đóng gói font riêng nữa: app host đã bundle sẵn toàn bộ font từ `font-source`
90
- * cho cả React Native lẫn native, nên bản copy trong `composeResources` chỉ làm phình app.
91
- */
92
- private const val DEFAULT_FONT_FILE = "SFProText-Regular.ttf"
93
-
94
- private val hostFontFiles: Map<String, String> = mapOf(
95
- "SFProText-100" to "SFProText-Thin.ttf",
96
- "SFProText-200" to "SFProText-Ultralight.ttf",
97
- "SFProText-300" to "SFProText-Light.ttf",
98
- "SFProText-400" to DEFAULT_FONT_FILE,
99
- "SFProText-500" to "SFProText-Medium.ttf",
100
- "SFProText-600" to "SFProText-Semibold.ttf",
101
- "SFProText-700" to "SFProText-Bold.ttf",
102
- "SFProText-800" to "SFProText-Heavy.ttf",
103
- "SFProText-900" to "SFProText-Black.ttf",
104
- ) + (1..9).flatMap { step ->
105
- val weight = step * 100
106
- listOf(
107
- "MoMoSignature-$weight" to "MoMoSignature.otf",
108
- "MoMoTrustDisplay-$weight" to "MoMoTrustDisplay.otf",
109
- )
110
- }
111
-
112
- @Composable
113
- fun getFontFamily(fontFamily: String, fontWeight: FontWeight? = FontWeight.Normal): FontFamily {
114
- val key = "$fontFamily-${fontWeight?.weight}"
115
- val fileName = hostFontFiles[key] ?: DEFAULT_FONT_FILE
116
- return hostFontFamily(fileName)
117
- ?: hostFontFamily(DEFAULT_FONT_FILE)
118
- ?: FontFamily.Default
119
- }
120
-
121
- @Immutable
122
- class AppTypography internal constructor(
123
- val headlineDefaultBold: TextStyle,
124
- val headerMBold: TextStyle,
125
- val headerDefaultBold: TextStyle,
126
- val headerSSemibold: TextStyle,
127
- val headerXsSemibold: TextStyle,
128
- val bodyDefaultRegular: TextStyle,
129
- val bodyDefaultRegularStrikethrough: TextStyle,
130
- val descriptionDefaultRegular: TextStyle,
131
- val descriptionDefaultRegularStrikethrough: TextStyle,
132
- val descriptionXsRegular: TextStyle,
133
- val descriptionXsRegularStrikethrough: TextStyle,
134
- val labelDefaultMedium: TextStyle,
135
- val labelSMedium: TextStyle,
136
- val labelXsMedium: TextStyle,
137
- val actionDefaultBold: TextStyle,
138
- val actionSBold: TextStyle,
139
- val actionXsBold: TextStyle,
140
- val actionXxsBold: TextStyle,
141
- ) {
142
- constructor(
143
- default: TextStyle = TextStyle(
144
- fontSize = 14.sp,
145
- lineHeight = 20.sp,
146
- fontWeight = FontWeight.Normal
147
- ),
148
- headlineDefaultBold: TextStyle = TextStyle(
149
- fontSize = 24.sp,
150
- lineHeight = 34.sp,
151
- fontWeight = FontWeight.Bold
152
- ),
153
- headerMBold: TextStyle = TextStyle(
154
- fontSize = 18.sp,
155
- lineHeight = 26.sp,
156
- fontWeight = FontWeight.Bold
157
- ),
158
- headerDefaultBold: TextStyle = TextStyle(
159
- fontSize = 16.sp,
160
- lineHeight = 22.sp,
161
- fontWeight = FontWeight.Bold
162
- ),
163
- headerSSemibold: TextStyle = TextStyle(
164
- fontSize = 14.sp,
165
- lineHeight = 20.sp,
166
- fontWeight = FontWeight.SemiBold
167
- ),
168
- headerXsSemibold: TextStyle = TextStyle(
169
- fontSize = 12.sp,
170
- lineHeight = 18.sp,
171
- fontWeight = FontWeight.SemiBold
172
- ),
173
- bodyDefaultRegular: TextStyle = TextStyle(
174
- fontSize = 14.sp,
175
- lineHeight = 20.sp,
176
- fontWeight = FontWeight.Normal
177
- ),
178
- bodyDefaultRegularStrikethrough: TextStyle = TextStyle(
179
- fontSize = 14.sp,
180
- lineHeight = 20.sp,
181
- fontWeight = FontWeight.Normal,
182
- textDecoration = TextDecoration.LineThrough
183
- ),
184
- descriptionDefaultRegular: TextStyle = TextStyle(
185
- fontSize = 12.sp,
186
- lineHeight = 18.sp,
187
- fontWeight = FontWeight.Normal
188
- ),
189
- descriptionDefaultRegularStrikethrough: TextStyle = TextStyle(
190
- fontSize = 12.sp,
191
- lineHeight = 18.sp,
192
- fontWeight = FontWeight.Normal,
193
- textDecoration = TextDecoration.LineThrough
194
- ),
195
- descriptionXsRegular: TextStyle = TextStyle(
196
- fontSize = 10.sp,
197
- lineHeight = 14.sp,
198
- fontWeight = FontWeight.Normal
199
- ),
200
- descriptionXsRegularStrikethrough: TextStyle = TextStyle(
201
- fontSize = 10.sp,
202
- lineHeight = 14.sp,
203
- fontWeight = FontWeight.Normal,
204
- textDecoration = TextDecoration.LineThrough
205
- ),
206
- labelDefaultMedium: TextStyle = TextStyle(
207
- fontSize = 14.sp,
208
- lineHeight = 20.sp,
209
- fontWeight = FontWeight.Medium
210
- ),
211
- labelSMedium: TextStyle = TextStyle(
212
- fontSize = 12.sp,
213
- lineHeight = 18.sp,
214
- fontWeight = FontWeight.Medium
215
- ),
216
- labelXsMedium: TextStyle = TextStyle(
217
- fontSize = 10.sp,
218
- lineHeight = 14.sp,
219
- fontWeight = FontWeight.Medium
220
- ),
221
- actionDefaultBold: TextStyle = TextStyle(
222
- fontSize = 16.sp,
223
- lineHeight = 22.sp,
224
- fontWeight = FontWeight.Bold
225
- ),
226
- actionSBold: TextStyle = TextStyle(
227
- fontSize = 14.sp,
228
- lineHeight = 20.sp,
229
- fontWeight = FontWeight.Bold
230
- ),
231
- actionXsBold: TextStyle = TextStyle(
232
- fontSize = 12.sp,
233
- lineHeight = 18.sp,
234
- fontWeight = FontWeight.Bold
235
- ),
236
- actionXxsBold: TextStyle = TextStyle(
237
- fontSize = 10.sp,
238
- lineHeight = 14.sp,
239
- fontWeight = FontWeight.Bold
240
- ),
241
- ) : this(
242
- headlineDefaultBold = headlineDefaultBold,
243
- headerMBold = headerMBold,
244
- headerDefaultBold = headerDefaultBold,
245
- headerSSemibold = headerSSemibold,
246
- headerXsSemibold = headerXsSemibold,
247
- bodyDefaultRegular = bodyDefaultRegular,
248
- bodyDefaultRegularStrikethrough = bodyDefaultRegularStrikethrough,
249
- descriptionDefaultRegular = descriptionDefaultRegular,
250
- descriptionDefaultRegularStrikethrough = descriptionDefaultRegularStrikethrough,
251
- descriptionXsRegular = descriptionXsRegular,
252
- descriptionXsRegularStrikethrough = descriptionXsRegularStrikethrough,
253
- labelDefaultMedium = labelDefaultMedium,
254
- labelSMedium = labelSMedium,
255
- labelXsMedium = labelXsMedium,
256
- actionDefaultBold = actionDefaultBold,
257
- actionSBold = actionSBold,
258
- actionXsBold = actionXsBold,
259
- actionXxsBold = actionXxsBold
260
- )
261
- }
262
-
263
- val Typography = AppTypography()
@@ -1,52 +0,0 @@
1
- package vn.momo.kits.layout
2
-
3
- import androidx.compose.foundation.background
4
- import androidx.compose.foundation.layout.Arrangement
5
- import androidx.compose.foundation.layout.Box
6
- import androidx.compose.foundation.layout.BoxWithConstraints
7
- import androidx.compose.foundation.layout.FlowRow
8
- import androidx.compose.foundation.layout.PaddingValues
9
- import androidx.compose.foundation.layout.fillMaxWidth
10
- import androidx.compose.foundation.layout.padding
11
- import androidx.compose.foundation.shape.RoundedCornerShape
12
- import androidx.compose.runtime.Composable
13
- import androidx.compose.runtime.CompositionLocalProvider
14
- import androidx.compose.ui.Modifier
15
- import androidx.compose.ui.draw.clip
16
- import androidx.compose.ui.draw.shadow
17
- import androidx.compose.ui.unit.dp
18
- import vn.momo.kits.components.Image
19
- import vn.momo.kits.const.AppTheme
20
- import vn.momo.kits.const.Radius
21
- import vn.momo.kits.const.Spacing
22
-
23
- @Composable
24
- internal fun Card(
25
- useShadow: Boolean = false,
26
- backgroundImage: String? = null,
27
- contentPadding: PaddingValues = PaddingValues(Spacing.M),
28
- modifier: Modifier = Modifier,
29
- content: @Composable () -> Unit,
30
- ) {
31
- val columns = 12
32
- val gutter = 8.dp
33
- val shape = RoundedCornerShape(Radius.M)
34
- var surface = modifier.fillMaxWidth().padding(horizontal = 12.dp)
35
- if (useShadow) surface = surface.shadow(4.dp, shape)
36
- surface = surface.clip(shape)
37
- if (backgroundImage == null) surface = surface.background(AppTheme.current.colors.background.surface)
38
- Box(modifier = surface) {
39
- if (backgroundImage != null) {
40
- Image(source = backgroundImage, modifier = Modifier.matchParentSize())
41
- }
42
- BoxWithConstraints(modifier = Modifier.fillMaxWidth().padding(contentPadding)) {
43
- val sizePerSpan = (maxWidth - gutter * (columns - 1)) / columns - 1.dp / columns
44
- CompositionLocalProvider(LocalGridContext provides GridContext(columns, gutter, sizePerSpan)) {
45
- FlowRow(
46
- horizontalArrangement = Arrangement.spacedBy(gutter),
47
- verticalArrangement = Arrangement.spacedBy(gutter),
48
- ) { content() }
49
- }
50
- }
51
- }
52
- }
@@ -1,38 +0,0 @@
1
- package vn.momo.kits.layout
2
-
3
- import androidx.compose.foundation.layout.Column
4
- import androidx.compose.foundation.layout.height
5
- import androidx.compose.foundation.layout.width
6
- import androidx.compose.runtime.Composable
7
- import androidx.compose.runtime.compositionLocalOf
8
- import androidx.compose.ui.Modifier
9
- import androidx.compose.ui.unit.Dp
10
- import androidx.compose.ui.unit.dp
11
-
12
- internal data class GridContext(
13
- val numberOfColumns: Int = 12,
14
- val gutter: Dp = 12.dp,
15
- val sizePerSpan: Dp = 0.dp,
16
- ) {
17
- fun sizeForSpan(span: Int): Dp = sizePerSpan * span + gutter * (span - 1)
18
- }
19
-
20
- internal val LocalGridContext = compositionLocalOf<GridContext?> { null }
21
-
22
- @Composable
23
- internal fun Item(
24
- widthSpan: Int = 12,
25
- heightSpan: Int = 0,
26
- modifier: Modifier = Modifier,
27
- content: @Composable () -> Unit,
28
- ) {
29
- val grid = LocalGridContext.current
30
- var m = modifier
31
- if (grid != null) {
32
- m = m.width(grid.sizeForSpan(widthSpan))
33
- if (heightSpan > 0) m = m.height(grid.sizeForSpan(heightSpan))
34
- }
35
- // A Column (not a Box) so multiple children flow VERTICALLY instead of stacking
36
- // on top of each other — matches the React Item's flex-column content.
37
- Column(modifier = m) { content() }
38
- }
@@ -1,39 +0,0 @@
1
- package vn.momo.kits.layout
2
-
3
- import androidx.compose.foundation.layout.Arrangement
4
- import androidx.compose.foundation.layout.Box
5
- import androidx.compose.foundation.layout.BoxWithConstraints
6
- import androidx.compose.foundation.layout.FlowRow
7
- import androidx.compose.foundation.layout.fillMaxWidth
8
- import androidx.compose.foundation.layout.padding
9
- import androidx.compose.runtime.Composable
10
- import androidx.compose.runtime.CompositionLocalProvider
11
- import androidx.compose.ui.Modifier
12
- import androidx.compose.ui.unit.dp
13
- import vn.momo.kits.components.Image
14
-
15
- @Composable
16
- internal fun Section(
17
- useMargin: Boolean = true,
18
- backgroundImage: String? = null,
19
- modifier: Modifier = Modifier,
20
- content: @Composable () -> Unit,
21
- ) {
22
- val columns = 12
23
- val gutter = 12.dp
24
- val margin = if (useMargin) 12.dp else 0.dp
25
- Box(modifier = modifier.fillMaxWidth().padding(horizontal = margin)) {
26
- if (backgroundImage != null) {
27
- Image(source = backgroundImage, modifier = Modifier.matchParentSize())
28
- }
29
- BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
30
- val sizePerSpan = (maxWidth - gutter * (columns - 1)) / columns - 1.dp / columns
31
- CompositionLocalProvider(LocalGridContext provides GridContext(columns, gutter, sizePerSpan)) {
32
- FlowRow(
33
- horizontalArrangement = Arrangement.spacedBy(gutter),
34
- verticalArrangement = Arrangement.spacedBy(gutter),
35
- ) { content() }
36
- }
37
- }
38
- }
39
- }
@@ -1,52 +0,0 @@
1
- package vn.momo.kits.modifier
2
-
3
- import androidx.compose.ui.Modifier
4
- import androidx.compose.ui.node.ModifierNodeElement
5
- import androidx.compose.ui.node.SemanticsModifierNode
6
- import androidx.compose.ui.semantics.SemanticsPropertyReceiver
7
- import androidx.compose.ui.semantics.contentDescription
8
- import androidx.compose.ui.semantics.semantics
9
- import androidx.compose.ui.semantics.testTag
10
- import vn.momo.kits.platform.getPlatformName
11
-
12
- fun Modifier.setAutomationId(accessibilityId: String, mergeDescendants: Boolean = false): Modifier {
13
- return if (getPlatformName() == "Android") {
14
- semantics {
15
- contentDescription = accessibilityId
16
- }
17
- } else {
18
- semantics(mergeDescendants = mergeDescendants) {
19
- testTag = accessibilityId
20
- }
21
- }}
22
-
23
- fun Modifier.kitsAutomationId(accessibilityId: String, label: String? = null) =
24
- this then KitsAutomationIdElement(accessibilityId, label)
25
-
26
- private data class KitsAutomationIdElement(
27
- private val accessibilityId: String,
28
- private val label: String? = null,
29
- ) : ModifierNodeElement<KitsAutomationIdNode>() {
30
- override fun create(): KitsAutomationIdNode {
31
- return KitsAutomationIdNode(accessibilityId, label)
32
- }
33
-
34
- override fun update(node: KitsAutomationIdNode) {
35
- node.accessibilityId = accessibilityId
36
- node.label = label
37
- }
38
- }
39
-
40
- private class KitsAutomationIdNode(
41
- var accessibilityId: String,
42
- var label: String?,
43
- ) : Modifier.Node(), SemanticsModifierNode {
44
- override fun SemanticsPropertyReceiver.applySemantics() {
45
- if (getPlatformName() == "Android") {
46
- contentDescription = accessibilityId
47
- } else {
48
- testTag = accessibilityId
49
- contentDescription = label ?: accessibilityId
50
- }
51
- }
52
- }
@@ -1,66 +0,0 @@
1
- package vn.momo.kits.modifier
2
-
3
- import androidx.compose.animation.core.animateFloatAsState
4
- import androidx.compose.foundation.clickable
5
- import androidx.compose.foundation.gestures.detectTapGestures
6
- import androidx.compose.foundation.interaction.MutableInteractionSource
7
- import androidx.compose.foundation.interaction.collectIsPressedAsState
8
- import androidx.compose.runtime.getValue
9
- import androidx.compose.runtime.remember
10
- import androidx.compose.ui.Modifier
11
- import androidx.compose.ui.composed
12
- import androidx.compose.ui.graphics.graphicsLayer
13
- import androidx.compose.ui.input.pointer.pointerInput
14
- import androidx.compose.ui.platform.LocalFocusManager
15
- import androidx.compose.ui.platform.LocalSoftwareKeyboardController
16
- import androidx.compose.ui.semantics.Role
17
-
18
- fun Modifier.noFeedbackClickable(
19
- enabled: Boolean = true, onClickLabel: String? = null, role: Role? = null, onClick: () -> Unit
20
- ): Modifier = composed {
21
- clickable(
22
- interactionSource = remember { MutableInteractionSource() },
23
- indication = null,
24
- enabled,
25
- onClickLabel,
26
- role,
27
- onClick
28
- )
29
- }
30
-
31
- fun Modifier.activeOpacityClickable(
32
- activeOpacity: Float = 0.2f,
33
- enabled: Boolean = true,
34
- onClickLabel: String? = null,
35
- role: Role? = null,
36
- onClick: () -> Unit
37
- ): Modifier = composed {
38
- val interactionSource = remember { MutableInteractionSource() }
39
- val isPressed by interactionSource.collectIsPressedAsState()
40
- val animatedAlpha by animateFloatAsState(
41
- targetValue = if (isPressed) activeOpacity else 1f,
42
- label = "ActiveOpacity"
43
- )
44
-
45
- this
46
- .graphicsLayer { alpha = animatedAlpha }
47
- .clickable(
48
- interactionSource = interactionSource,
49
- indication = null,
50
- enabled,
51
- onClickLabel,
52
- role,
53
- onClick
54
- )
55
- }
56
- fun Modifier.hideKeyboardOnTap() = composed {
57
- val focusManager = LocalFocusManager.current
58
- val keyboardManager = LocalSoftwareKeyboardController.current
59
-
60
- pointerInput(Unit) {
61
- detectTapGestures {
62
- keyboardManager?.hide()
63
- focusManager.clearFocus()
64
- }
65
- }
66
- }
@@ -1,11 +0,0 @@
1
- package vn.momo.kits.modifier
2
-
3
- import androidx.compose.ui.Modifier
4
-
5
- fun Modifier.conditional(condition: Boolean, modifier: Modifier.() -> Modifier): Modifier {
6
- return if (condition) {
7
- then(modifier(Modifier))
8
- } else {
9
- this
10
- }
11
- }
@@ -1,104 +0,0 @@
1
- package vn.momo.kits.modifier
2
-
3
- import androidx.compose.animation.core.LinearEasing
4
- import androidx.compose.animation.core.RepeatMode
5
- import androidx.compose.animation.core.animateFloat
6
- import androidx.compose.animation.core.infiniteRepeatable
7
- import androidx.compose.animation.core.rememberInfiniteTransition
8
- import androidx.compose.animation.core.tween
9
- import androidx.compose.runtime.Composable
10
- import androidx.compose.runtime.getValue
11
- import androidx.compose.ui.Modifier
12
- import androidx.compose.ui.draw.drawWithContent
13
- import androidx.compose.ui.geometry.Offset
14
- import androidx.compose.ui.graphics.Color
15
- import androidx.compose.ui.graphics.drawscope.clipRect
16
- import androidx.compose.ui.text.TextStyle
17
- import androidx.compose.ui.text.drawText
18
- import androidx.compose.ui.text.font.FontWeight
19
- import androidx.compose.ui.text.rememberTextMeasurer
20
- import androidx.compose.ui.unit.sp
21
- import vn.momo.kits.application.IsShowBaseLineDebug
22
- import vn.momo.kits.const.Colors
23
-
24
- @Suppress("ExperimentalAnnotationRetention")
25
- @RequiresOptIn(
26
- message = "This is internal API of native-kits, become internal in next sprint",
27
- level = RequiresOptIn.Level.WARNING,
28
- )
29
- @Retention(AnnotationRetention.BINARY)
30
- @Target(
31
- AnnotationTarget.CLASS,
32
- AnnotationTarget.FUNCTION,
33
- AnnotationTarget.PROPERTY,
34
- )
35
- annotation class InternalApi
36
-
37
- @Composable
38
- fun DeprecatedModifier(text: String = "Deprecated component"): Modifier = debugMarker(
39
- label = text,
40
- background = Colors.red_04.copy(alpha = 0.7f),
41
- textColor = Colors.red_01,
42
- animationLabel = "deprecatedMarquee",
43
- )
44
-
45
- @Composable
46
- private fun debugMarker(
47
- label: String,
48
- background: Color,
49
- textColor: Color,
50
- animationLabel: String,
51
- ): Modifier {
52
- if (!IsShowBaseLineDebug) return Modifier
53
-
54
- val textMeasurer = rememberTextMeasurer()
55
- val marquee = rememberInfiniteTransition(label = animationLabel)
56
- val progress by marquee.animateFloat(
57
- initialValue = 0f,
58
- targetValue = 1f,
59
- animationSpec = infiniteRepeatable(
60
- animation = tween(durationMillis = 4000, easing = LinearEasing),
61
- repeatMode = RepeatMode.Restart,
62
- ),
63
- label = "${animationLabel}Progress",
64
- )
65
-
66
- return Modifier.drawWithContent {
67
- drawContent()
68
- drawRect(color = background)
69
-
70
- if (size.width <= 0f || size.height <= 0f) return@drawWithContent
71
-
72
- val fontPx = (size.width * 0.1f).coerceIn(12.sp.toPx(), 20.sp.toPx())
73
- val style = TextStyle(
74
- color = textColor,
75
- fontSize = fontPx.toSp(),
76
- fontWeight = FontWeight.Bold,
77
- )
78
-
79
- val intrinsic = textMeasurer.measure(
80
- text = label,
81
- style = style,
82
- maxLines = 1,
83
- softWrap = false,
84
- )
85
- val textW = intrinsic.size.width
86
- val textH = intrinsic.size.height
87
- val y = (size.height - textH) / 2f
88
-
89
- if (textW <= size.width) {
90
- drawText(
91
- textLayoutResult = intrinsic,
92
- topLeft = Offset((size.width - textW) / 2f, y),
93
- )
94
- } else {
95
- clipRect(right = size.width, bottom = size.height) {
96
- val gap = textW * 0.5f
97
- val travel = textW + gap
98
- val x = -progress * travel
99
- drawText(textLayoutResult = intrinsic, topLeft = Offset(x, y))
100
- drawText(textLayoutResult = intrinsic, topLeft = Offset(x + travel, y))
101
- }
102
- }
103
- }
104
- }
@@ -1,48 +0,0 @@
1
- package vn.momo.kits.modifier
2
-
3
- import androidx.compose.ui.Modifier
4
- import androidx.compose.ui.draw.drawBehind
5
- import androidx.compose.ui.graphics.Color
6
- import androidx.compose.ui.graphics.Paint
7
- import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
8
- import androidx.compose.ui.unit.Dp
9
- import androidx.compose.ui.unit.dp
10
- import vn.momo.kits.platform.setColor
11
- import vn.momo.kits.platform.setMaskFilter
12
- fun Modifier.shadow(
13
- color: Color = Color.Black,
14
- borderRadius: Dp = 0.dp,
15
- blurRadius: Float = 0f,
16
- offsetY: Dp = 0.dp,
17
- offsetX: Dp = 0.dp,
18
- spread: Dp = 0f.dp,
19
- modifier: Modifier = Modifier
20
- ) = this.then(
21
- modifier.drawBehind {
22
- this.drawIntoCanvas {
23
- val paint = Paint()
24
- val frameworkPaint = paint.asFrameworkPaint()
25
- val spreadPixel = spread.toPx()
26
- val leftPixel = (0f - spreadPixel) + offsetX.toPx()
27
- val topPixel = (0f - spreadPixel) + offsetY.toPx()
28
- val rightPixel = (this.size.width + spreadPixel)
29
- val bottomPixel = (0f + spreadPixel) - offsetY.toPx()
30
-
31
- if (blurRadius != 0f) {
32
- frameworkPaint.setMaskFilter(blurRadius)
33
- }
34
-
35
- frameworkPaint.setColor(color)
36
-
37
- it.drawRoundRect(
38
- left = leftPixel,
39
- top = topPixel,
40
- right = rightPixel,
41
- bottom = bottomPixel,
42
- radiusX = borderRadius.toPx(),
43
- radiusY = borderRadius.toPx(),
44
- paint
45
- )
46
- }
47
- }
48
- )