@momo-kits/native-kits 0.152.4-beta.9 → 0.152.4-klib.10

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 (118) hide show
  1. package/README.md +175 -5
  2. package/ios/Badge/Badge.swift +0 -6
  3. package/ios/Badge/BadgeRibbon.swift +77 -9
  4. package/ios/Button/Button.swift +7 -7
  5. package/ios/native-kits.podspec +18 -16
  6. package/package.json +2 -4
  7. package/CODE_OF_CONDUCT.md +0 -133
  8. package/CONTRIBUTING.md +0 -114
  9. package/LICENSE +0 -20
  10. package/build.gradle.kts +0 -32
  11. package/compose/MoMoComposeKits.podspec +0 -54
  12. package/compose/build.gradle.kts +0 -149
  13. package/compose/src/androidMain/AndroidManifest.xml +0 -2
  14. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +0 -105
  15. package/compose/src/commonMain/composeResources/files/lottie_circle_loader.json +0 -1
  16. package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
  17. package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
  18. package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
  19. package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
  20. package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
  21. package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
  22. package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
  23. package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
  24. package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
  25. package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
  26. package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
  27. package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
  28. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
  29. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +0 -57
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +0 -201
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +0 -222
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +0 -48
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +0 -86
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +0 -76
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +0 -76
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +0 -306
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +0 -33
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +0 -715
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +0 -214
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +0 -236
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +0 -69
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +0 -77
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +0 -27
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +0 -334
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +0 -345
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +0 -90
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +0 -131
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +0 -543
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +0 -23
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +0 -58
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +0 -143
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +0 -179
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +0 -111
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +0 -384
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +0 -160
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +0 -234
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +0 -223
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +0 -232
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +0 -236
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +0 -228
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +0 -364
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +0 -50
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +0 -34
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +0 -85
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +0 -33
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +0 -338
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +0 -95
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +0 -64
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +0 -89
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +0 -91
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +0 -86
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +0 -84
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +0 -208
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +0 -172
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +0 -199
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +0 -29
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +0 -237
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +0 -191
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +0 -306
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +0 -12
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +0 -13
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +0 -191
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +0 -258
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +0 -2
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +0 -35
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +0 -2
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +0 -59
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +0 -68
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +0 -11
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +0 -49
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +0 -51
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +0 -232
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +0 -111
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +0 -94
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +0 -159
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +0 -232
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScaleSizeScope.kt +0 -17
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +0 -459
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +0 -169
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +0 -216
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +0 -86
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +0 -180
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +0 -251
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +0 -80
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +0 -306
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +0 -31
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +0 -385
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +0 -38
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +0 -1329
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -62
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +0 -88
  113. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +0 -144
  114. package/gradle.properties +0 -19
  115. package/gradlew +0 -240
  116. package/gradlew.bat +0 -91
  117. package/ios/Theme.md +0 -18
  118. package/settings.gradle.kts +0 -25
@@ -1,258 +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.Dp
11
- import androidx.compose.ui.unit.sp
12
- import org.jetbrains.compose.resources.Font
13
- import org.jetbrains.compose.resources.FontResource
14
- import org.jetbrains.compose.resources.InternalResourceApi
15
- import vn.momo.kits.platform.getScreenDimensions
16
- import kotlin.math.max
17
- import kotlin.math.min
18
- import vn.momo.uikits.resources.Res
19
- import vn.momo.uikits.resources.momosignature
20
- import vn.momo.uikits.resources.momotrustdisplay
21
- import vn.momo.uikits.resources.sfprotext_black
22
- import vn.momo.uikits.resources.sfprotext_bold
23
- import vn.momo.uikits.resources.sfprotext_heavy
24
- import vn.momo.uikits.resources.sfprotext_light
25
- import vn.momo.uikits.resources.sfprotext_medium
26
- import vn.momo.uikits.resources.sfprotext_regular
27
- import vn.momo.uikits.resources.sfprotext_semibold
28
- import vn.momo.uikits.resources.sfprotext_thin
29
- import vn.momo.uikits.resources.sfprotext_ultralight
30
-
31
- const val DEFAULT_SCREEN_SIZE = 375f
32
- const val MAX_FONT_SCALE = 1.5f
33
- const val MAX_DEVICE_SCALE = 5
34
-
35
- @Composable
36
- fun scaleSize(size: Float): Float {
37
- val scaleSizeMaxRate: Float = ScaleSizeMaxRate.current ?: MAX_FONT_SCALE
38
- val deviceWidth = getScreenDimensions().width
39
- val deviceScale = deviceWidth / DEFAULT_SCREEN_SIZE
40
-
41
- val density = LocalDensity.current
42
- val fontScale = density.fontScale
43
-
44
- val defaultFontSize = size / fontScale //To ignore OS scale
45
- var fontSizeScaleDevice = defaultFontSize
46
- var fontSizeScaleOS = defaultFontSize
47
-
48
- if (deviceScale > 1) {
49
- fontSizeScaleDevice =
50
- min(deviceScale * fontSizeScaleDevice, fontSizeScaleDevice + MAX_DEVICE_SCALE)
51
- }
52
-
53
- if (fontScale > 1) {
54
- fontSizeScaleOS = min(fontScale * fontSizeScaleOS, fontSizeScaleOS * scaleSizeMaxRate)
55
- }
56
-
57
- return max(
58
- fontSizeScaleDevice,
59
- fontSizeScaleOS
60
- )
61
- }
62
-
63
- @Composable
64
- fun scaleSize(size: Dp): Dp {
65
- val density = LocalDensity.current
66
- val px = with(density) { size.toPx() }
67
- val scaledPx = scaleSize(px)
68
- return with(density) { scaledPx.toDp() }
69
- }
70
-
71
-
72
- @OptIn(InternalResourceApi::class)
73
- @Composable
74
- fun getFont(font: FontResource): FontFamily {
75
- return FontFamily(Font(font))
76
- }
77
-
78
- @Composable
79
- fun getFontFamily(fontFamily: String, fontWeight: FontWeight? = FontWeight.Normal): FontFamily {
80
- val key = "$fontFamily-${fontWeight?.weight}"
81
- val fontMap = mapOf(
82
- "SFProText-100" to Res.font.sfprotext_thin,
83
- "SFProText-200" to Res.font.sfprotext_ultralight,
84
- "SFProText-300" to Res.font.sfprotext_light,
85
- "SFProText-400" to Res.font.sfprotext_regular,
86
- "SFProText-500" to Res.font.sfprotext_medium,
87
- "SFProText-600" to Res.font.sfprotext_semibold,
88
- "SFProText-700" to Res.font.sfprotext_bold,
89
- "SFProText-800" to Res.font.sfprotext_heavy,
90
- "SFProText-900" to Res.font.sfprotext_black,
91
-
92
- "MoMoSignature-100" to Res.font.momosignature,
93
- "MoMoSignature-200" to Res.font.momosignature,
94
- "MoMoSignature-300" to Res.font.momosignature,
95
- "MoMoSignature-400" to Res.font.momosignature,
96
- "MoMoSignature-500" to Res.font.momosignature,
97
- "MoMoSignature-600" to Res.font.momosignature,
98
- "MoMoSignature-700" to Res.font.momosignature,
99
- "MoMoSignature-800" to Res.font.momosignature,
100
- "MoMoSignature-900" to Res.font.momosignature,
101
-
102
- "MoMoTrustDisplay-100" to Res.font.momotrustdisplay,
103
- "MoMoTrustDisplay-200" to Res.font.momotrustdisplay,
104
- "MoMoTrustDisplay-300" to Res.font.momotrustdisplay,
105
- "MoMoTrustDisplay-400" to Res.font.momotrustdisplay,
106
- "MoMoTrustDisplay-500" to Res.font.momotrustdisplay,
107
- "MoMoTrustDisplay-600" to Res.font.momotrustdisplay,
108
- "MoMoTrustDisplay-700" to Res.font.momotrustdisplay,
109
- "MoMoTrustDisplay-800" to Res.font.momotrustdisplay,
110
- "MoMoTrustDisplay-900" to Res.font.momotrustdisplay,
111
- )
112
- val font = fontMap[key] ?: Res.font.sfprotext_regular
113
- return getFont(font)
114
- }
115
-
116
- @Immutable
117
- class AppTypography internal constructor(
118
- val headlineDefaultBold: TextStyle,
119
- val headerMBold: TextStyle,
120
- val headerDefaultBold: TextStyle,
121
- val headerSSemibold: TextStyle,
122
- val headerXsSemibold: TextStyle,
123
- val bodyDefaultRegular: TextStyle,
124
- val bodyDefaultRegularStrikethrough: TextStyle,
125
- val descriptionDefaultRegular: TextStyle,
126
- val descriptionDefaultRegularStrikethrough: TextStyle,
127
- val descriptionXsRegular: TextStyle,
128
- val descriptionXsRegularStrikethrough: TextStyle,
129
- val labelDefaultMedium: TextStyle,
130
- val labelSMedium: TextStyle,
131
- val labelXsMedium: TextStyle,
132
- val actionDefaultBold: TextStyle,
133
- val actionSBold: TextStyle,
134
- val actionXsBold: TextStyle,
135
- val actionXxsBold: TextStyle,
136
- ) {
137
- constructor(
138
- default: TextStyle = TextStyle(
139
- fontSize = 14.sp,
140
- lineHeight = 20.sp,
141
- fontWeight = FontWeight.Normal
142
- ),
143
- headlineDefaultBold: TextStyle = TextStyle(
144
- fontSize = 24.sp,
145
- lineHeight = 34.sp,
146
- fontWeight = FontWeight.Bold
147
- ),
148
- headerMBold: TextStyle = TextStyle(
149
- fontSize = 18.sp,
150
- lineHeight = 26.sp,
151
- fontWeight = FontWeight.Bold
152
- ),
153
- headerDefaultBold: TextStyle = TextStyle(
154
- fontSize = 16.sp,
155
- lineHeight = 22.sp,
156
- fontWeight = FontWeight.Bold
157
- ),
158
- headerSSemibold: TextStyle = TextStyle(
159
- fontSize = 14.sp,
160
- lineHeight = 20.sp,
161
- fontWeight = FontWeight.SemiBold
162
- ),
163
- headerXsSemibold: TextStyle = TextStyle(
164
- fontSize = 12.sp,
165
- lineHeight = 18.sp,
166
- fontWeight = FontWeight.SemiBold
167
- ),
168
- bodyDefaultRegular: TextStyle = TextStyle(
169
- fontSize = 14.sp,
170
- lineHeight = 20.sp,
171
- fontWeight = FontWeight.Normal
172
- ),
173
- bodyDefaultRegularStrikethrough: TextStyle = TextStyle(
174
- fontSize = 14.sp,
175
- lineHeight = 20.sp,
176
- fontWeight = FontWeight.Normal,
177
- textDecoration = TextDecoration.LineThrough
178
- ),
179
- descriptionDefaultRegular: TextStyle = TextStyle(
180
- fontSize = 12.sp,
181
- lineHeight = 18.sp,
182
- fontWeight = FontWeight.Normal
183
- ),
184
- descriptionDefaultRegularStrikethrough: TextStyle = TextStyle(
185
- fontSize = 12.sp,
186
- lineHeight = 18.sp,
187
- fontWeight = FontWeight.Normal,
188
- textDecoration = TextDecoration.LineThrough
189
- ),
190
- descriptionXsRegular: TextStyle = TextStyle(
191
- fontSize = 10.sp,
192
- lineHeight = 14.sp,
193
- fontWeight = FontWeight.Normal
194
- ),
195
- descriptionXsRegularStrikethrough: TextStyle = TextStyle(
196
- fontSize = 10.sp,
197
- lineHeight = 14.sp,
198
- fontWeight = FontWeight.Normal,
199
- textDecoration = TextDecoration.LineThrough
200
- ),
201
- labelDefaultMedium: TextStyle = TextStyle(
202
- fontSize = 14.sp,
203
- lineHeight = 20.sp,
204
- fontWeight = FontWeight.Medium
205
- ),
206
- labelSMedium: TextStyle = TextStyle(
207
- fontSize = 12.sp,
208
- lineHeight = 18.sp,
209
- fontWeight = FontWeight.Medium
210
- ),
211
- labelXsMedium: TextStyle = TextStyle(
212
- fontSize = 10.sp,
213
- lineHeight = 14.sp,
214
- fontWeight = FontWeight.Medium
215
- ),
216
- actionDefaultBold: TextStyle = TextStyle(
217
- fontSize = 16.sp,
218
- lineHeight = 22.sp,
219
- fontWeight = FontWeight.Bold
220
- ),
221
- actionSBold: TextStyle = TextStyle(
222
- fontSize = 14.sp,
223
- lineHeight = 20.sp,
224
- fontWeight = FontWeight.Bold
225
- ),
226
- actionXsBold: TextStyle = TextStyle(
227
- fontSize = 12.sp,
228
- lineHeight = 18.sp,
229
- fontWeight = FontWeight.Bold
230
- ),
231
- actionXxsBold: TextStyle = TextStyle(
232
- fontSize = 10.sp,
233
- lineHeight = 14.sp,
234
- fontWeight = FontWeight.Bold
235
- ),
236
- ) : this(
237
- headlineDefaultBold = headlineDefaultBold,
238
- headerMBold = headerMBold,
239
- headerDefaultBold = headerDefaultBold,
240
- headerSSemibold = headerSSemibold,
241
- headerXsSemibold = headerXsSemibold,
242
- bodyDefaultRegular = bodyDefaultRegular,
243
- bodyDefaultRegularStrikethrough = bodyDefaultRegularStrikethrough,
244
- descriptionDefaultRegular = descriptionDefaultRegular,
245
- descriptionDefaultRegularStrikethrough = descriptionDefaultRegularStrikethrough,
246
- descriptionXsRegular = descriptionXsRegular,
247
- descriptionXsRegularStrikethrough = descriptionXsRegularStrikethrough,
248
- labelDefaultMedium = labelDefaultMedium,
249
- labelSMedium = labelSMedium,
250
- labelXsMedium = labelXsMedium,
251
- actionDefaultBold = actionDefaultBold,
252
- actionSBold = actionSBold,
253
- actionXsBold = actionXsBold,
254
- actionXxsBold = actionXxsBold
255
- )
256
- }
257
-
258
- val Typography = AppTypography()
@@ -1,2 +0,0 @@
1
- package vn.momo.kits.layout
2
-
@@ -1,35 +0,0 @@
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
- }
@@ -1,2 +0,0 @@
1
- package vn.momo.kits.layout
2
-
@@ -1,59 +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, label: String? = null): Modifier {
13
- return if (getPlatformName() == "Android") {
14
- semantics {
15
- contentDescription = accessibilityId
16
- }
17
- } else {
18
- semantics {
19
- testTag = accessibilityId
20
- contentDescription = label ?: accessibilityId
21
- }
22
- }
23
- }
24
-
25
- /**
26
- * Alternative for [setAutomationId]
27
- *
28
- * reason: [link](https://developer.android.com/develop/ui/compose/custom-modifiers#composable_function_modifiers_are_never_skipped)
29
- * */
30
- fun Modifier.kitsAutomationId(accessibilityId: String, label: String? = null) =
31
- this then KitsAutomationIdElement(accessibilityId, label)
32
-
33
- private data class KitsAutomationIdElement(
34
- private val accessibilityId: String,
35
- private val label: String? = null,
36
- ) : ModifierNodeElement<KitsAutomationIdNode>() {
37
- override fun create(): KitsAutomationIdNode {
38
- return KitsAutomationIdNode(accessibilityId, label)
39
- }
40
-
41
- override fun update(node: KitsAutomationIdNode) {
42
- node.accessibilityId = accessibilityId
43
- node.label = label
44
- }
45
- }
46
-
47
- private class KitsAutomationIdNode(
48
- var accessibilityId: String,
49
- var label: String?,
50
- ) : Modifier.Node(), SemanticsModifierNode {
51
- override fun SemanticsPropertyReceiver.applySemantics() {
52
- if (getPlatformName() == "Android") {
53
- contentDescription = accessibilityId
54
- } else {
55
- testTag = accessibilityId
56
- contentDescription = label ?: accessibilityId
57
- }
58
- }
59
- }
@@ -1,68 +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
-
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
- }
@@ -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,49 +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.graphics.toArgb
9
- import androidx.compose.ui.unit.Dp
10
- import androidx.compose.ui.unit.dp
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.color = color.toArgb()
38
- it.drawRoundRect(
39
- left = leftPixel,
40
- top = topPixel,
41
- right = rightPixel,
42
- bottom = bottomPixel,
43
- radiusX = borderRadius.toPx(),
44
- radiusY = borderRadius.toPx(),
45
- paint
46
- )
47
- }
48
- }
49
- )
@@ -1,51 +0,0 @@
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
- }