@momo-kits/native-kits 0.89.32-nav.3 → 0.89.33-beta.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.
@@ -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
  )
@@ -17,6 +17,10 @@ val AppNavigator = staticCompositionLocalOf<Navigator> {
17
17
  error("no navigator provided!")
18
18
  }
19
19
 
20
+ val PlatformApi = staticCompositionLocalOf<ComposeApi> {
21
+ error("no api provided!")
22
+ }
23
+
20
24
  class Navigator {
21
25
  fun push(content: @Composable () -> Unit) {
22
26
  }
@@ -49,14 +53,23 @@ class Navigator {
49
53
  }
50
54
  }
51
55
 
56
+ interface ComposeApi {
57
+ fun request(funcName: String, params: String?): String
58
+ fun request(funcName: String, params: String?, onResponse: ((String) -> Unit)?): String
59
+ fun requestCallback(funcName: String, params: String?, onResponse: ((String) -> Unit)?)
60
+ fun removeCallback(id: String)
61
+ }
62
+
52
63
  @Composable
53
64
  fun ApplicationContainer(
54
65
  theme: Theme = defaultTheme,
66
+ composeApi: ComposeApi,
55
67
  content: @Composable () -> Unit,
56
68
  ) {
57
69
  disableOverscroll()
58
70
  CompositionLocalProvider(
59
71
  AppTheme provides theme,
72
+ PlatformApi provides composeApi,
60
73
  AppNavigator provides Navigator(),
61
74
  AppStatusBar provides getStatusBarHeight(),
62
75
  ) {
@@ -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,12 +66,11 @@ 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
  ) {
74
72
  val statusBarHeight = AppStatusBar.current ?: getStatusBarHeight()
73
+ val platformApi = PlatformApi.current
75
74
  val keyboardController = LocalSoftwareKeyboardController.current
76
75
  val keyboardHeight = WindowInsets.ime.asPaddingValues().calculateBottomPadding()
77
76
  val keyboardSize = when {
@@ -100,13 +99,12 @@ fun Screen(
100
99
  HeaderBackground(headerType = headerType, scrollState = scrollState.value)
101
100
  } else {
102
101
  Box(
103
- Modifier.zIndex(5f)
102
+ Modifier.zIndex(2f)
104
103
  .background(Color.White.copy(alpha = opacity))
105
104
  .graphicsLayer { alpha = opacity }
106
105
  ) {
107
106
  HeaderBackground(
108
107
  headerType = headerType,
109
- useShadow = useShadow,
110
108
  scrollState = scrollState.value
111
109
  )
112
110
  }
@@ -117,11 +115,9 @@ fun Screen(
117
115
  title = title,
118
116
  titlePosition = titlePosition,
119
117
  headerRight = headerRight,
120
- isBack = isBack,
121
118
  goBack = goBack,
122
119
  opacity = opacity,
123
120
  animatedHeader = animatedHeader,
124
- useSearchInput = useSearchInput,
125
121
  inputSearchProps = inputSearchProps,
126
122
  scrollState = scrollState.value
127
123
  )
@@ -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,
@@ -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.10",
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//[\"]/})