@momo-kits/native-kits 0.161.2-beta.1-debug → 0.161.2-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.
- package/.claude/settings.local.json +32 -0
- package/compose/build.gradle.kts +5 -1
- package/compose/build.gradle.kts.backup +4 -0
- package/compose/compose.podspec +1 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +4 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +5 -1
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +16 -26
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +45 -9
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +4 -2
- package/gradle/libs.versions.toml +1 -1
- package/gradle.properties +1 -1
- package/local.properties +2 -2
- package/package.json +1 -1
- package/example/ios/Example.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +0 -5
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +0 -46
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(yarn react-native:*)",
|
|
5
|
+
"Read(//Users/phuc/.claude/skills/ai-skill-generator/**)",
|
|
6
|
+
"Bash(python3 scripts/install_skill.py --update)",
|
|
7
|
+
"Bash(cd /Users/phuc/momo-kits/.claude/skills/design-system-kits && mkdir -p .claude/skills/design-system-kits && mv SKILL.md README.md references .claude/skills/design-system-kits/)",
|
|
8
|
+
"Bash(mv .claude/skills/design-system-kits/* . && rmdir .claude/skills/design-system-kits && rmdir .claude/skills)",
|
|
9
|
+
"Bash(python3 scripts/migrate_screen.py --dry-run sample/shared/src/commonMain/kotlin/screens/ScreenUsage.kt)",
|
|
10
|
+
"Bash(python3 scripts/migrate_screen.py --dry-run sample/shared/src/commonMain/kotlin/screens/AnimatedHeaderUsage.kt sample/shared/src/commonMain/kotlin/screens/SnackBarScreenUsage.kt 2>&1)",
|
|
11
|
+
"Bash(python3 scripts/migrate_screen.py --dry-run sample/shared/src/commonMain/kotlin/screens/SnackBarScreenUsage.kt)",
|
|
12
|
+
"Bash(cp sample/shared/src/commonMain/kotlin/screens/SnackBarScreenUsage.kt /tmp/SnackBarScreenUsage.kt.orig && python3 scripts/migrate_screen.py sample/shared/src/commonMain/kotlin/screens/SnackBarScreenUsage.kt)",
|
|
13
|
+
"Bash(cp -r /Users/phuc/.claude/skills/migrate-screen-to-navigation-container /Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container)",
|
|
14
|
+
"Bash(mkdir -p /Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/scripts && mv /Users/phuc/momo-native-kits-2/momo-native-kits/scripts/migrate_screen.py /Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/scripts/migrate_screen.py)",
|
|
15
|
+
"Bash(python3 .claude/skills/migrate-screen-to-navigation-container/scripts/generate_eval_cases.py)",
|
|
16
|
+
"Bash(SKILL=\".claude/skills/migrate-screen-to-navigation-container\" && python3 $SKILL/scripts/migrate_screen.py $SKILL/eval/input/ 2>&1 | tail -20)",
|
|
17
|
+
"Bash(SKILL=\".claude/skills/migrate-screen-to-navigation-container\" && cp -r $SKILL/eval/input $SKILL/eval/output && python3 $SKILL/scripts/migrate_screen.py $SKILL/eval/output/ 2>&1 | tail -20)",
|
|
18
|
+
"Bash(SKILL=\".claude/skills/migrate-screen-to-navigation-container\" && cp -r $SKILL/eval/input $SKILL/eval/output && python3 $SKILL/scripts/migrate_screen.py $SKILL/eval/output/ 2>&1 | tail -25)",
|
|
19
|
+
"Bash(SKILL=\".claude/skills/migrate-screen-to-navigation-container\" && cp -r \"$SKILL/eval/input\" \"$SKILL/eval/output\" && python3 \"$SKILL/scripts/migrate_screen.py\" \"$SKILL/eval/output/\" 2>&1 | tail -25)",
|
|
20
|
+
"Bash(SKILL=\"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container\"\ncp -r \"$SKILL/eval/input\" \"$SKILL/eval/output\"\npython3 \"$SKILL/scripts/migrate_screen.py\" \"$SKILL/eval/output/\" 2>&1 | tail -25)",
|
|
21
|
+
"Bash(cd \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container\" && python3 scripts/eval_migration.py 2>&1 | tail -80)",
|
|
22
|
+
"Bash(cd \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container\" && python3 scripts/eval_migration.py 2>&1 | head -30)",
|
|
23
|
+
"Bash(SKILL=\"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container\" && rm -rf \"$SKILL/eval/output\" && cp -r \"$SKILL/eval/input\" \"$SKILL/eval/output\" && python3 \"$SKILL/scripts/migrate_screen.py\" \"$SKILL/eval/output/\" 2>&1 | tail -5)",
|
|
24
|
+
"Bash(SKILL=\"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container\"; rm -rf \"${SKILL}/eval/output\"; cp -r \"${SKILL}/eval/input\" \"${SKILL}/eval/output\" && python3 \"${SKILL}/scripts/migrate_screen.py\" \"${SKILL}/eval/output/\" 2>&1 | tail -5)",
|
|
25
|
+
"Bash(rm -rf \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/eval/output\" && cp -r \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/eval/input\" \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/eval/output\" && python3 \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/scripts/migrate_screen.py\" \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/eval/output/\" 2>&1 | tail -5)",
|
|
26
|
+
"Bash(python3 \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/scripts/eval_migration.py\" 2>&1 | head -35)",
|
|
27
|
+
"Bash(python3 \"/Users/phuc/momo-native-kits-2/momo-native-kits/.claude/skills/migrate-screen-to-navigation-container/scripts/eval_migration.py\" 2>&1 | grep -E \"^=|Files eval|Passed|Failed|A0[0-9]|Per-Group|Failures\" | head -40)",
|
|
28
|
+
"Bash(find /Users/phuc/momo-kits -name \"*.kt\" 2>/dev/null | head -20)",
|
|
29
|
+
"Bash(find /Users/phuc -name \"*PaymentConfirmScreenFull*\" 2>/dev/null | head -10)"
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
}
|
package/compose/build.gradle.kts
CHANGED
|
@@ -40,7 +40,7 @@ kotlin {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
cocoapods {
|
|
43
|
-
version = "0.161.2-beta.
|
|
43
|
+
version = "0.161.2-beta.10-debug"
|
|
44
44
|
summary = "IOS Shared module"
|
|
45
45
|
homepage = "https://momo.vn"
|
|
46
46
|
ios.deploymentTarget = "15.0"
|
|
@@ -85,6 +85,10 @@ kotlin {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
configurations.named("commonMainImplementation") {
|
|
89
|
+
exclude(group = "io.github.alexzhirkevich", module = "keight-core")
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
android {
|
|
89
93
|
namespace = "vn.momo.kits.kits"
|
|
90
94
|
compileSdk = 35
|
|
@@ -85,6 +85,10 @@ kotlin {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
|
+
configurations.named("commonMainImplementation") {
|
|
89
|
+
exclude(group = "io.github.alexzhirkevich", module = "keight-core")
|
|
90
|
+
}
|
|
91
|
+
|
|
88
92
|
android {
|
|
89
93
|
namespace = "$gitlabGroup.$gitlabArtifactId"
|
|
90
94
|
compileSdk = libs.versions.android.compileSdk.get().toInt()
|
package/compose/compose.podspec
CHANGED
|
@@ -13,6 +13,7 @@ import vn.momo.kits.navigation.component.HeaderBackProps
|
|
|
13
13
|
import vn.momo.kits.navigation.component.HeaderRight
|
|
14
14
|
import vn.momo.kits.navigation.component.HeaderTitle
|
|
15
15
|
import vn.momo.kits.navigation.component.HeaderType
|
|
16
|
+
import vn.momo.kits.navigation.component.TitlePosition
|
|
16
17
|
|
|
17
18
|
class Navigation(
|
|
18
19
|
val id: Int = -1,
|
|
@@ -28,6 +29,7 @@ class Navigation(
|
|
|
28
29
|
hiddenBack: Boolean? = null,
|
|
29
30
|
headerBackProps: HeaderBackProps? = null,
|
|
30
31
|
headerTitle: HeaderTitle? = null,
|
|
32
|
+
titlePosition: TitlePosition? = null,
|
|
31
33
|
headerRight: HeaderRight? = null,
|
|
32
34
|
headerType: HeaderType? = null,
|
|
33
35
|
scrollData: ScrollData? = null,
|
|
@@ -43,6 +45,7 @@ class Navigation(
|
|
|
43
45
|
hiddenBack = hiddenBack ?: options.hiddenBack,
|
|
44
46
|
headerBackProps = headerBackProps ?: options.headerBackProps,
|
|
45
47
|
headerTitle = headerTitle ?: options.headerTitle,
|
|
48
|
+
titlePosition = titlePosition ?: options.titlePosition,
|
|
46
49
|
headerRight = headerRight ?: options.headerRight,
|
|
47
50
|
headerType = headerType ?: options.headerType,
|
|
48
51
|
scrollData = scrollData ?: options.scrollData,
|
|
@@ -77,6 +80,7 @@ data class NavigationOptions(
|
|
|
77
80
|
val hiddenBack: Boolean = false,
|
|
78
81
|
val headerBackProps: HeaderBackProps = HeaderBackProps(),
|
|
79
82
|
val headerTitle: HeaderTitle = HeaderTitle.Default("Stack"),
|
|
83
|
+
val titlePosition: TitlePosition = TitlePosition.LEFT,
|
|
80
84
|
val headerRight: HeaderRight = HeaderRight.Toolkit(),
|
|
81
85
|
val headerType: HeaderType = HeaderType.Default(),
|
|
82
86
|
val scrollData: ScrollData = ScrollData(),
|
|
@@ -3,6 +3,7 @@ package vn.momo.kits.navigation
|
|
|
3
3
|
import androidx.compose.animation.*
|
|
4
4
|
import androidx.compose.animation.core.tween
|
|
5
5
|
import androidx.compose.runtime.*
|
|
6
|
+
import androidx.compose.runtime.saveable.rememberSaveable
|
|
6
7
|
import androidx.compose.ui.unit.Dp
|
|
7
8
|
import androidx.navigation.compose.NavHost
|
|
8
9
|
import androidx.navigation.compose.composable
|
|
@@ -49,7 +50,9 @@ fun NavigationContainer(
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
|
|
52
|
-
val
|
|
53
|
+
val screenId = rememberSaveable { DynamicScreenRegistry.nextId() }
|
|
54
|
+
DynamicScreenRegistry.bind(screenId, initialScreenName, initialScreen, options)
|
|
55
|
+
val startDestination = remember(screenId) { DynamicScreenRoute(screenId) }
|
|
53
56
|
|
|
54
57
|
ProvideNavigationEventDispatcherOwner {
|
|
55
58
|
CompositionLocalProvider(
|
|
@@ -132,6 +135,7 @@ fun NavigationContainer(
|
|
|
132
135
|
DisposableEffect(Unit) {
|
|
133
136
|
onDispose {
|
|
134
137
|
navigator.dispose()
|
|
138
|
+
DynamicScreenRegistry.unregisterScreen(screenId)
|
|
135
139
|
}
|
|
136
140
|
}
|
|
137
141
|
}
|
|
@@ -196,6 +196,18 @@ object DynamicScreenRegistry {
|
|
|
196
196
|
return DynamicScreenRoute(id)
|
|
197
197
|
}
|
|
198
198
|
|
|
199
|
+
fun nextId(): Int = idCounter++
|
|
200
|
+
|
|
201
|
+
fun bind(id: Int, screenName: String, content: @Composable () -> Unit, options: NavigationOptions?) {
|
|
202
|
+
screens[id] = DynamicScreen(
|
|
203
|
+
id = id,
|
|
204
|
+
name = screenName,
|
|
205
|
+
content = content,
|
|
206
|
+
options = options
|
|
207
|
+
)
|
|
208
|
+
if (id >= idCounter) idCounter = id + 1 // keep counter ahead after process-death restore
|
|
209
|
+
}
|
|
210
|
+
|
|
199
211
|
fun unregisterScreen(id: Int) {
|
|
200
212
|
screens.remove(id)
|
|
201
213
|
}
|
|
@@ -11,6 +11,7 @@ import androidx.compose.foundation.layout.Column
|
|
|
11
11
|
import androidx.compose.foundation.layout.ColumnScope
|
|
12
12
|
import androidx.compose.foundation.layout.Spacer
|
|
13
13
|
import androidx.compose.foundation.layout.WindowInsets
|
|
14
|
+
import androidx.compose.foundation.layout.asPaddingValues
|
|
14
15
|
import androidx.compose.foundation.layout.aspectRatio
|
|
15
16
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
16
17
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
@@ -27,10 +28,12 @@ import androidx.compose.material.ExperimentalMaterialApi
|
|
|
27
28
|
import androidx.compose.runtime.Composable
|
|
28
29
|
import androidx.compose.runtime.CompositionLocalProvider
|
|
29
30
|
import androidx.compose.runtime.LaunchedEffect
|
|
31
|
+
import androidx.compose.runtime.State
|
|
30
32
|
import androidx.compose.runtime.getValue
|
|
31
33
|
import androidx.compose.runtime.mutableIntStateOf
|
|
32
34
|
import androidx.compose.runtime.mutableStateOf
|
|
33
35
|
import androidx.compose.runtime.remember
|
|
36
|
+
import androidx.compose.runtime.rememberUpdatedState
|
|
34
37
|
import androidx.compose.runtime.snapshotFlow
|
|
35
38
|
import androidx.compose.runtime.staticCompositionLocalOf
|
|
36
39
|
import androidx.compose.ui.Alignment
|
|
@@ -179,23 +182,20 @@ internal fun StackScreen(
|
|
|
179
182
|
HeaderBackground()
|
|
180
183
|
}
|
|
181
184
|
|
|
182
|
-
Box(Modifier.zIndex(
|
|
185
|
+
Box(Modifier.zIndex(4f)) {
|
|
183
186
|
Header(onBackHandler)
|
|
184
187
|
}
|
|
185
188
|
|
|
186
|
-
Column(Modifier.zIndex(
|
|
189
|
+
Column(Modifier.zIndex(5f)) {
|
|
187
190
|
SearchAnimated(isScrollInProgress = scrollInProcess)
|
|
188
191
|
}
|
|
189
192
|
|
|
190
193
|
Column(Modifier.zIndex(2f).fillMaxSize()) {
|
|
191
194
|
MainContent(content = content)
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
Box(Modifier.zIndex(4f).align(Alignment.BottomCenter)) {
|
|
195
195
|
FooterContent()
|
|
196
196
|
}
|
|
197
197
|
|
|
198
|
-
Box(Modifier.zIndex(
|
|
198
|
+
Box(Modifier.zIndex(6f)) {
|
|
199
199
|
FloatingContent()
|
|
200
200
|
}
|
|
201
201
|
|
|
@@ -261,11 +261,6 @@ fun ColumnScope.MainContent(content: @Composable () -> Unit) {
|
|
|
261
261
|
ScreenContent(content = content)
|
|
262
262
|
}
|
|
263
263
|
|
|
264
|
-
if (options.footerComponent != null) {
|
|
265
|
-
val footerHeight = LocalFooterHeightPx.current
|
|
266
|
-
val footerHeightDp = with(density) { footerHeight.value.toDp() }
|
|
267
|
-
Spacer(Modifier.height(footerHeightDp))
|
|
268
|
-
}
|
|
269
264
|
}
|
|
270
265
|
|
|
271
266
|
@Composable
|
|
@@ -279,7 +274,7 @@ fun ScreenContent(content: @Composable () -> Unit) {
|
|
|
279
274
|
Box(Modifier.fillMaxWidth().aspectRatio(animatedHeader.aspectRatio.value)) {
|
|
280
275
|
animatedHeader.composable.invoke(scrollState.value)
|
|
281
276
|
}
|
|
282
|
-
Box(Modifier.
|
|
277
|
+
Box(Modifier.padding(top = AppStatusBar.current + HEADER_HEIGHT.dp + animatedHeader.layoutOffSet)) {
|
|
283
278
|
content()
|
|
284
279
|
}
|
|
285
280
|
}
|
|
@@ -292,22 +287,24 @@ fun ScreenContent(content: @Composable () -> Unit) {
|
|
|
292
287
|
fun FooterContent() {
|
|
293
288
|
val options = LocalOptions.current
|
|
294
289
|
if (options.footerComponent != null) {
|
|
295
|
-
val
|
|
296
|
-
val
|
|
297
|
-
val imeBottom = ime.getBottom(density)
|
|
298
|
-
val thresholdPx = with(density) { 50.dp.toPx() }
|
|
299
|
-
val isKeyboardVisible = imeBottom > thresholdPx
|
|
300
|
-
val bottomPadding = if (isKeyboardVisible) 0.dp else AppNavigationBar.current
|
|
290
|
+
val keyboardSize = keyboardSizeState()
|
|
291
|
+
val bottomPadding = (AppNavigationBar.current - keyboardSize.value).coerceAtLeast(0.dp)
|
|
301
292
|
Footer(footerComponent = options.footerComponent, bottomPadding = bottomPadding)
|
|
302
293
|
}
|
|
303
294
|
}
|
|
304
295
|
|
|
296
|
+
@Composable
|
|
297
|
+
fun keyboardSizeState(): State<Dp> {
|
|
298
|
+
val bottom = WindowInsets.ime.asPaddingValues()
|
|
299
|
+
return rememberUpdatedState(bottom.calculateBottomPadding())
|
|
300
|
+
}
|
|
301
|
+
|
|
305
302
|
@Composable
|
|
306
303
|
fun OverplayView(bottomTabIndex: Int, id: Int) {
|
|
307
304
|
val overplayType = OverplayComponentRegistry.getOverplayType()
|
|
308
305
|
|
|
309
306
|
if (overplayType != null) {
|
|
310
|
-
Box(Modifier.zIndex(if (overplayType == OverplayComponentType.SNACK_BAR) 3f else
|
|
307
|
+
Box(Modifier.zIndex(if (overplayType == OverplayComponentType.SNACK_BAR) 3f else 7f).fillMaxSize()) {
|
|
311
308
|
if (bottomTabIndex != -1) return@Box
|
|
312
309
|
if (OverplayComponentRegistry.currentRootId() != id) return@Box
|
|
313
310
|
OverplayComponentRegistry.OverlayComponent()
|
|
@@ -466,13 +463,6 @@ fun SearchAnimated(
|
|
|
466
463
|
}
|
|
467
464
|
}
|
|
468
465
|
|
|
469
|
-
@Composable
|
|
470
|
-
internal fun isKeyboardVisible(): Boolean {
|
|
471
|
-
val ime = WindowInsets.ime
|
|
472
|
-
val density = LocalDensity.current
|
|
473
|
-
return ime.getBottom(density) > 0
|
|
474
|
-
}
|
|
475
|
-
|
|
476
466
|
private fun quantize(value: Int, stepPx: Int): Int {
|
|
477
467
|
if (stepPx <= 1) return value
|
|
478
468
|
return (value / stepPx) * stepPx
|
|
@@ -6,7 +6,6 @@ import androidx.compose.foundation.border
|
|
|
6
6
|
import androidx.compose.foundation.layout.Arrangement
|
|
7
7
|
import androidx.compose.foundation.layout.Box
|
|
8
8
|
import androidx.compose.foundation.layout.Row
|
|
9
|
-
import androidx.compose.foundation.layout.RowScope
|
|
10
9
|
import androidx.compose.foundation.layout.Spacer
|
|
11
10
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
12
11
|
import androidx.compose.foundation.layout.height
|
|
@@ -23,6 +22,7 @@ import androidx.compose.ui.graphics.Brush
|
|
|
23
22
|
import androidx.compose.ui.graphics.Color
|
|
24
23
|
import androidx.compose.ui.layout.onGloballyPositioned
|
|
25
24
|
import androidx.compose.ui.platform.LocalDensity
|
|
25
|
+
import androidx.compose.ui.text.style.TextAlign
|
|
26
26
|
import androidx.compose.ui.unit.Dp
|
|
27
27
|
import androidx.compose.ui.unit.dp
|
|
28
28
|
import vn.momo.kits.components.Icon
|
|
@@ -44,6 +44,7 @@ import vn.momo.kits.navigation.getInputSearchType
|
|
|
44
44
|
|
|
45
45
|
const val HEADER_HEIGHT = 52
|
|
46
46
|
enum class InputSearchType { None, Header, Animated }
|
|
47
|
+
enum class TitlePosition { LEFT, CENTER }
|
|
47
48
|
|
|
48
49
|
@Composable
|
|
49
50
|
fun Header(onBackHandler: (() -> Unit)? = null) {
|
|
@@ -76,6 +77,13 @@ fun Header(onBackHandler: (() -> Unit)? = null) {
|
|
|
76
77
|
AppTheme.current.colors.background.surface
|
|
77
78
|
|
|
78
79
|
if (options.headerType == HeaderType.None) return
|
|
80
|
+
|
|
81
|
+
val titlePosition = options.titlePosition
|
|
82
|
+
val titleColor = headerColor.tintIconColor
|
|
83
|
+
.copy(alpha = if (inputSearchType == InputSearchType.Animated) 1f - animatedAlpha else 1f)
|
|
84
|
+
// Centered title needs a full-width overlay to stay screen-centered, not boxed between back button and header right.
|
|
85
|
+
val centerTitle = titlePosition == TitlePosition.CENTER && options.headerTitle is HeaderTitle.Default
|
|
86
|
+
|
|
79
87
|
Box(
|
|
80
88
|
Modifier.height(AppStatusBar.current + HEADER_HEIGHT.dp)
|
|
81
89
|
.fillMaxWidth()
|
|
@@ -104,17 +112,37 @@ fun Header(onBackHandler: (() -> Unit)? = null) {
|
|
|
104
112
|
Spacer(Modifier.width(Spacing.M))
|
|
105
113
|
}
|
|
106
114
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
if (centerTitle) {
|
|
116
|
+
Spacer(Modifier.weight(1f))
|
|
117
|
+
} else {
|
|
118
|
+
HeaderContent(
|
|
119
|
+
headerTitle = options.headerTitle,
|
|
120
|
+
tintIconColor = titleColor,
|
|
121
|
+
titlePosition = titlePosition,
|
|
122
|
+
modifier = Modifier.weight(1f)
|
|
123
|
+
)
|
|
124
|
+
}
|
|
112
125
|
Box(Modifier.onGloballyPositioned {
|
|
113
126
|
if(headerRightWidthPx.intValue != it.size.width) headerRightWidthPx.intValue = it.size.width
|
|
114
127
|
}){
|
|
115
128
|
HeaderRight(options.headerRight, options.tintColor, headerColor)
|
|
116
129
|
}
|
|
117
130
|
}
|
|
131
|
+
if (centerTitle) {
|
|
132
|
+
Box(
|
|
133
|
+
modifier = Modifier.height(HEADER_HEIGHT.dp)
|
|
134
|
+
.fillMaxWidth()
|
|
135
|
+
.padding(horizontal = Spacing.M),
|
|
136
|
+
contentAlignment = Alignment.Center
|
|
137
|
+
) {
|
|
138
|
+
HeaderContent(
|
|
139
|
+
headerTitle = options.headerTitle,
|
|
140
|
+
tintIconColor = titleColor,
|
|
141
|
+
titlePosition = titlePosition,
|
|
142
|
+
modifier = Modifier.fillMaxWidth()
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
}
|
|
118
146
|
VerticalShadow(opacity)
|
|
119
147
|
}
|
|
120
148
|
}
|
|
@@ -140,15 +168,23 @@ private fun BackButton(borderColor: Color, backgroundButton: Color, tintIconColo
|
|
|
140
168
|
}
|
|
141
169
|
|
|
142
170
|
@Composable
|
|
143
|
-
fun
|
|
171
|
+
fun HeaderContent(
|
|
172
|
+
headerTitle: HeaderTitle,
|
|
173
|
+
tintIconColor: Color,
|
|
174
|
+
titlePosition: TitlePosition = TitlePosition.LEFT,
|
|
175
|
+
modifier: Modifier = Modifier,
|
|
176
|
+
){
|
|
144
177
|
Box(
|
|
145
|
-
|
|
178
|
+
modifier = modifier,
|
|
179
|
+
contentAlignment = if (titlePosition == TitlePosition.CENTER) Alignment.Center else Alignment.CenterStart
|
|
146
180
|
) {
|
|
147
181
|
when (headerTitle){
|
|
148
182
|
is HeaderTitle.Default -> {
|
|
149
183
|
HeaderTitle(
|
|
150
184
|
title = headerTitle.title,
|
|
151
|
-
color = tintIconColor
|
|
185
|
+
color = tintIconColor,
|
|
186
|
+
modifier = Modifier.fillMaxWidth(fraction = if (titlePosition == TitlePosition.CENTER) 0.5f else 1f),
|
|
187
|
+
textAlign = if (titlePosition == TitlePosition.CENTER) TextAlign.Center else TextAlign.Start
|
|
152
188
|
)
|
|
153
189
|
}
|
|
154
190
|
is HeaderTitle.Journey -> {}
|
|
@@ -16,11 +16,13 @@ import vn.momo.kits.modifier.setAutomationId
|
|
|
16
16
|
fun HeaderTitle(
|
|
17
17
|
title: String = "",
|
|
18
18
|
color: Color? = null,
|
|
19
|
+
modifier: Modifier = Modifier.fillMaxWidth(),
|
|
20
|
+
textAlign: TextAlign = TextAlign.Start,
|
|
19
21
|
) {
|
|
20
22
|
Text(
|
|
21
|
-
modifier =
|
|
23
|
+
modifier = modifier.zIndex(1f).setAutomationId("title_navigation_header"),
|
|
22
24
|
text = title,
|
|
23
|
-
textAlign =
|
|
25
|
+
textAlign = textAlign,
|
|
24
26
|
style = Typography.actionSBold.copy(
|
|
25
27
|
fontSize = 15.sp,
|
|
26
28
|
lineHeight = 22.sp,
|
package/gradle.properties
CHANGED
package/local.properties
CHANGED
|
@@ -4,5 +4,5 @@
|
|
|
4
4
|
# Location of the SDK. This is only used by Gradle.
|
|
5
5
|
# For customization when using a Version Control System, please read the
|
|
6
6
|
# header note.
|
|
7
|
-
#
|
|
8
|
-
sdk.dir=/Users/
|
|
7
|
+
#Mon Dec 22 10:07:29 ICT 2025
|
|
8
|
+
sdk.dir=/Users/phuc/Library/Android/sdk
|
package/package.json
CHANGED
|
@@ -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_^#shared#^_</key>
|
|
8
|
-
<dict>
|
|
9
|
-
<key>orderHint</key>
|
|
10
|
-
<integer>0</integer>
|
|
11
|
-
</dict>
|
|
12
|
-
</dict>
|
|
13
|
-
</dict>
|
|
14
|
-
</plist>
|
|
Binary file
|
|
@@ -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,46 +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
|
-
</dict>
|
|
43
|
-
<key>SuppressBuildableAutocreation</key>
|
|
44
|
-
<dict />
|
|
45
|
-
</dict>
|
|
46
|
-
</plist>
|