@momo-kits/native-kits 0.159.1-beta.5 → 0.159.1-beta.6-debug

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 (144) hide show
  1. package/.claude/settings.local.json +2 -9
  2. package/build.gradle.kts +11 -0
  3. package/compose/build.gradle.kts +180 -0
  4. package/compose/build.gradle.kts.backup +180 -0
  5. package/compose/compose.podspec +54 -0
  6. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +111 -0
  7. package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
  8. package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
  9. package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
  10. package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
  11. package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
  12. package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
  13. package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
  14. package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
  15. package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
  16. package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
  17. package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
  18. package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
  19. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
  20. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +57 -0
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +109 -0
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +201 -0
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +222 -0
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +48 -0
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +305 -0
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +720 -0
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +121 -0
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +405 -0
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +85 -0
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +340 -0
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +198 -0
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +357 -0
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +123 -0
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +94 -0
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +136 -0
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +224 -0
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +543 -0
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +23 -0
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +76 -0
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +148 -0
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +188 -0
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +116 -0
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +448 -0
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +172 -0
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +255 -0
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +231 -0
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +233 -0
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +254 -0
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +241 -0
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +364 -0
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +92 -0
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +352 -0
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +103 -0
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +338 -0
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +70 -0
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +17 -0
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +96 -0
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +348 -0
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +256 -0
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +494 -0
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +131 -0
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +215 -0
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +96 -0
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +531 -0
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +92 -0
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +130 -0
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +214 -0
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +590 -0
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +177 -0
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +192 -0
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +205 -0
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +239 -0
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +191 -0
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +306 -0
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +188 -0
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +255 -0
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +2 -0
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +35 -0
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +2 -0
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +57 -0
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +68 -0
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +14 -0
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +50 -0
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +253 -0
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +133 -0
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +99 -0
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +166 -0
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +333 -0
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +552 -0
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +162 -0
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +243 -0
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +187 -0
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +279 -0
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +80 -0
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +306 -0
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +32 -0
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +370 -0
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +167 -0
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +42 -0
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +62 -0
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +88 -0
  124. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +151 -0
  125. package/example/ios/Example.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  126. package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  127. package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
  128. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +58 -0
  129. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/Pods-Example.xcscheme +58 -0
  130. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
  131. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
  132. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
  133. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +46 -0
  134. package/gradle/libs.versions.toml +57 -0
  135. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  136. package/gradle/wrapper/gradle-wrapper.properties +8 -0
  137. package/gradle.properties +26 -0
  138. package/gradlew +252 -0
  139. package/gradlew.bat +94 -0
  140. package/ios/Typography/Text.swift +1 -24
  141. package/ios/Typography/Typography.swift +4 -25
  142. package/local.properties +8 -0
  143. package/package.json +1 -1
  144. package/settings.gradle.kts +52 -0
@@ -0,0 +1,255 @@
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 org.jetbrains.compose.resources.Font
12
+ import org.jetbrains.compose.resources.FontResource
13
+ import org.jetbrains.compose.resources.InternalResourceApi
14
+ import vn.momo.uikits.resources.Res
15
+ import vn.momo.uikits.resources.momosignature
16
+ import vn.momo.uikits.resources.momotrustdisplay
17
+ import vn.momo.uikits.resources.sfprotext_black
18
+ import vn.momo.uikits.resources.sfprotext_bold
19
+ import vn.momo.uikits.resources.sfprotext_heavy
20
+ import vn.momo.uikits.resources.sfprotext_light
21
+ import vn.momo.uikits.resources.sfprotext_medium
22
+ import vn.momo.uikits.resources.sfprotext_regular
23
+ import vn.momo.uikits.resources.sfprotext_semibold
24
+ import vn.momo.uikits.resources.sfprotext_thin
25
+ import vn.momo.uikits.resources.sfprotext_ultralight
26
+
27
+ const val DEFAULT_SCREEN_SIZE = 375f
28
+ const val MAX_FONT_SCALE = 1.2f
29
+ const val MAX_DEVICE_SCALE = 5
30
+
31
+ @Composable
32
+ fun scaleSize(size: Float): Float {
33
+ return size;
34
+ }
35
+
36
+ @Composable
37
+ fun scaleSize(size: TextUnit): TextUnit {
38
+ if (!size.isSp) return size
39
+
40
+ val density = LocalDensity.current
41
+
42
+ val scaled = scaleSize(size.value)
43
+ val spValue = scaled / density.fontScale
44
+
45
+ return TextUnit(value = spValue, type = TextUnitType.Sp)
46
+ }
47
+
48
+ @Composable
49
+ fun scaleSize(size: Dp): Dp {
50
+ return scaleSize(size.value).dp
51
+ }
52
+
53
+ @Composable
54
+ fun scaleSize(textStyle: TextStyle): TextStyle {
55
+ return textStyle.copy(
56
+ fontSize = if (textStyle.fontSize != TextUnit.Unspecified)
57
+ scaleSize(textStyle.fontSize)
58
+ else
59
+ TextUnit.Unspecified,
60
+
61
+ lineHeight = if (textStyle.lineHeight != TextUnit.Unspecified)
62
+ scaleSize(textStyle.lineHeight)
63
+ else
64
+ TextUnit.Unspecified,
65
+ )
66
+ }
67
+
68
+
69
+ @OptIn(InternalResourceApi::class)
70
+ @Composable
71
+ fun getFont(font: FontResource): FontFamily {
72
+ return FontFamily(Font(font))
73
+ }
74
+
75
+ @Composable
76
+ fun getFontFamily(fontFamily: String, fontWeight: FontWeight? = FontWeight.Normal): FontFamily {
77
+ val key = "$fontFamily-${fontWeight?.weight}"
78
+ val fontMap = mapOf(
79
+ "SFProText-100" to Res.font.sfprotext_thin,
80
+ "SFProText-200" to Res.font.sfprotext_ultralight,
81
+ "SFProText-300" to Res.font.sfprotext_light,
82
+ "SFProText-400" to Res.font.sfprotext_regular,
83
+ "SFProText-500" to Res.font.sfprotext_medium,
84
+ "SFProText-600" to Res.font.sfprotext_semibold,
85
+ "SFProText-700" to Res.font.sfprotext_bold,
86
+ "SFProText-800" to Res.font.sfprotext_heavy,
87
+ "SFProText-900" to Res.font.sfprotext_black,
88
+
89
+ "MoMoSignature-100" to Res.font.momosignature,
90
+ "MoMoSignature-200" to Res.font.momosignature,
91
+ "MoMoSignature-300" to Res.font.momosignature,
92
+ "MoMoSignature-400" to Res.font.momosignature,
93
+ "MoMoSignature-500" to Res.font.momosignature,
94
+ "MoMoSignature-600" to Res.font.momosignature,
95
+ "MoMoSignature-700" to Res.font.momosignature,
96
+ "MoMoSignature-800" to Res.font.momosignature,
97
+ "MoMoSignature-900" to Res.font.momosignature,
98
+
99
+ "MoMoTrustDisplay-100" to Res.font.momotrustdisplay,
100
+ "MoMoTrustDisplay-200" to Res.font.momotrustdisplay,
101
+ "MoMoTrustDisplay-300" to Res.font.momotrustdisplay,
102
+ "MoMoTrustDisplay-400" to Res.font.momotrustdisplay,
103
+ "MoMoTrustDisplay-500" to Res.font.momotrustdisplay,
104
+ "MoMoTrustDisplay-600" to Res.font.momotrustdisplay,
105
+ "MoMoTrustDisplay-700" to Res.font.momotrustdisplay,
106
+ "MoMoTrustDisplay-800" to Res.font.momotrustdisplay,
107
+ "MoMoTrustDisplay-900" to Res.font.momotrustdisplay,
108
+ )
109
+ val font = fontMap[key] ?: Res.font.sfprotext_regular
110
+ return getFont(font)
111
+ }
112
+
113
+ @Immutable
114
+ class AppTypography internal constructor(
115
+ val headlineDefaultBold: TextStyle,
116
+ val headerMBold: TextStyle,
117
+ val headerDefaultBold: TextStyle,
118
+ val headerSSemibold: TextStyle,
119
+ val headerXsSemibold: TextStyle,
120
+ val bodyDefaultRegular: TextStyle,
121
+ val bodyDefaultRegularStrikethrough: TextStyle,
122
+ val descriptionDefaultRegular: TextStyle,
123
+ val descriptionDefaultRegularStrikethrough: TextStyle,
124
+ val descriptionXsRegular: TextStyle,
125
+ val descriptionXsRegularStrikethrough: TextStyle,
126
+ val labelDefaultMedium: TextStyle,
127
+ val labelSMedium: TextStyle,
128
+ val labelXsMedium: TextStyle,
129
+ val actionDefaultBold: TextStyle,
130
+ val actionSBold: TextStyle,
131
+ val actionXsBold: TextStyle,
132
+ val actionXxsBold: TextStyle,
133
+ ) {
134
+ constructor(
135
+ default: TextStyle = TextStyle(
136
+ fontSize = 14.sp,
137
+ lineHeight = 20.sp,
138
+ fontWeight = FontWeight.Normal
139
+ ),
140
+ headlineDefaultBold: TextStyle = TextStyle(
141
+ fontSize = 24.sp,
142
+ lineHeight = 34.sp,
143
+ fontWeight = FontWeight.Bold
144
+ ),
145
+ headerMBold: TextStyle = TextStyle(
146
+ fontSize = 18.sp,
147
+ lineHeight = 26.sp,
148
+ fontWeight = FontWeight.Bold
149
+ ),
150
+ headerDefaultBold: TextStyle = TextStyle(
151
+ fontSize = 16.sp,
152
+ lineHeight = 22.sp,
153
+ fontWeight = FontWeight.Bold
154
+ ),
155
+ headerSSemibold: TextStyle = TextStyle(
156
+ fontSize = 14.sp,
157
+ lineHeight = 20.sp,
158
+ fontWeight = FontWeight.SemiBold
159
+ ),
160
+ headerXsSemibold: TextStyle = TextStyle(
161
+ fontSize = 12.sp,
162
+ lineHeight = 18.sp,
163
+ fontWeight = FontWeight.SemiBold
164
+ ),
165
+ bodyDefaultRegular: TextStyle = TextStyle(
166
+ fontSize = 14.sp,
167
+ lineHeight = 20.sp,
168
+ fontWeight = FontWeight.Normal
169
+ ),
170
+ bodyDefaultRegularStrikethrough: TextStyle = TextStyle(
171
+ fontSize = 14.sp,
172
+ lineHeight = 20.sp,
173
+ fontWeight = FontWeight.Normal,
174
+ textDecoration = TextDecoration.LineThrough
175
+ ),
176
+ descriptionDefaultRegular: TextStyle = TextStyle(
177
+ fontSize = 12.sp,
178
+ lineHeight = 18.sp,
179
+ fontWeight = FontWeight.Normal
180
+ ),
181
+ descriptionDefaultRegularStrikethrough: TextStyle = TextStyle(
182
+ fontSize = 12.sp,
183
+ lineHeight = 18.sp,
184
+ fontWeight = FontWeight.Normal,
185
+ textDecoration = TextDecoration.LineThrough
186
+ ),
187
+ descriptionXsRegular: TextStyle = TextStyle(
188
+ fontSize = 10.sp,
189
+ lineHeight = 14.sp,
190
+ fontWeight = FontWeight.Normal
191
+ ),
192
+ descriptionXsRegularStrikethrough: TextStyle = TextStyle(
193
+ fontSize = 10.sp,
194
+ lineHeight = 14.sp,
195
+ fontWeight = FontWeight.Normal,
196
+ textDecoration = TextDecoration.LineThrough
197
+ ),
198
+ labelDefaultMedium: TextStyle = TextStyle(
199
+ fontSize = 14.sp,
200
+ lineHeight = 20.sp,
201
+ fontWeight = FontWeight.Medium
202
+ ),
203
+ labelSMedium: TextStyle = TextStyle(
204
+ fontSize = 12.sp,
205
+ lineHeight = 18.sp,
206
+ fontWeight = FontWeight.Medium
207
+ ),
208
+ labelXsMedium: TextStyle = TextStyle(
209
+ fontSize = 10.sp,
210
+ lineHeight = 14.sp,
211
+ fontWeight = FontWeight.Medium
212
+ ),
213
+ actionDefaultBold: TextStyle = TextStyle(
214
+ fontSize = 16.sp,
215
+ lineHeight = 22.sp,
216
+ fontWeight = FontWeight.Bold
217
+ ),
218
+ actionSBold: TextStyle = TextStyle(
219
+ fontSize = 14.sp,
220
+ lineHeight = 20.sp,
221
+ fontWeight = FontWeight.Bold
222
+ ),
223
+ actionXsBold: TextStyle = TextStyle(
224
+ fontSize = 12.sp,
225
+ lineHeight = 18.sp,
226
+ fontWeight = FontWeight.Bold
227
+ ),
228
+ actionXxsBold: TextStyle = TextStyle(
229
+ fontSize = 10.sp,
230
+ lineHeight = 14.sp,
231
+ fontWeight = FontWeight.Bold
232
+ ),
233
+ ) : this(
234
+ headlineDefaultBold = headlineDefaultBold,
235
+ headerMBold = headerMBold,
236
+ headerDefaultBold = headerDefaultBold,
237
+ headerSSemibold = headerSSemibold,
238
+ headerXsSemibold = headerXsSemibold,
239
+ bodyDefaultRegular = bodyDefaultRegular,
240
+ bodyDefaultRegularStrikethrough = bodyDefaultRegularStrikethrough,
241
+ descriptionDefaultRegular = descriptionDefaultRegular,
242
+ descriptionDefaultRegularStrikethrough = descriptionDefaultRegularStrikethrough,
243
+ descriptionXsRegular = descriptionXsRegular,
244
+ descriptionXsRegularStrikethrough = descriptionXsRegularStrikethrough,
245
+ labelDefaultMedium = labelDefaultMedium,
246
+ labelSMedium = labelSMedium,
247
+ labelXsMedium = labelXsMedium,
248
+ actionDefaultBold = actionDefaultBold,
249
+ actionSBold = actionSBold,
250
+ actionXsBold = actionXsBold,
251
+ actionXxsBold = actionXxsBold
252
+ )
253
+ }
254
+
255
+ val Typography = AppTypography()
@@ -0,0 +1,2 @@
1
+ package vn.momo.kits.layout
2
+
@@ -0,0 +1,35 @@
1
+ package vn.momo.kits.layout
2
+
3
+ import androidx.compose.foundation.layout.Box
4
+ import androidx.compose.foundation.layout.height
5
+ import androidx.compose.foundation.layout.width
6
+ import androidx.compose.runtime.Composable
7
+ import androidx.compose.ui.Modifier
8
+ import androidx.compose.ui.unit.Dp
9
+
10
+ data class GridContext(
11
+ val numberOfColumns: Number,
12
+ val gutterSize: Number,
13
+ val sizePerSpan: Number,
14
+ val getSizeSpan: (Number) -> Number
15
+ )
16
+
17
+ @Composable
18
+ fun Item(
19
+ heightSpan: Number = 1,
20
+ widthSpan: Number = 1,
21
+ content: @Composable() () -> Unit,
22
+ modifier: Modifier = Modifier,
23
+ grid: GridContext
24
+ ) {
25
+
26
+ val widthItem = grid.getSizeSpan(widthSpan)
27
+ val heightItem = grid.getSizeSpan(heightSpan)
28
+
29
+ Box(
30
+ modifier = modifier.width(width = Dp(widthItem.toFloat()))
31
+ .height(height = Dp(heightItem.toFloat()))
32
+ ) {
33
+ content()
34
+ }
35
+ }
@@ -0,0 +1,2 @@
1
+ package vn.momo.kits.layout
2
+
@@ -0,0 +1,57 @@
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
+ /**
24
+ * Alternative for [setAutomationId]
25
+ *
26
+ * reason: [link](https://developer.android.com/develop/ui/compose/custom-modifiers#composable_function_modifiers_are_never_skipped)
27
+ * */
28
+ fun Modifier.kitsAutomationId(accessibilityId: String, label: String? = null) =
29
+ this then KitsAutomationIdElement(accessibilityId, label)
30
+
31
+ private data class KitsAutomationIdElement(
32
+ private val accessibilityId: String,
33
+ private val label: String? = null,
34
+ ) : ModifierNodeElement<KitsAutomationIdNode>() {
35
+ override fun create(): KitsAutomationIdNode {
36
+ return KitsAutomationIdNode(accessibilityId, label)
37
+ }
38
+
39
+ override fun update(node: KitsAutomationIdNode) {
40
+ node.accessibilityId = accessibilityId
41
+ node.label = label
42
+ }
43
+ }
44
+
45
+ private class KitsAutomationIdNode(
46
+ var accessibilityId: String,
47
+ var label: String?,
48
+ ) : Modifier.Node(), SemanticsModifierNode {
49
+ override fun SemanticsPropertyReceiver.applySemantics() {
50
+ if (getPlatformName() == "Android") {
51
+ contentDescription = accessibilityId
52
+ } else {
53
+ testTag = accessibilityId
54
+ contentDescription = label ?: accessibilityId
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,68 @@
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
+
57
+
58
+ fun Modifier.hideKeyboardOnTap() = composed {
59
+ val focusManager = LocalFocusManager.current
60
+ val keyboardManager = LocalSoftwareKeyboardController.current
61
+
62
+ pointerInput(Unit) {
63
+ detectTapGestures {
64
+ keyboardManager?.hide()
65
+ focusManager.clearFocus()
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,11 @@
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
+ }
@@ -0,0 +1,14 @@
1
+ package vn.momo.kits.modifier
2
+
3
+ import androidx.compose.foundation.background
4
+ import androidx.compose.runtime.Composable
5
+ import androidx.compose.ui.Modifier
6
+ import vn.momo.kits.application.IsShowBaseLineDebug
7
+ import vn.momo.kits.const.Colors
8
+
9
+ @Composable
10
+ fun DeprecatedModifier(): Modifier {
11
+ return Modifier.conditional(IsShowBaseLineDebug) {
12
+ background(Colors.red_01.copy(alpha = 0.5f))
13
+ }
14
+ }
@@ -0,0 +1,50 @@
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
+
13
+
14
+ fun Modifier.shadow(
15
+ color: Color = Color.Black,
16
+ borderRadius: Dp = 0.dp,
17
+ blurRadius: Float = 0f,
18
+ offsetY: Dp = 0.dp,
19
+ offsetX: Dp = 0.dp,
20
+ spread: Dp = 0f.dp,
21
+ modifier: Modifier = Modifier
22
+ ) = this.then(
23
+ modifier.drawBehind {
24
+ this.drawIntoCanvas {
25
+ val paint = Paint()
26
+ val frameworkPaint = paint.asFrameworkPaint()
27
+ val spreadPixel = spread.toPx()
28
+ val leftPixel = (0f - spreadPixel) + offsetX.toPx()
29
+ val topPixel = (0f - spreadPixel) + offsetY.toPx()
30
+ val rightPixel = (this.size.width + spreadPixel)
31
+ val bottomPixel = (0f + spreadPixel) - offsetY.toPx()
32
+
33
+ if (blurRadius != 0f) {
34
+ frameworkPaint.setMaskFilter(blurRadius)
35
+ }
36
+
37
+ frameworkPaint.setColor(color)
38
+
39
+ it.drawRoundRect(
40
+ left = leftPixel,
41
+ top = topPixel,
42
+ right = rightPixel,
43
+ bottom = bottomPixel,
44
+ radiusX = borderRadius.toPx(),
45
+ radiusY = borderRadius.toPx(),
46
+ paint
47
+ )
48
+ }
49
+ }
50
+ )
@@ -0,0 +1,51 @@
1
+ package vn.momo.kits.modifier
2
+
3
+ import androidx.compose.runtime.Composable
4
+ import androidx.compose.runtime.State
5
+ import androidx.compose.ui.Modifier
6
+ import androidx.compose.ui.layout.Measurable
7
+ import androidx.compose.ui.layout.MeasureResult
8
+ import androidx.compose.ui.layout.MeasureScope
9
+ import androidx.compose.ui.node.LayoutModifierNode
10
+ import androidx.compose.ui.node.ModifierNodeElement
11
+ import androidx.compose.ui.unit.Constraints
12
+ import androidx.compose.ui.unit.IntOffset
13
+
14
+ @Composable
15
+ fun Modifier.dynamicSize(
16
+ widthState: State<Int>? = null,
17
+ heightState: State<Int>? = null,
18
+ ) = this then DynamicSizeElement(widthState, heightState)
19
+
20
+ private data class DynamicSizeElement(
21
+ val widthState: State<Int>?,
22
+ val heightState: State<Int>?,
23
+ ) : ModifierNodeElement<DynamicSizeNode>() {
24
+ override fun create(): DynamicSizeNode {
25
+ return DynamicSizeNode(widthState, heightState)
26
+ }
27
+
28
+ override fun update(node: DynamicSizeNode) {
29
+ node.widthState = widthState
30
+ node.heightState = heightState
31
+ }
32
+
33
+ }
34
+
35
+ private class DynamicSizeNode(
36
+ var widthState: State<Int>?,
37
+ var heightState: State<Int>?,
38
+ ) : Modifier.Node(), LayoutModifierNode {
39
+ override fun MeasureScope.measure(
40
+ measurable: Measurable,
41
+ constraints: Constraints
42
+ ): MeasureResult {
43
+ val p = measurable.measure(constraints)
44
+ return layout(
45
+ width = widthState?.value ?: p.width,
46
+ height = heightState?.value ?: p.height,
47
+ ) {
48
+ p.place(IntOffset.Zero)
49
+ }
50
+ }
51
+ }