@momo-kits/native-kits 0.162.1-beta.1-debug → 0.162.1-beta.12-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 (66) hide show
  1. package/CLAUDE.md +78 -0
  2. package/compose/build.gradle.kts +59 -58
  3. package/compose/build.gradle.kts.backup +61 -60
  4. package/compose/compose.podspec +1 -1
  5. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +13 -14
  6. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +2 -2
  7. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
  8. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +5 -7
  9. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +2 -2
  10. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +21 -19
  11. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +1 -1
  12. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +69 -26
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +1 -1
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +1 -1
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +3 -1
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +2 -5
  17. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +1 -1
  18. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +6 -3
  19. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +5 -7
  20. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +21 -22
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +104 -0
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +2 -2
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +2 -2
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +3 -2
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +66 -25
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +42 -28
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +4 -3
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +25 -16
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +3 -1
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +4 -3
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +4 -4
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +0 -10
  33. package/example/ios/Example.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  34. package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  35. package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
  36. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +58 -0
  37. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/Pods-Example.xcscheme +58 -0
  38. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
  39. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
  40. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
  41. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +46 -0
  42. package/gradle/libs.versions.toml +2 -0
  43. package/gradle.properties +1 -1
  44. package/ios/Application/ApplicationEnvironment.swift +1 -0
  45. package/ios/Application/Components.swift +1 -0
  46. package/ios/Application/FloatingButton.swift +1 -0
  47. package/ios/Application/FontScaleStore.swift +59 -0
  48. package/ios/Badge/Badge.swift +1 -0
  49. package/ios/Badge/BadgeRibbon.swift +2 -0
  50. package/ios/Button/Button.swift +1 -1
  51. package/ios/Checkbox/Checkbox.swift +1 -0
  52. package/ios/Information/Information.swift +151 -0
  53. package/ios/Input/Input.swift +1 -0
  54. package/ios/Input/InputPhoneNumber.swift +1 -0
  55. package/ios/Input/InputSearch.swift +3 -0
  56. package/ios/Input/InputTextArea.swift +1 -0
  57. package/ios/OTPKeyboard/KeyboardButton.swift +1 -1
  58. package/ios/Popup/PopupDisplay.swift +6 -0
  59. package/ios/Popup/PopupInput.swift +2 -0
  60. package/ios/Template/TrustBanner/TrustBanner.swift +2 -0
  61. package/ios/Typography/Text.swift +13 -7
  62. package/ios/Typography/Typography.swift +22 -8
  63. package/local.properties +2 -2
  64. package/package.json +1 -1
  65. package/.claude/settings.local.json +0 -32
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Deprecated.kt +0 -107
@@ -23,7 +23,6 @@ import vn.momo.kits.navigation.LocalNavigator
23
23
  import vn.momo.kits.navigation.NavigationOptions
24
24
  import vn.momo.kits.navigation.StackScreen
25
25
  import vn.momo.kits.navigation.component.HeaderType
26
- import vn.momo.kits.platform.getScreenHeight
27
26
 
28
27
  private var bottomTabOptionItems : MutableList<NavigationOptions?> = mutableListOf()
29
28
  internal fun setBottomTabOption(index: Int, options: NavigationOptions){
@@ -45,6 +44,8 @@ fun BottomTab(
45
44
  val navigation = LocalNavigation.current
46
45
  val navigator = LocalNavigator.current
47
46
  val navController = rememberNavController()
47
+ val keyboardBottomPadding = WindowInsets.ime.asPaddingValues().calculateBottomPadding()
48
+ val shouldShowBottomTab = keyboardBottomPadding == 0.dp
48
49
 
49
50
  bottomTabOptionItems = items.mapIndexed { index, item ->
50
51
  item.options ?: NavigationOptions()
@@ -57,10 +58,16 @@ fun BottomTab(
57
58
  )
58
59
  }
59
60
 
60
- Box(modifier = Modifier.fillMaxWidth().height(getScreenHeight()), contentAlignment = Alignment.BottomCenter) {
61
+ Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.BottomCenter) {
61
62
  Box(modifier = Modifier
62
63
  .fillMaxSize()
63
- .padding(bottom = BOTTOM_TAB_BAR_HEIGHT.dp + AppNavigationBar.current)
64
+ .padding(
65
+ bottom = if (shouldShowBottomTab) {
66
+ BOTTOM_TAB_BAR_HEIGHT.dp + AppNavigationBar.current
67
+ } else {
68
+ 0.dp
69
+ }
70
+ )
64
71
  ) {
65
72
  NavHost(
66
73
  navController = navController,
@@ -119,20 +126,22 @@ fun BottomTab(
119
126
  }
120
127
  }
121
128
  }
122
- Column {
123
- BottomTabBar(
124
- items = items,
125
- floatingButton = floatingButton,
126
- navController = navController,
127
- onTabSelected = {
128
- val currentRoute = navController.currentBackStackEntry?.destination?.route
129
- val targetRoute = "option$it"
130
- if (currentRoute != targetRoute){
131
- navController.navigate(targetRoute)
129
+ if (shouldShowBottomTab) {
130
+ Column {
131
+ BottomTabBar(
132
+ items = items,
133
+ floatingButton = floatingButton,
134
+ navController = navController,
135
+ onTabSelected = {
136
+ val currentRoute = navController.currentBackStackEntry?.destination?.route
137
+ val targetRoute = "option$it"
138
+ if (currentRoute != targetRoute) {
139
+ navController.navigate(targetRoute)
140
+ }
132
141
  }
133
- }
134
- )
135
- Spacer(modifier = Modifier.fillMaxWidth().height(AppNavigationBar.current + Spacing.S).background(AppTheme.current.colors.background.surface))
142
+ )
143
+ Spacer(modifier = Modifier.fillMaxWidth().height(AppNavigationBar.current + Spacing.S).background(AppTheme.current.colors.background.surface))
144
+ }
136
145
  }
137
146
  }
138
147
  }
@@ -23,12 +23,14 @@ import androidx.navigation.compose.currentBackStackEntryAsState
23
23
  import vn.momo.kits.application.IsShowBaseLineDebug
24
24
  import vn.momo.kits.components.*
25
25
  import vn.momo.kits.const.*
26
+ import vn.momo.kits.modifier.InternalApi
26
27
  import vn.momo.kits.modifier.conditional
27
28
  import vn.momo.kits.modifier.noFeedbackClickable
28
29
  import vn.momo.kits.platform.getScreenDimensions
29
30
 
30
31
  internal val floatingButtonWidth = 75.dp
31
- internal const val BOTTOM_TAB_BAR_HEIGHT = 64
32
+ @InternalApi
33
+ const val BOTTOM_TAB_BAR_HEIGHT = 64
32
34
 
33
35
  @Composable
34
36
  internal fun BottomTabBar(
@@ -1,6 +1,6 @@
1
1
  package vn.momo.kits.navigation.component
2
2
 
3
- import vn.momo.kits.utils.Deprecated.InternalApi
3
+ import vn.momo.kits.modifier.InternalApi
4
4
 
5
5
  import androidx.compose.animation.core.animateFloatAsState
6
6
  import androidx.compose.foundation.background
@@ -44,7 +44,8 @@ import vn.momo.kits.navigation.LocalOptions
44
44
  import vn.momo.kits.navigation.LocalScrollState
45
45
  import vn.momo.kits.navigation.getInputSearchType
46
46
 
47
- internal const val HEADER_HEIGHT = 52
47
+ @InternalApi
48
+ const val HEADER_HEIGHT = 52
48
49
  internal enum class InputSearchType { None, Header, Animated }
49
50
  enum class TitlePosition { LEFT, CENTER }
50
51
 
@@ -109,7 +110,7 @@ internal fun Header(onBackHandler: (() -> Unit)? = null) {
109
110
  backgroundButton = headerColor.backgroundButton,
110
111
  tintIconColor = headerColor.tintIconColor,
111
112
  onBackHandler = {
112
- onBackHandler?.invoke() ?: navigator.onBackSafe { }
113
+ navigator.onBackSafe { }
113
114
  }
114
115
  )
115
116
  Spacer(Modifier.width(Spacing.S))
@@ -1,6 +1,6 @@
1
1
  package vn.momo.kits.navigation.component
2
2
 
3
- import vn.momo.kits.utils.Deprecated.InternalApi
3
+ import vn.momo.kits.modifier.InternalApi
4
4
 
5
5
  import androidx.compose.foundation.background
6
6
  import androidx.compose.foundation.border
@@ -26,7 +26,7 @@ import androidx.compose.ui.Modifier
26
26
  import androidx.compose.ui.draw.clip
27
27
  import androidx.compose.ui.graphics.Color
28
28
  import androidx.compose.ui.unit.dp
29
- import vn.momo.kits.application.ApplicationContext
29
+ import vn.momo.kits.application.LocalContext
30
30
  import vn.momo.kits.application.MiniAppContext
31
31
  import vn.momo.kits.components.BadgeDot
32
32
  import vn.momo.kits.components.DotSize
@@ -66,7 +66,7 @@ internal fun Toolkit(
66
66
  headerColor: HeaderColor
67
67
  ) {
68
68
  val api = LocalMaxApi.current
69
- val context = ApplicationContext.current
69
+ val context = LocalContext.current
70
70
 
71
71
  var isFavorite by remember { mutableStateOf(false) }
72
72
  val isLoading by remember { mutableStateOf(false) }
@@ -306,4 +306,4 @@ data class Tool(
306
306
  private data class NavigationButtonConfig(
307
307
  val icon: String,
308
308
  val onPress: () -> Unit
309
- )
309
+ )
@@ -5,16 +5,6 @@ import org.jetbrains.compose.resources.DrawableResource
5
5
  import org.jetbrains.compose.resources.InternalResourceApi
6
6
  import org.jetbrains.compose.resources.ResourceItem
7
7
  import org.jetbrains.compose.resources.readResourceBytes
8
-
9
- @OptIn(InternalResourceApi::class)
10
- @Composable
11
- internal fun getResource(name: String): DrawableResource {
12
- return DrawableResource(
13
- "drawable:$name",
14
- setOf(ResourceItem(setOf(), "drawable/$name", -1, -1))
15
- )
16
- }
17
-
18
8
  @OptIn(InternalResourceApi::class)
19
9
  @Composable
20
10
  internal fun readJson(name: String): String {
@@ -0,0 +1,14 @@
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>
@@ -0,0 +1,5 @@
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>
@@ -0,0 +1,58 @@
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>
@@ -0,0 +1,58 @@
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>
@@ -0,0 +1,58 @@
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>
@@ -0,0 +1,58 @@
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>
@@ -0,0 +1,58 @@
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>
@@ -0,0 +1,46 @@
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>
@@ -21,6 +21,7 @@ maxapi = "0.1.1"
21
21
  vanniktechMavenPublish = "0.34.0"
22
22
  kits = "0.159.1-beta.7"
23
23
  nativemaxapi = "0.0.6"
24
+ gif-image = "0.1.2"
24
25
 
25
26
  [libraries]
26
27
  ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor-version" }
@@ -53,6 +54,7 @@ androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "a
53
54
  androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" }
54
55
  material = { module = "com.google.android.material:material", version.ref = "material" }
55
56
 
57
+ gif-image = { module = "vn.momo.kits:gif-image", version.ref = "gif-image" }
56
58
  [plugins]
57
59
  jetbrains-kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
58
60
  jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
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.162.1-beta.1
21
+ version=0.162.1-beta.12
22
22
 
23
23
  repo=GitLab
24
24
  url=https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven
@@ -46,5 +46,6 @@ public class ApplicationEnvironment: ObservableObject {
46
46
  self.applicationContext = applicationContext
47
47
  self.composeApi = composeApi
48
48
  self.config = config
49
+ FontScaleStore.shared.bind(composeApi)
49
50
  }
50
51
  }
@@ -245,6 +245,7 @@ public struct Header: View {
245
245
  } else {
246
246
  Text(title)
247
247
  .font(.system(size: 17, weight: .bold))
248
+ .ignoreBoldTextSetting()
248
249
  .foregroundColor(tintColor ?? Colors.black17)
249
250
  .frame(maxWidth: titlePosition == .center ? UIScreen.main.bounds.width - 252 : nil)
250
251
  .frame(maxWidth: titlePosition == .center ? .infinity : UIScreen.main.bounds.width - 172, alignment: titlePosition == .center ? .center : .leading)
@@ -155,6 +155,7 @@ public struct FloatingButton: View {
155
155
  Text(label)
156
156
  .foregroundColor(.white)
157
157
  .font(.system(size: scaleSize(16), weight: .bold))
158
+ .ignoreBoldTextSetting()
158
159
  .lineLimit(1)
159
160
  .background(
160
161
  GeometryReader { geo in
@@ -0,0 +1,59 @@
1
+ import SwiftUI
2
+
3
+ public struct FontScaleConfig {
4
+ public var useOSFontScale: Bool
5
+ public var userScaleRate: CGFloat?
6
+
7
+ public init(useOSFontScale: Bool = true, userScaleRate: CGFloat? = nil) {
8
+ self.useOSFontScale = useOSFontScale
9
+ self.userScaleRate = userScaleRate
10
+ }
11
+ }
12
+
13
+ public final class FontScaleStore: ObservableObject {
14
+ public static let shared = FontScaleStore()
15
+
16
+ @Published public private(set) var config = FontScaleConfig()
17
+
18
+ private var didBind = false
19
+ private var observerId: String?
20
+
21
+ private init() {}
22
+
23
+ public func update(_ newConfig: FontScaleConfig) {
24
+ if Thread.isMainThread {
25
+ config = newConfig
26
+ } else {
27
+ DispatchQueue.main.async { [weak self] in self?.config = newConfig }
28
+ }
29
+ }
30
+
31
+ public func bind(_ api: KitComposeApi?) {
32
+ guard let api = api, !didBind else { return }
33
+ didBind = true
34
+
35
+ apply(api.request(funcName: "getFontScaleConfig", params: nil))
36
+ observerId = api.request(funcName: "observer", params: ["font_scale_config"]) { [weak self] response in
37
+ self?.apply(response)
38
+ }
39
+ }
40
+
41
+ private func apply(_ response: String) {
42
+ guard let parsed = FontScaleStore.parse(response) else { return }
43
+ update(parsed)
44
+ }
45
+
46
+ static func parse(_ response: String) -> FontScaleConfig? {
47
+ guard
48
+ let data = response.data(using: .utf8),
49
+ let json = (try? JSONSerialization.jsonObject(with: data)) as? [String: Any]
50
+ else { return nil }
51
+
52
+ let obj = (json["response"] as? [String: Any]) ?? (json["data"] as? [String: Any]) ?? json
53
+ guard obj["useOSFontScale"] != nil || obj["userScaleRate"] != nil else { return nil }
54
+
55
+ let useOS = (obj["useOSFontScale"] as? Bool) ?? true
56
+ let rate = (obj["userScaleRate"] as? NSNumber).map { CGFloat($0.doubleValue) }
57
+ return FontScaleConfig(useOSFontScale: useOS, userScaleRate: rate)
58
+ }
59
+ }
@@ -54,6 +54,7 @@ public struct Badge: View {
54
54
  public var body: some View {
55
55
  Text(formatTitle(label))
56
56
  .font(.system(size: scaleSize(10), weight: .bold))
57
+ .ignoreBoldTextSetting()
57
58
  .foregroundColor(Colors.black01)
58
59
  .padding(.horizontal, Spacing.XS)
59
60
  .frame(minWidth: scaleSize(16), minHeight: scaleSize(16))