@momo-kits/native-kits 0.165.2-beta.2-debug → 0.167.1-beta.10-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 (34) hide show
  1. package/compose/build.gradle.kts +1 -1
  2. package/compose/compose.podspec +1 -1
  3. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +2 -2
  4. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +1 -1
  5. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +1 -1
  6. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +2 -2
  7. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +6 -28
  8. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +13 -11
  9. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +22 -9
  10. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +11 -9
  11. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +33 -47
  12. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +32 -6
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +3 -1
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +2 -3
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +2 -1
  16. package/gradle.properties +1 -1
  17. package/ios/native-kits.podspec +1 -1
  18. package/ios-demo/MoMoUIKitsDemo.podspec +1 -1
  19. package/package.json +1 -1
  20. package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Example.xcscheme +0 -32
  21. package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  22. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  23. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/WorkspaceSettings.xcsettings +0 -16
  24. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
  25. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +0 -5
  26. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
  27. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
  28. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
  29. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
  30. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
  31. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios-LottiePrivacyInfo.xcscheme +0 -58
  32. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios.xcscheme +0 -58
  33. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +0 -60
  34. package/local.properties +0 -8
@@ -40,7 +40,7 @@ kotlin {
40
40
  }
41
41
 
42
42
  cocoapods {
43
- version = "0.165.2-beta.2-debug"
43
+ version = "0.167.1-beta.10-debug"
44
44
  summary = "IOS Shared module"
45
45
  homepage = "https://momo.vn"
46
46
  ios.deploymentTarget = "15.0"
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |spec|
2
2
  spec.name = 'compose'
3
- spec.version = '0.165.2-beta.2-debug'
3
+ spec.version = '0.167.1-beta.4-debug'
4
4
  spec.homepage = 'https://momo.vn'
5
5
  spec.source = { :http=> ''}
6
6
  spec.authors = ''
@@ -38,13 +38,13 @@ import vn.momo.kits.components.Icon
38
38
  import vn.momo.kits.components.Text
39
39
  import vn.momo.kits.const.AppTheme
40
40
  import vn.momo.kits.const.Colors
41
+ import vn.momo.kits.const.KitDesignSystem
41
42
  import vn.momo.kits.const.Spacing
42
43
  import vn.momo.kits.const.Typography
43
44
  import vn.momo.kits.const.getFontFamily
44
45
  import vn.momo.kits.modifier.kitsAutomationId
45
46
  import vn.momo.kits.modifier.noFeedbackClickable
46
47
  import vn.momo.kits.modifier.setAutomationId
47
- import vn.momo.kits.navigation.component.HEADER_FONT_FAMILY
48
48
  import vn.momo.kits.navigation.component.HEADER_HEIGHT
49
49
  import vn.momo.kits.utils.getAppStatusBarHeight
50
50
  import kotlin.math.max
@@ -362,7 +362,7 @@ private fun LiteScreenLayout(
362
362
  text = title,
363
363
  color = headerColor.tintIconColor,
364
364
  style = titleStyle,
365
- fontFamily = HEADER_FONT_FAMILY,
365
+ fontFamily = if (KitDesignSystem.isWhiteList) "MoMoTrustDisplay" else "SFProText",
366
366
  modifier = titleModifier,
367
367
  maxLines = 1,
368
368
  overflow = TextOverflow.Ellipsis
@@ -18,7 +18,7 @@ import vn.momo.kits.const.Spacing
18
18
  enum class DividerType { DEFAULT, DASH }
19
19
 
20
20
  @Composable
21
- fun Divider(useMargin: Boolean = true, type: DividerType = DividerType.DEFAULT) {
21
+ fun Divider(useMargin: Boolean = false, type: DividerType = DividerType.DEFAULT) {
22
22
  val color = AppTheme.current.colors.border.default
23
23
  val margin = if (useMargin) Spacing.XS else 0.dp
24
24
  if (type == DividerType.DASH) {
@@ -266,7 +266,7 @@ fun Input(
266
266
  )
267
267
  }
268
268
 
269
- val passwordFontFamily = getFontFamily(AppTheme.current.font, FontWeight.Normal)
269
+ val passwordFontFamily = getFontFamily("SFProText", FontWeight.Normal)
270
270
  val passwordFontSize = scaleSize(24.sp)
271
271
  val visualTransformation = remember(secureTextEntry, inputState.passHidden, passwordFontFamily) {
272
272
  if (secureTextEntry && !inputState.passHidden)
@@ -117,7 +117,7 @@ val defaultTheme = Theme(
117
117
  container = Colors.blue_08
118
118
  )
119
119
  ),
120
- font = "MomoTrustSans",
120
+ font = "SFProText",
121
121
  assets = ThemeAssets(
122
122
  headerBackground = null
123
123
  )
@@ -174,7 +174,7 @@ val darkTheme = Theme(
174
174
  container = Colors.blue_08
175
175
  )
176
176
  ),
177
- font = "MomoTrustSans",
177
+ font = "SFProText",
178
178
  assets = ThemeAssets(
179
179
  headerBackground = null
180
180
  )
@@ -89,14 +89,13 @@ fun scaleSize(textStyle: TextStyle): TextStyle {
89
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
90
  * cho cả React Native lẫn native, nên bản copy trong `composeResources` chỉ làm phình app.
91
91
  */
92
- private const val LEGACY_DEFAULT_FONT_FILE = "SFProText-Regular.ttf"
93
- private const val NEW_DEFAULT_FONT_FILE = "MomoTrustSans-Regular.ttf"
92
+ private const val DEFAULT_FONT_FILE = "SFProText-Regular.ttf"
94
93
 
95
94
  private val hostFontFiles: Map<String, String> = mapOf(
96
95
  "SFProText-100" to "SFProText-Thin.ttf",
97
96
  "SFProText-200" to "SFProText-Ultralight.ttf",
98
97
  "SFProText-300" to "SFProText-Light.ttf",
99
- "SFProText-400" to LEGACY_DEFAULT_FONT_FILE,
98
+ "SFProText-400" to DEFAULT_FONT_FILE,
100
99
  "SFProText-500" to "SFProText-Medium.ttf",
101
100
  "SFProText-600" to "SFProText-Semibold.ttf",
102
101
  "SFProText-700" to "SFProText-Bold.ttf",
@@ -120,34 +119,13 @@ private val hostFontFiles: Map<String, String> = mapOf(
120
119
  )
121
120
  }
122
121
 
123
- /**
124
- * Font mặc định mới, chỉ áp cho user nằm trong whitelist design system ([KitDesignSystem]).
125
- * Ngoài whitelist thì quay về [LEGACY_DEFAULT_FONT_FAMILY] như trước.
126
- */
127
- private const val NEW_DEFAULT_FONT_FAMILY = "MomoTrustSans"
128
- private const val LEGACY_DEFAULT_FONT_FAMILY = "SFProText"
129
-
130
- /**
131
- * Font thuoc bo design system moi. MoMoTrustDisplay chi duoc header dung tu DS-791
132
- * (commit header title 5bfde6251); truoc do header lay font theo theme, nen ngoai
133
- * whitelist ca hai deu ha ve [LEGACY_DEFAULT_FONT_FAMILY].
134
- */
135
- private val newFontFamilies = setOf(NEW_DEFAULT_FONT_FAMILY, "MoMoTrustDisplay")
136
-
137
122
  @Composable
138
123
  fun getFontFamily(fontFamily: String, fontWeight: FontWeight? = FontWeight.Normal): FontFamily {
139
- val isWhiteList = KitDesignSystem.isWhiteList
140
- val resolvedFamily =
141
- if (fontFamily in newFontFamilies && !isWhiteList) {
142
- LEGACY_DEFAULT_FONT_FAMILY
143
- } else {
144
- fontFamily
145
- }
146
- val defaultFile = if (isWhiteList) NEW_DEFAULT_FONT_FILE else LEGACY_DEFAULT_FONT_FILE
147
- val key = "$resolvedFamily-${fontWeight?.weight}"
148
- val fileName = hostFontFiles[key] ?: defaultFile
124
+ val family = if (KitDesignSystem.isWhiteList && fontFamily == "SFProText") "MomoTrustSans" else fontFamily
125
+ val key = "$family-${fontWeight?.weight}"
126
+ val fileName = hostFontFiles[key] ?: DEFAULT_FONT_FILE
149
127
  return hostFontFamily(fileName)
150
- ?: hostFontFamily(defaultFile)
128
+ ?: hostFontFamily(DEFAULT_FONT_FILE)
151
129
  ?: FontFamily.Default
152
130
  }
153
131
 
@@ -4,6 +4,7 @@ import androidx.compose.foundation.background
4
4
  import androidx.compose.foundation.layout.Arrangement
5
5
  import androidx.compose.foundation.layout.Box
6
6
  import androidx.compose.foundation.layout.BoxWithConstraints
7
+ import androidx.compose.foundation.layout.ExperimentalLayoutApi
7
8
  import androidx.compose.foundation.layout.FlowRow
8
9
  import androidx.compose.foundation.layout.PaddingValues
9
10
  import androidx.compose.foundation.layout.fillMaxWidth
@@ -14,6 +15,7 @@ import androidx.compose.runtime.CompositionLocalProvider
14
15
  import androidx.compose.ui.Modifier
15
16
  import androidx.compose.ui.draw.clip
16
17
  import androidx.compose.ui.draw.shadow
18
+ import androidx.compose.ui.graphics.Color
17
19
  import androidx.compose.ui.unit.dp
18
20
  import vn.momo.kits.components.Image
19
21
  import vn.momo.kits.const.AppTheme
@@ -21,30 +23,30 @@ import vn.momo.kits.const.Radius
21
23
  import vn.momo.kits.const.Spacing
22
24
 
23
25
  @Composable
24
- internal fun Card(
26
+ @OptIn(ExperimentalLayoutApi::class)
27
+ fun Card(
25
28
  useShadow: Boolean = false,
26
29
  backgroundImage: String? = null,
30
+ backgroundColor: Color? = null,
27
31
  contentPadding: PaddingValues = PaddingValues(Spacing.M),
28
32
  modifier: Modifier = Modifier,
29
33
  content: @Composable () -> Unit,
30
34
  ) {
31
- val columns = 12
32
- val gutter = 8.dp
35
+ val columns = gridColumns()
36
+ val gap = Spacing.S
33
37
  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
+ var surface = modifier.fillMaxWidth().padding(horizontal = Spacing.M)
39
+ if (useShadow) surface = surface.shadow(6.dp, shape)
40
+ surface = surface.clip(shape).background(backgroundColor ?: AppTheme.current.colors.background.surface)
38
41
  Box(modifier = surface) {
39
42
  if (backgroundImage != null) {
40
43
  Image(source = backgroundImage, modifier = Modifier.matchParentSize())
41
44
  }
42
45
  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)) {
46
+ CompositionLocalProvider(LocalGridContext provides gridContext(constraints.maxWidth, columns, gap)) {
45
47
  FlowRow(
46
- horizontalArrangement = Arrangement.spacedBy(gutter),
47
- verticalArrangement = Arrangement.spacedBy(gutter),
48
+ horizontalArrangement = Arrangement.spacedBy(gap),
49
+ verticalArrangement = Arrangement.spacedBy(gap),
48
50
  ) { content() }
49
51
  }
50
52
  }
@@ -6,33 +6,46 @@ import androidx.compose.foundation.layout.width
6
6
  import androidx.compose.runtime.Composable
7
7
  import androidx.compose.runtime.compositionLocalOf
8
8
  import androidx.compose.ui.Modifier
9
+ import androidx.compose.ui.platform.LocalDensity
9
10
  import androidx.compose.ui.unit.Dp
10
11
  import androidx.compose.ui.unit.dp
12
+ import vn.momo.kits.platform.getScreenDimensions
13
+ import kotlin.math.floor
11
14
 
12
15
  internal data class GridContext(
13
16
  val numberOfColumns: Int = 12,
14
- val gutter: Dp = 12.dp,
15
- val sizePerSpan: Dp = 0.dp,
17
+ val gutterPx: Int = 0,
18
+ val columnPx: Float = 0f,
19
+ val density: Float = 1f,
16
20
  ) {
17
- fun sizeForSpan(span: Int): Dp = sizePerSpan * span + gutter * (span - 1)
21
+ fun sizeForSpan(span: Int): Dp = (floor(columnPx * span + gutterPx * (span - 1)) / density).dp
18
22
  }
19
23
 
20
24
  internal val LocalGridContext = compositionLocalOf<GridContext?> { null }
21
25
 
22
26
  @Composable
23
- internal fun Item(
24
- widthSpan: Int = 12,
27
+ internal fun gridColumns(): Int = if (getScreenDimensions().width > 600) 24 else 12
28
+
29
+ @Composable
30
+ internal fun gridContext(maxWidthPx: Int, columns: Int, gap: Dp): GridContext {
31
+ val density = LocalDensity.current
32
+ val gutterPx = with(density) { gap.roundToPx() }
33
+ return GridContext(columns, gutterPx, (maxWidthPx - gutterPx * (columns - 1)).toFloat() / columns, density.density)
34
+ }
35
+
36
+ @Composable
37
+ fun Item(
38
+ widthSpan: Int? = null,
25
39
  heightSpan: Int = 0,
26
40
  modifier: Modifier = Modifier,
41
+ contentModifier: Modifier = Modifier,
27
42
  content: @Composable () -> Unit,
28
43
  ) {
29
44
  val grid = LocalGridContext.current
30
45
  var m = modifier
31
46
  if (grid != null) {
32
- m = m.width(grid.sizeForSpan(widthSpan))
47
+ m = m.width(grid.sizeForSpan(widthSpan ?: grid.numberOfColumns))
33
48
  if (heightSpan > 0) m = m.height(grid.sizeForSpan(heightSpan))
34
49
  }
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() }
50
+ Column(modifier = m.then(contentModifier)) { content() }
38
51
  }
@@ -3,6 +3,7 @@ package vn.momo.kits.layout
3
3
  import androidx.compose.foundation.layout.Arrangement
4
4
  import androidx.compose.foundation.layout.Box
5
5
  import androidx.compose.foundation.layout.BoxWithConstraints
6
+ import androidx.compose.foundation.layout.ExperimentalLayoutApi
6
7
  import androidx.compose.foundation.layout.FlowRow
7
8
  import androidx.compose.foundation.layout.fillMaxWidth
8
9
  import androidx.compose.foundation.layout.padding
@@ -11,27 +12,28 @@ import androidx.compose.runtime.CompositionLocalProvider
11
12
  import androidx.compose.ui.Modifier
12
13
  import androidx.compose.ui.unit.dp
13
14
  import vn.momo.kits.components.Image
15
+ import vn.momo.kits.const.Spacing
14
16
 
15
17
  @Composable
16
- internal fun Section(
18
+ @OptIn(ExperimentalLayoutApi::class)
19
+ fun Section(
17
20
  useMargin: Boolean = true,
18
21
  backgroundImage: String? = null,
19
22
  modifier: Modifier = Modifier,
20
23
  content: @Composable () -> Unit,
21
24
  ) {
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)) {
25
+ val columns = gridColumns()
26
+ val gap = Spacing.M
27
+ val margin = if (useMargin) Spacing.M else 0.dp
28
+ Box(modifier = Modifier.fillMaxWidth().padding(horizontal = margin).then(modifier)) {
26
29
  if (backgroundImage != null) {
27
30
  Image(source = backgroundImage, modifier = Modifier.matchParentSize())
28
31
  }
29
32
  BoxWithConstraints(modifier = Modifier.fillMaxWidth()) {
30
- val sizePerSpan = (maxWidth - gutter * (columns - 1)) / columns - 1.dp / columns
31
- CompositionLocalProvider(LocalGridContext provides GridContext(columns, gutter, sizePerSpan)) {
33
+ CompositionLocalProvider(LocalGridContext provides gridContext(constraints.maxWidth, columns, gap)) {
32
34
  FlowRow(
33
- horizontalArrangement = Arrangement.spacedBy(gutter),
34
- verticalArrangement = Arrangement.spacedBy(gutter),
35
+ horizontalArrangement = Arrangement.spacedBy(gap),
36
+ verticalArrangement = Arrangement.spacedBy(gap),
35
37
  ) { content() }
36
38
  }
37
39
  }
@@ -1,11 +1,11 @@
1
1
  package vn.momo.kits.navigation
2
2
 
3
3
  import androidx.compose.animation.animateColorAsState
4
- import androidx.compose.animation.core.animateDpAsState
5
4
  import androidx.compose.foundation.ScrollState
6
5
  import androidx.compose.foundation.background
7
6
  import androidx.compose.foundation.border
8
7
  import androidx.compose.foundation.gestures.ScrollableState
8
+ import androidx.compose.foundation.gestures.animateScrollBy
9
9
  import androidx.compose.foundation.layout.Box
10
10
  import androidx.compose.foundation.layout.Column
11
11
  import androidx.compose.foundation.layout.ColumnScope
@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.imePadding
21
21
  import androidx.compose.foundation.layout.offset
22
22
  import androidx.compose.foundation.layout.padding
23
23
  import androidx.compose.foundation.lazy.LazyListState
24
- import androidx.compose.foundation.lazy.rememberLazyListState
25
24
  import androidx.compose.foundation.rememberScrollState
26
25
  import androidx.compose.foundation.verticalScroll
27
26
  import androidx.compose.material.ExperimentalMaterialApi
@@ -45,8 +44,11 @@ import androidx.compose.ui.layout.onGloballyPositioned
45
44
  import androidx.compose.ui.platform.LocalDensity
46
45
  import androidx.compose.ui.unit.Dp
47
46
  import androidx.compose.ui.unit.dp
47
+ import androidx.compose.ui.unit.lerp
48
48
  import androidx.compose.ui.zIndex
49
49
  import kotlinx.coroutines.flow.Flow
50
+ import kotlinx.coroutines.flow.filter
51
+ import kotlinx.coroutines.launch
50
52
  import vn.momo.kits.components.InputSearch
51
53
  import vn.momo.kits.const.AppNavigationBar
52
54
  import vn.momo.kits.const.AppStatusBar
@@ -154,13 +156,15 @@ internal fun StackScreen(
154
156
  }
155
157
 
156
158
  val limit = with(density) {
157
- (statusBar).toPx() + HEADER_HEIGHT
159
+ (statusBar + HEADER_HEIGHT.dp).toPx()
158
160
  }.toInt()
159
161
 
160
- val (scrollState, scrollInProcess) = if (options.scrollData.scrollState is LazyListState)
161
- (options.scrollData.scrollState as? LazyListState ?: rememberLazyListState()).proxyScrollState(limit, 15)
162
+ val lazyListState = options.scrollData.scrollState as? LazyListState
163
+ val (scrollState, _) = if (lazyListState != null)
164
+ lazyListState.proxyScrollState(limit, 1)
162
165
  else
163
- (options.scrollData.scrollState as? ScrollState ?: rememberScrollState()).proxyLimitedScrollState(limit, 15)
166
+ (options.scrollData.scrollState as? ScrollState ?: rememberScrollState()).proxyLimitedScrollState(limit, 1)
167
+ val snapState: ScrollableState = lazyListState ?: scrollState
164
168
 
165
169
  val footerHeightPx = remember { mutableIntStateOf(0) }
166
170
  val headerRightWidthPx = remember { mutableIntStateOf(0) }
@@ -205,7 +209,7 @@ internal fun StackScreen(
205
209
  }
206
210
 
207
211
  Column(Modifier.zIndex(5f)) {
208
- SearchAnimated(isScrollInProgress = scrollInProcess)
212
+ SearchAnimated(snapState = snapState)
209
213
  }
210
214
 
211
215
  Column(Modifier.zIndex(2f).fillMaxSize()) {
@@ -269,11 +273,7 @@ internal fun ColumnScope.MainContent(content: @Composable () -> Unit, isBottomTa
269
273
  if (inputSearchType == InputSearchType.Animated) {
270
274
  val scrollDp = with(density) { scrollState.value.toDp() }
271
275
 
272
- val animatedTopPadding by animateDpAsState(
273
- targetValue = (HEADER_HEIGHT.dp - scrollDp).coerceIn(0.dp, HEADER_HEIGHT.dp),
274
- label = "AnimatedTopPadding"
275
- )
276
- Spacer(Modifier.height(animatedTopPadding))
276
+ Spacer(Modifier.height((HEADER_HEIGHT.dp - scrollDp).coerceIn(0.dp, HEADER_HEIGHT.dp)))
277
277
  }
278
278
  Column(
279
279
  Modifier
@@ -413,7 +413,7 @@ data class InputSearchLayoutParams(
413
413
  @Suppress("FrequentlyChangingValue")
414
414
  @Composable
415
415
  internal fun SearchAnimated(
416
- isScrollInProgress: Boolean
416
+ snapState: ScrollableState
417
417
  ) {
418
418
  val scrollState = LocalScrollState.current
419
419
  val options = LocalOptions.current
@@ -453,44 +453,24 @@ internal fun SearchAnimated(
453
453
  }
454
454
 
455
455
  InputSearchType.Animated -> {
456
- val animatedTopPadding by animateDpAsState(
457
- targetValue = (maxTopPadding - scrollDp).coerceIn(minTopPadding, maxTopPadding),
458
- label = "AnimatedTopPadding"
459
- )
460
-
461
- val animatedStartPadding by animateDpAsState(
462
- targetValue = (minStartPadding + scrollDp).coerceIn(minStartPadding, maxStartPadding),
463
- label = "AnimatedStartPadding"
464
- )
465
-
466
- val animatedEndPadding by animateDpAsState(
467
- targetValue = (minEndPadding + scrollDp).coerceIn(minEndPadding, maxEndPadding),
468
- label = "AnimatedEndPadding"
469
- )
470
-
471
- val maxPadding = remember(maxTopPadding, maxStartPadding, maxEndPadding) {
472
- maxOf(maxEndPadding, maxStartPadding, maxTopPadding)
473
- }
474
- val snapScrollValue = with(density) { maxPadding.toPx().toInt() }
475
-
476
- LaunchedEffect(isScrollInProgress && scrollState.value != 0 && scrollState.value != snapScrollValue) {
477
- if (scrollDp < maxPadding) {
478
- if (!isScrollInProgress) {
479
- val midpoint = (maxTopPadding - minTopPadding) / 2
480
-
481
- if (scrollDp < midpoint) {
482
- scrollState.animateScrollTo(0)
483
- } else {
484
- scrollState.animateScrollTo(snapScrollValue)
485
- }
456
+ val collapsePx = with(density) { HEADER_HEIGHT.dp.roundToPx() }
457
+ val progress = (scrollState.value / collapsePx.toFloat()).coerceIn(0f, 1f)
458
+
459
+ LaunchedEffect(snapState, collapsePx) {
460
+ snapshotFlow { snapState.isScrollInProgress }
461
+ .filter { !it }
462
+ .collect {
463
+ val offset = snapState.headerOffsetPx() ?: return@collect
464
+ if (offset <= 0 || offset >= collapsePx) return@collect
465
+ val target = if (offset < collapsePx / 2) 0 else collapsePx
466
+ launch { snapState.animateScrollBy((target - offset).toFloat()) }
486
467
  }
487
- }
488
468
  }
489
469
 
490
470
  InputSearchLayoutParams(
491
- topPadding = animatedTopPadding,
492
- startPadding = animatedStartPadding,
493
- endPadding = animatedEndPadding
471
+ topPadding = lerp(maxTopPadding, minTopPadding, progress),
472
+ startPadding = lerp(minStartPadding, maxStartPadding, progress),
473
+ endPadding = lerp(minEndPadding, maxEndPadding, progress)
494
474
  )
495
475
  }
496
476
 
@@ -519,6 +499,12 @@ internal fun SearchAnimated(
519
499
  }
520
500
  }
521
501
 
502
+ private fun ScrollableState.headerOffsetPx(): Int? = when (this) {
503
+ is LazyListState -> if (firstVisibleItemIndex == 0) firstVisibleItemScrollOffset else null
504
+ is ScrollState -> value
505
+ else -> null
506
+ }
507
+
522
508
  private fun quantize(value: Int, stepPx: Int): Int {
523
509
  if (stepPx <= 1) return value
524
510
  return (value / stepPx) * stepPx
@@ -15,11 +15,14 @@ import androidx.compose.foundation.layout.offset
15
15
  import androidx.compose.foundation.layout.padding
16
16
  import androidx.compose.foundation.layout.size
17
17
  import androidx.compose.foundation.layout.width
18
+ import androidx.compose.foundation.layout.wrapContentHeight
18
19
  import androidx.compose.foundation.shape.RoundedCornerShape
19
20
  import androidx.compose.runtime.Composable
20
21
  import androidx.compose.runtime.getValue
21
22
  import androidx.compose.ui.Alignment
22
23
  import androidx.compose.ui.Modifier
24
+ import androidx.compose.ui.draw.clipToBounds
25
+ import androidx.compose.ui.graphics.graphicsLayer
23
26
  import androidx.compose.ui.graphics.Brush
24
27
  import androidx.compose.ui.graphics.Color
25
28
  import androidx.compose.ui.layout.onGloballyPositioned
@@ -28,6 +31,7 @@ import androidx.compose.ui.text.style.TextAlign
28
31
  import androidx.compose.ui.unit.Dp
29
32
  import androidx.compose.ui.unit.dp
30
33
  import vn.momo.kits.components.Icon
34
+ import vn.momo.kits.components.Image
31
35
  import vn.momo.kits.components.InputSearchProps
32
36
  import vn.momo.kits.const.AppStatusBar
33
37
  import vn.momo.kits.const.AppTheme
@@ -63,11 +67,10 @@ internal fun Header(onBackHandler: (() -> Unit)? = null) {
63
67
  else -> HEADER_HEIGHT
64
68
  }
65
69
  val opacity by animateFloatAsState(
66
- targetValue = if (options.headerType is HeaderType.Transparent) {
67
- 0f
68
- } else {
69
- (scrollState.value / opacityHeight.toFloat())
70
- .coerceIn(0f, 1f)
70
+ targetValue = when {
71
+ options.headerType is HeaderType.Transparent -> 0f
72
+ opacityHeight <= 0 -> if (scrollState.value > 0) 1f else 0f
73
+ else -> (scrollState.value / opacityHeight.toFloat()).coerceIn(0f, 1f)
71
74
  }
72
75
  )
73
76
 
@@ -88,15 +91,38 @@ internal fun Header(onBackHandler: (() -> Unit)? = null) {
88
91
  // Centered title needs a full-width overlay to stay screen-centered, not boxed between back button and header right.
89
92
  val centerTitle = titlePosition == TitlePosition.CENTER && options.headerTitle is HeaderTitle.Default
90
93
 
94
+ val headerImage = AppTheme.current.assets.headerBackground
95
+ .takeUnless { options.headerType is HeaderType.Transparent }
96
+
91
97
  Box(
92
98
  Modifier.height(AppStatusBar.current + HEADER_HEIGHT.dp)
93
99
  .fillMaxWidth()
94
- .background(background.copy(alpha = animatedAlpha))
100
+ .conditional(headerImage.isNullOrEmpty()) {
101
+ background(background.copy(alpha = animatedAlpha))
102
+ }
95
103
  .conditional(IsShowBaseLineDebug) {
96
104
  border(1.dp, Colors.blue_03)
97
105
  },
98
106
  contentAlignment = Alignment.BottomCenter
99
107
  ) {
108
+ if (!headerImage.isNullOrEmpty()) {
109
+ Box(
110
+ Modifier
111
+ .matchParentSize()
112
+ .clipToBounds()
113
+ .graphicsLayer { alpha = animatedAlpha }
114
+ .background(background)
115
+ ) {
116
+ Image(
117
+ source = headerImage,
118
+ loading = false,
119
+ modifier = Modifier
120
+ .fillMaxWidth()
121
+ .wrapContentHeight(Alignment.Top, unbounded = true)
122
+ .height(HEADER_BACKGROUND_HEIGHT),
123
+ )
124
+ }
125
+ }
100
126
  Row(
101
127
  modifier = Modifier.height(HEADER_HEIGHT.dp)
102
128
  .fillMaxWidth()
@@ -27,6 +27,8 @@ enum class AnimatedHeaderRatio(val value: Float){
27
27
  RATIO_3_2(3f / 2f)
28
28
  }
29
29
 
30
+ internal val HEADER_BACKGROUND_HEIGHT = 154.dp
31
+
30
32
  @Suppress("FrequentlyChangingValue")
31
33
  @Composable
32
34
  internal fun HeaderBackground() {
@@ -37,7 +39,7 @@ internal fun HeaderBackground() {
37
39
  val backgroundColor = options.backgroundColor ?: AppTheme.current.colors.background.default
38
40
 
39
41
  val minHeight = AppStatusBar.current + HEADER_HEIGHT.dp
40
- val maxHeight = 154.dp
42
+ val maxHeight = HEADER_BACKGROUND_HEIGHT
41
43
  val opacity by animateFloatAsState(
42
44
  targetValue = (1 - (scrollState.value * 1f / HEADER_HEIGHT * 1f)).coerceIn(0f, 1f),
43
45
  )
@@ -9,11 +9,10 @@ import androidx.compose.ui.text.style.TextOverflow
9
9
  import androidx.compose.ui.unit.sp
10
10
  import androidx.compose.ui.zIndex
11
11
  import vn.momo.kits.components.Text
12
+ import vn.momo.kits.const.KitDesignSystem
12
13
  import vn.momo.kits.const.Typography
13
14
  import vn.momo.kits.modifier.setAutomationId
14
15
 
15
- internal const val HEADER_FONT_FAMILY = "MoMoTrustDisplay"
16
-
17
16
  @Composable
18
17
  internal fun HeaderTitle(
19
18
  title: String = "",
@@ -29,7 +28,7 @@ internal fun HeaderTitle(
29
28
  fontSize = 15.sp,
30
29
  lineHeight = 22.sp,
31
30
  ),
32
- fontFamily = HEADER_FONT_FAMILY,
31
+ fontFamily = if (KitDesignSystem.isWhiteList) "MoMoTrustDisplay" else "SFProText",
33
32
  color = color,
34
33
  maxLines = 1,
35
34
  overflow = TextOverflow.Ellipsis
@@ -27,6 +27,7 @@ import vn.momo.kits.components.Skeleton
27
27
  import vn.momo.kits.components.Text
28
28
  import vn.momo.kits.const.AppTheme
29
29
  import vn.momo.kits.const.Colors
30
+ import vn.momo.kits.const.KitDesignSystem
30
31
  import vn.momo.kits.const.Spacing
31
32
  import vn.momo.kits.const.Typography
32
33
  import vn.momo.kits.const.getFontFamily
@@ -79,7 +80,7 @@ internal fun HeaderUser(
79
80
  text = data.title,
80
81
  color = data.tintColor,
81
82
  style = Typography.actionXsBold,
82
- fontFamily = HEADER_FONT_FAMILY,
83
+ fontFamily = if (KitDesignSystem.isWhiteList) "MoMoTrustDisplay" else "SFProText",
83
84
  maxLines = 1,
84
85
  overflow = TextOverflow.Ellipsis
85
86
  )
package/gradle.properties CHANGED
@@ -18,7 +18,7 @@ kotlin.apple.xcodeCompatibility.nowarn=true
18
18
  name="ComposeKits"
19
19
  group=vn.momo.kits
20
20
  artifact.id=kits
21
- version=0.165.2-beta.2
21
+ version=0.167.1-beta.4
22
22
 
23
23
  repo=GitLab
24
24
  url=https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = 'MoMoUIKits'
3
- s.version = '0.165.2-beta.2'
3
+ s.version = '0.167.1-beta.4'
4
4
  s.summary = 'MoMoUIKits for iOS'
5
5
  s.homepage = 'https://momo.vn'
6
6
  s.license = { :type => 'MIT' }
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = 'MoMoUIKitsDemo'
3
- s.version = '0.165.2-beta.2'
3
+ s.version = '0.167.1-beta.4'
4
4
  s.summary = 'Demo browser for MoMoUIKits SwiftUI components'
5
5
  s.homepage = 'https://momo.vn'
6
6
  s.license = { :type => 'MIT' }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/native-kits",
3
- "version": "0.165.2-beta.2-debug",
3
+ "version": "0.167.1-beta.10-debug",
4
4
  "private": false,
5
5
  "dependeNavigationncies": {},
6
6
  "devDependencies": {},
@@ -1,32 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- version = "1.3">
4
- <BuildAction>
5
- <BuildActionEntries>
6
- <BuildActionEntry
7
- buildForRunning = "YES">
8
- <BuildableReference
9
- BuildableIdentifier = "primary"
10
- BlueprintIdentifier = "A6A920D22B2ADD1E00C1A11F"
11
- BuildableName = "Example"
12
- BlueprintName = "Example"
13
- ReferencedContainer = "container:Example.xcodeproj">
14
- </BuildableReference>
15
- </BuildActionEntry>
16
- </BuildActionEntries>
17
- </BuildAction>
18
- <LaunchAction
19
- useCustomWorkingDirectory = "NO"
20
- buildConfiguration = "Debug"
21
- allowLocationSimulation = "YES">
22
- <BuildableProductRunnable>
23
- <BuildableReference
24
- BuildableIdentifier = "primary"
25
- BlueprintIdentifier = "A6A920D22B2ADD1E00C1A11F"
26
- BuildableName = "Example"
27
- BlueprintName = "Example"
28
- ReferencedContainer = "container:Example.xcodeproj">
29
- </BuildableReference>
30
- </BuildableProductRunnable>
31
- </LaunchAction>
32
- </Scheme>
@@ -1,14 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SchemeUserState</key>
6
- <dict>
7
- <key>Example.xcscheme</key>
8
- <dict>
9
- <key>orderHint</key>
10
- <integer>7</integer>
11
- </dict>
12
- </dict>
13
- </dict>
14
- </plist>
@@ -1,16 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>BuildLocationStyle</key>
6
- <string>UseAppPreferences</string>
7
- <key>CustomBuildLocationType</key>
8
- <string>RelativeToDerivedData</string>
9
- <key>DerivedDataCustomLocation</key>
10
- <string>DerivedData</string>
11
- <key>DerivedDataLocationStyle</key>
12
- <string>WorkspaceRelativePath</string>
13
- <key>ShowSharedSchemesAutomaticallyEnabled</key>
14
- <true/>
15
- </dict>
16
- </plist>
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Bucket
3
- uuid = "6B3C387A-E951-41D1-A42C-FB6E447A46BA"
4
- type = "0"
5
- version = "2.0">
6
- </Bucket>
@@ -1,5 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict />
5
- </plist>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "3B6FB503A75BF5BC1FA6F30BC06B9D28"
18
- BuildableName = "MoMoUIKits.framework"
19
- BlueprintName = "MoMoUIKits"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "0AEE99A309977BD12A049FF48AF9BA4B"
18
- BuildableName = "Pods_Example.framework"
19
- BlueprintName = "Pods-Example"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "3847153A6E5EEFB86565BA840768F429"
18
- BuildableName = "SDWebImage.framework"
19
- BlueprintName = "SDWebImage"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "92EBFA3E7005B4C18A9C0B44324EB80F"
18
- BuildableName = "SDWebImageSwiftUI.framework"
19
- BlueprintName = "SDWebImageSwiftUI"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "6510766A9670BFA3B251E2A62446FC5D"
18
- BuildableName = "SkeletonUI.framework"
19
- BlueprintName = "SkeletonUI"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "BF2A15FEC3F3424BBC4B9AD5F86F2D54"
18
- BuildableName = "LottiePrivacyInfo.bundle"
19
- BlueprintName = "lottie-ios-LottiePrivacyInfo"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,58 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- LastUpgradeVersion = "1600"
4
- version = "1.3">
5
- <BuildAction
6
- parallelizeBuildables = "YES"
7
- buildImplicitDependencies = "YES">
8
- <BuildActionEntries>
9
- <BuildActionEntry
10
- buildForTesting = "YES"
11
- buildForRunning = "YES"
12
- buildForProfiling = "YES"
13
- buildForArchiving = "YES"
14
- buildForAnalyzing = "YES">
15
- <BuildableReference
16
- BuildableIdentifier = "primary"
17
- BlueprintIdentifier = "0B967D7F8561D42493EE289EC8D450D1"
18
- BuildableName = "Lottie.framework"
19
- BlueprintName = "lottie-ios"
20
- ReferencedContainer = "container:Pods.xcodeproj">
21
- </BuildableReference>
22
- </BuildActionEntry>
23
- </BuildActionEntries>
24
- </BuildAction>
25
- <TestAction
26
- buildConfiguration = "Debug"
27
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29
- shouldUseLaunchSchemeArgsEnv = "YES">
30
- <Testables>
31
- </Testables>
32
- </TestAction>
33
- <LaunchAction
34
- buildConfiguration = "Debug"
35
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
36
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
37
- launchStyle = "0"
38
- useCustomWorkingDirectory = "NO"
39
- ignoresPersistentStateOnLaunch = "NO"
40
- debugDocumentVersioning = "YES"
41
- debugServiceExtension = "internal"
42
- allowLocationSimulation = "YES">
43
- </LaunchAction>
44
- <ProfileAction
45
- buildConfiguration = "Release"
46
- shouldUseLaunchSchemeArgsEnv = "YES"
47
- savedToolIdentifier = ""
48
- useCustomWorkingDirectory = "NO"
49
- debugDocumentVersioning = "YES">
50
- </ProfileAction>
51
- <AnalyzeAction
52
- buildConfiguration = "Debug">
53
- </AnalyzeAction>
54
- <ArchiveAction
55
- buildConfiguration = "Release"
56
- revealArchiveInOrganizer = "YES">
57
- </ArchiveAction>
58
- </Scheme>
@@ -1,60 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>SchemeUserState</key>
6
- <dict>
7
- <key>MoMoUIKits.xcscheme</key>
8
- <dict>
9
- <key>isShown</key>
10
- <false />
11
- <key>orderHint</key>
12
- <integer>0</integer>
13
- </dict>
14
- <key>Pods-Example.xcscheme</key>
15
- <dict>
16
- <key>isShown</key>
17
- <false />
18
- <key>orderHint</key>
19
- <integer>1</integer>
20
- </dict>
21
- <key>SDWebImage.xcscheme</key>
22
- <dict>
23
- <key>isShown</key>
24
- <false />
25
- <key>orderHint</key>
26
- <integer>2</integer>
27
- </dict>
28
- <key>SDWebImageSwiftUI.xcscheme</key>
29
- <dict>
30
- <key>isShown</key>
31
- <false />
32
- <key>orderHint</key>
33
- <integer>3</integer>
34
- </dict>
35
- <key>SkeletonUI.xcscheme</key>
36
- <dict>
37
- <key>isShown</key>
38
- <false />
39
- <key>orderHint</key>
40
- <integer>4</integer>
41
- </dict>
42
- <key>lottie-ios-LottiePrivacyInfo.xcscheme</key>
43
- <dict>
44
- <key>isShown</key>
45
- <false />
46
- <key>orderHint</key>
47
- <integer>5</integer>
48
- </dict>
49
- <key>lottie-ios.xcscheme</key>
50
- <dict>
51
- <key>isShown</key>
52
- <false />
53
- <key>orderHint</key>
54
- <integer>6</integer>
55
- </dict>
56
- </dict>
57
- <key>SuppressBuildableAutocreation</key>
58
- <dict />
59
- </dict>
60
- </plist>
package/local.properties DELETED
@@ -1,8 +0,0 @@
1
- ## This file must *NOT* be checked into Version Control Systems,
2
- # as it contains information specific to your local configuration.
3
- #
4
- # Location of the SDK. This is only used by Gradle.
5
- # For customization when using a Version Control System, please read the
6
- # header note.
7
- #Tue Apr 08 11:13:31 ICT 2025
8
- sdk.dir=/Users/sonnguyen/Library/Android/sdk