@momo-kits/native-kits 0.89.32-nav.3 → 0.89.33-beta.20

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.
@@ -61,8 +61,6 @@ kotlin {
61
61
 
62
62
  publishing {
63
63
  repositories {
64
- google()
65
- mavenCentral()
66
64
  maven {
67
65
  group = libGroup
68
66
  version = libVersion
@@ -32,7 +32,6 @@ import androidx.compose.ui.graphics.Color
32
32
  import androidx.compose.ui.graphics.graphicsLayer
33
33
  import androidx.compose.ui.layout.ContentScale
34
34
  import androidx.compose.ui.platform.LocalDensity
35
- import androidx.compose.ui.semantics.contentDescription
36
35
  import androidx.compose.ui.semantics.semantics
37
36
  import androidx.compose.ui.semantics.testTag
38
37
  import androidx.compose.ui.text.style.TextAlign
@@ -51,7 +50,6 @@ import vn.momo.kits.const.AppTheme
51
50
  import vn.momo.kits.const.Colors
52
51
  import vn.momo.kits.const.Spacing
53
52
  import vn.momo.kits.const.Typography
54
- import vn.momo.kits.modifier.shadow
55
53
  import vn.momo.kits.platform.getStatusBarHeight
56
54
  import vn.momo.kits.utils.bottomBorder
57
55
 
@@ -68,7 +66,6 @@ data class AnimatedHeader(
68
66
  @Composable
69
67
  fun HeaderBackground(
70
68
  headerType: HeaderType = HeaderType.DEFAULT,
71
- useShadow: Boolean? = true,
72
69
  scrollState: Int
73
70
  ) {
74
71
  val statusBarHeight = AppStatusBar.current ?: getStatusBarHeight()
@@ -141,21 +138,12 @@ fun HeaderBackground(
141
138
  }
142
139
  }
143
140
  }
141
+
144
142
  else -> {
145
143
  Box(modifier = Modifier.fillMaxWidth())
146
144
  }
147
145
  }
148
- Box(
149
- modifier = Modifier.fillMaxWidth().height(statusBarHeight + 52.dp)
150
- .alpha(1 - opacityAni)
151
- .background(Colors.black_01)
152
- .then(
153
- if (useShadow == true) Modifier.shadow() else Modifier.bottomBorder(
154
- 1.dp,
155
- Colors.black_04
156
- )
157
- )
158
- )
146
+
159
147
  }
160
148
 
161
149
  @Composable
@@ -163,12 +151,10 @@ fun Header(
163
151
  headerType: HeaderType = HeaderType.DEFAULT,
164
152
  titlePosition: TitlePosition,
165
153
  title: String,
166
- isBack: Boolean,
167
154
  headerRight: @Composable (() -> Unit)? = null,
168
- goBack: (() -> Unit) = { },
155
+ goBack: (() -> Unit)? = null,
169
156
  opacity: Float? = null,
170
157
  animatedHeader: AnimatedHeader? = null,
171
- useSearchInput: Boolean? = false,
172
158
  scrollState: Int = 0,
173
159
  inputSearchProps: InputSearchProps?
174
160
  ) {
@@ -208,7 +194,7 @@ fun Header(
208
194
  horizontalArrangement = Arrangement.SpaceBetween
209
195
  ) {
210
196
  Box {
211
- if (isBack) {
197
+ if (goBack != null) {
212
198
  Box(
213
199
  modifier = Modifier
214
200
  .size(28.dp)
@@ -240,12 +226,11 @@ fun Header(
240
226
  }
241
227
  }
242
228
  }
243
- if (useSearchInput == false) {
244
- Box(Modifier.graphicsLayer {
245
- alpha = if (animatedHeader !== null) opacity ?: 1f else 1f
246
- }) {
247
- headerRight?.invoke()
248
- }
229
+
230
+ Box(Modifier.graphicsLayer {
231
+ alpha = if (animatedHeader !== null) opacity ?: 1f else 1f
232
+ }) {
233
+ headerRight?.invoke()
249
234
  }
250
235
  }
251
236
 
@@ -256,13 +241,12 @@ fun Header(
256
241
  .padding(horizontal = Spacing.M),
257
242
  verticalAlignment = Alignment.CenterVertically,
258
243
  ) {
259
- if (isBack) {
244
+ if (goBack != null && titlePosition == TitlePosition.LEFT) {
260
245
  Spacer(Modifier.width(40.dp))
261
246
  }
262
- if (useSearchInput == true && inputSearchProps != null) {
247
+ if (inputSearchProps != null) {
263
248
  InputSearch(inputSearchProps = inputSearchProps.copy(backgroundColor = backgroundSearch))
264
- }
265
- else{
249
+ } else{
266
250
  Box(
267
251
  Modifier.weight(1f).graphicsLayer {
268
252
  alpha = if (animatedHeader !== null) opacity ?: 1f else 1f
@@ -273,7 +257,6 @@ fun Header(
273
257
  title = title,
274
258
  color = tintIconColor,
275
259
  modifier = Modifier.semantics {
276
- contentDescription = title
277
260
  testTag = "title_navigation_header"
278
261
  }
279
262
  )
@@ -295,7 +278,7 @@ fun HeaderTitle(
295
278
  modifier = Modifier.then(modifier).zIndex(1f),
296
279
  text = title,
297
280
  textAlign = textAlign,
298
- style = Typography.headerDefault,
281
+ style = Typography.actionS,
299
282
  color = color,
300
283
  maxLines = 1
301
284
  )
@@ -56,7 +56,7 @@ fun Screen(
56
56
  horizontalAlignment: Alignment.Horizontal = Alignment.Start,
57
57
  title: String = "Stack",
58
58
  titlePosition: TitlePosition = TitlePosition.LEFT,
59
- goBack: (() -> Unit) = { },
59
+ goBack: (() -> Unit)? = null,
60
60
  scrollable: Boolean = true,
61
61
  scrollState: ScrollState = rememberScrollState(),
62
62
  onContentLayout: ((LayoutCoordinates) -> Unit)? = null,
@@ -66,8 +66,6 @@ fun Screen(
66
66
  fabProps: FabProps? = null,
67
67
  animatedHeader: AnimatedHeader? = null,
68
68
  layoutOffset: Dp = 56.dp,
69
- useShadow: Boolean? = true,
70
- useSearchInput: Boolean? = false,
71
69
  inputSearchProps: InputSearchProps? = null,
72
70
  content: @Composable () -> Unit,
73
71
  ) {
@@ -100,13 +98,12 @@ fun Screen(
100
98
  HeaderBackground(headerType = headerType, scrollState = scrollState.value)
101
99
  } else {
102
100
  Box(
103
- Modifier.zIndex(5f)
101
+ Modifier.zIndex(2f)
104
102
  .background(Color.White.copy(alpha = opacity))
105
103
  .graphicsLayer { alpha = opacity }
106
104
  ) {
107
105
  HeaderBackground(
108
106
  headerType = headerType,
109
- useShadow = useShadow,
110
107
  scrollState = scrollState.value
111
108
  )
112
109
  }
@@ -117,11 +114,9 @@ fun Screen(
117
114
  title = title,
118
115
  titlePosition = titlePosition,
119
116
  headerRight = headerRight,
120
- isBack = isBack,
121
117
  goBack = goBack,
122
118
  opacity = opacity,
123
119
  animatedHeader = animatedHeader,
124
- useSearchInput = useSearchInput,
125
120
  inputSearchProps = inputSearchProps,
126
121
  scrollState = scrollState.value
127
122
  )
@@ -18,9 +18,6 @@ import androidx.compose.ui.Alignment
18
18
  import androidx.compose.ui.Modifier
19
19
  import androidx.compose.ui.draw.clip
20
20
  import androidx.compose.ui.graphics.Color
21
- import androidx.compose.ui.semantics.contentDescription
22
- import androidx.compose.ui.semantics.semantics
23
- import androidx.compose.ui.semantics.testTag
24
21
  import androidx.compose.ui.text.TextStyle
25
22
  import androidx.compose.ui.text.style.TextOverflow
26
23
  import androidx.compose.ui.unit.Dp
@@ -236,7 +233,6 @@ fun Button(
236
233
  isFull: Boolean = true,
237
234
  modifier: Modifier = Modifier,
238
235
  ) {
239
- val testId = "btn_${type.toString().lowercase()}_$title"
240
236
  val customModifier = if (isFull) {
241
237
  modifier
242
238
  .fillMaxWidth()
@@ -258,10 +254,7 @@ fun Button(
258
254
  .padding(horizontal = size.value.padding)
259
255
  .defaultMinSize(
260
256
  minWidth = size.value.width
261
- ).height(size.value.height)
262
- .semantics {
263
- contentDescription = title; testTag = testId
264
- },
257
+ ).height(size.value.height),
265
258
  horizontalArrangement = Arrangement.Center,
266
259
  verticalAlignment = Alignment.CenterVertically,
267
260
  ) {
@@ -1,13 +1,17 @@
1
1
  package vn.momo.kits.components
2
2
 
3
+ import androidx.compose.foundation.layout.Box
3
4
  import androidx.compose.foundation.layout.size
4
5
  import androidx.compose.runtime.Composable
5
6
  import androidx.compose.ui.Modifier
6
7
  import androidx.compose.ui.graphics.Color
7
8
  import androidx.compose.ui.graphics.ColorFilter
8
9
  import androidx.compose.ui.layout.ContentScale
10
+ import androidx.compose.ui.semantics.contentDescription
11
+ import androidx.compose.ui.semantics.semantics
9
12
  import androidx.compose.ui.unit.Dp
10
13
  import androidx.compose.ui.unit.dp
14
+ import coil3.compose.AsyncImage
11
15
  import vn.momo.kits.const.AppTheme
12
16
  import vn.momo.kits.utils.Icons
13
17
 
@@ -23,14 +27,14 @@ fun Icon(
23
27
  } else {
24
28
  Icons[source] ?: ""
25
29
  }
26
- Image(
27
- modifier = modifier.size(size),
28
- source = icon,
29
- loading = false,
30
- options = Options(
30
+ Box(modifier = modifier.size(size).semantics {contentDescription = "img|$icon"}) {
31
+ AsyncImage(
32
+ modifier = Modifier.matchParentSize(),
33
+ model = icon,
34
+ contentDescription = null,
31
35
  contentScale = ContentScale.Fit,
32
- colorFilter = color?.let { ColorFilter.tint(it) }
33
- ),
34
- )
36
+ colorFilter = color?.let { ColorFilter.tint(it) },
37
+ )
38
+ }
35
39
  }
36
40
 
@@ -14,7 +14,6 @@ import androidx.compose.ui.graphics.painter.Painter
14
14
  import androidx.compose.ui.layout.ContentScale
15
15
  import androidx.compose.ui.semantics.contentDescription
16
16
  import androidx.compose.ui.semantics.semantics
17
- import androidx.compose.ui.semantics.testTag
18
17
  import coil3.compose.AsyncImage
19
18
  import vn.momo.kits.const.AppTheme
20
19
 
@@ -48,9 +47,9 @@ fun Image(
48
47
  )
49
48
  }
50
49
 
51
- Box(modifier = modifier) {
50
+ Box(modifier = modifier.semantics {contentDescription = "img|$source"}) {
52
51
  AsyncImage(
53
- modifier = Modifier.matchParentSize().semantics {contentDescription = "img|$source"; testTag = "img|$source"},
52
+ modifier = Modifier.matchParentSize(),
54
53
  model = source,
55
54
  contentDescription = null,
56
55
  contentScale = imageOptions.contentScale,
@@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.size
15
15
  import androidx.compose.foundation.layout.width
16
16
  import androidx.compose.foundation.shape.RoundedCornerShape
17
17
  import androidx.compose.foundation.text.BasicTextField
18
+ import androidx.compose.foundation.text.KeyboardActions
18
19
  import androidx.compose.foundation.text.KeyboardOptions
19
20
  import androidx.compose.material3.CircularProgressIndicator
20
21
  import androidx.compose.runtime.Composable
@@ -90,6 +91,9 @@ data class InputSearchProps(
90
91
  val fontWeight: InputFontWeight = InputFontWeight.REGULAR,
91
92
  val keyboardType: KeyboardType = KeyboardType.Text,
92
93
  val backgroundColor: Color = Colors.black_01,
94
+ val keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
95
+ val keyboardActions: KeyboardActions = KeyboardActions.Default,
96
+ val modifier: Modifier = Modifier
93
97
  )
94
98
 
95
99
  @Composable
@@ -98,7 +102,7 @@ fun InputSearch(
98
102
  text = remember { mutableStateOf("") },
99
103
  iconColor = AppTheme.current.colors.text.default
100
104
  ),
101
-
105
+ clearCondition: (() -> Boolean)? = null
102
106
  ) {
103
107
  var isFocused by remember { mutableStateOf(false) }
104
108
  var isBlurred = false
@@ -124,7 +128,8 @@ fun InputSearch(
124
128
  lineHeight = 20.sp,
125
129
  fontWeight = inputSearchProps.fontWeight.value
126
130
  ),
127
- keyboardOptions = KeyboardOptions.Default.copy(keyboardType = inputSearchProps.keyboardType),
131
+ keyboardOptions = inputSearchProps.keyboardOptions.copy(keyboardType = inputSearchProps.keyboardType),
132
+ keyboardActions = inputSearchProps.keyboardActions,
128
133
  modifier = Modifier.height(36.dp).onFocusChanged {
129
134
  isFocused = it.isFocused
130
135
  if (it.isFocused) {
@@ -137,7 +142,7 @@ fun InputSearch(
137
142
  decorationBox = { innerTextField ->
138
143
  Row(verticalAlignment = Alignment.CenterVertically) {
139
144
  Row(
140
- modifier = Modifier.weight(inputSearchProps.showButtonText.ifTrue(8f, 1f))
145
+ modifier = inputSearchProps.modifier.weight(inputSearchProps.showButtonText.ifTrue(8f, 1f))
141
146
  .background(
142
147
  inputSearchProps.backgroundColor,
143
148
  RoundedCornerShape(Radius.XL)
@@ -152,7 +157,6 @@ fun InputSearch(
152
157
  ),
153
158
  verticalAlignment = Alignment.CenterVertically
154
159
  ) {
155
- //leading icon
156
160
  Icon(
157
161
  source = "navigation_search",
158
162
  modifier = Modifier.padding(end = Spacing.XS),
@@ -188,12 +192,14 @@ fun InputSearch(
188
192
  )
189
193
  }
190
194
  }
191
- RenderRightIconSearch(
192
- inputSearchProps.loading,
193
- inputSearchProps.icon,
194
- iconTintColor,
195
- inputSearchProps.onRightIconPressed
196
- )
195
+ if (clearCondition?.invoke() == true) {
196
+ RenderRightIconSearch(
197
+ inputSearchProps.loading,
198
+ inputSearchProps.icon,
199
+ iconTintColor,
200
+ inputSearchProps.onRightIconPressed
201
+ )
202
+ }
197
203
  }
198
204
  }
199
205
  if (inputSearchProps.showButtonText) {
@@ -27,7 +27,6 @@ import androidx.compose.runtime.setValue
27
27
  import androidx.compose.ui.Alignment
28
28
  import androidx.compose.ui.Modifier
29
29
  import androidx.compose.ui.draw.clip
30
- import androidx.compose.ui.semantics.contentDescription
31
30
  import androidx.compose.ui.semantics.semantics
32
31
  import androidx.compose.ui.semantics.testTag
33
32
  import androidx.compose.ui.text.TextLayoutResult
@@ -97,7 +96,7 @@ fun PopupNotify(
97
96
  }
98
97
 
99
98
  Box(Modifier.semantics {
100
- contentDescription = title; testTag = "popup_notify"
99
+ testTag = "popup_notify"
101
100
  }, contentAlignment = Alignment.TopEnd) {
102
101
  Column(
103
102
  modifier = Modifier
@@ -235,7 +234,7 @@ fun renderRow(
235
234
  title = it.title,
236
235
  type = ButtonType.TEXT,
237
236
  modifier = Modifier.semantics {
238
- contentDescription = it.title; testTag = "btn_popup_cancel"
237
+ testTag = "btn_popup_cancel"
239
238
  }
240
239
  )
241
240
  }
@@ -250,7 +249,7 @@ fun renderRow(
250
249
  },
251
250
  title = primary?.title ?: "",
252
251
  modifier = Modifier.semantics {
253
- contentDescription = primary?.title ?: ""; testTag = "btn_popup_allow"
252
+ testTag = "btn_popup_allow"
254
253
  }
255
254
  )
256
255
  }
@@ -273,7 +272,7 @@ fun renderColumn(
273
272
  },
274
273
  title = primary?.title ?: "",
275
274
  modifier = Modifier.semantics {
276
- contentDescription = primary?.title ?: ""; testTag = "btn_popup_allow"
275
+ testTag = "btn_popup_allow"
277
276
  }
278
277
  )
279
278
  secondary?.let {
@@ -288,7 +287,7 @@ fun renderColumn(
288
287
  title = it.title,
289
288
  type = ButtonType.TEXT,
290
289
  modifier = Modifier.semantics {
291
- contentDescription = it.title; testTag = "btn_popup_cancel"
290
+ testTag = "btn_popup_cancel"
292
291
  }
293
292
  )
294
293
  }
@@ -3,6 +3,8 @@ package vn.momo.kits.components
3
3
  import androidx.compose.runtime.Composable
4
4
  import androidx.compose.ui.Modifier
5
5
  import androidx.compose.ui.graphics.Color
6
+ import androidx.compose.ui.semantics.contentDescription
7
+ import androidx.compose.ui.semantics.semantics
6
8
  import androidx.compose.ui.text.TextLayoutResult
7
9
  import androidx.compose.ui.text.TextStyle
8
10
  import androidx.compose.ui.text.style.TextAlign
@@ -31,7 +33,7 @@ fun Text(
31
33
  val font = getFontFamily(fontFamily, style.fontWeight)
32
34
 
33
35
  androidx.compose.material3.Text(
34
- modifier = modifier,
36
+ modifier = modifier.semantics { contentDescription = text },
35
37
  text = text,
36
38
  color = color ?: AppTheme.current.colors.text.default,
37
39
  style = style,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/native-kits",
3
- "version": "0.89.32-nav.3",
3
+ "version": "0.89.33-beta.20",
4
4
  "private": false,
5
5
  "dependencies": {},
6
6
  "devDependencies": {},
package/publish.sh CHANGED
@@ -3,7 +3,7 @@ rm -rf dist
3
3
  mkdir dist
4
4
 
5
5
  cp . ./dist
6
- mpo
6
+
7
7
  # GET VERSION from mck_package.json
8
8
  VERSIONSTRING=( v$(jq .version package.json) )
9
9
  VERSION=(${VERSIONSTRING//[\"]/})