@momo-kits/native-kits 0.160.7 → 0.161.1-beta.1
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/example/ios/Example.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +5 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/Pods-Example.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImage.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/SkeletonUI.xcscheme +58 -0
- package/example/ios/Pods/Pods.xcodeproj/xcuserdata/huynhdung.xcuserdatad/xcschemes/xcschememanagement.plist +46 -0
- package/ios/Application/ApplicationEnvironment.swift +6 -2
- package/ios/Input/Input.swift +21 -50
- package/ios/Input/InputPhoneNumber.swift +17 -17
- package/ios/Typography/Text.swift +14 -19
- package/ios/Typography/Typography.swift +1 -22
- package/package.json +1 -1
|
@@ -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>
|
|
Binary file
|
|
@@ -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>
|
|
@@ -17,7 +17,7 @@ public class MiniAppContext {
|
|
|
17
17
|
public var toolkitConfig: [String: Any] = [:]
|
|
18
18
|
public var providerId: String = "momo"
|
|
19
19
|
public var permissions: [[String: Any]] = []
|
|
20
|
-
|
|
20
|
+
|
|
21
21
|
public init(appId: String, appCode: String, appName: Any? = nil, appIcon: String, description: Any? = nil, support: [String: Any] = [:], toolkitConfig: [String: Any] = [:], providerId: String = "momo", permissions: [[String: Any]] = []) {
|
|
22
22
|
self.appId = appId
|
|
23
23
|
self.appCode = appCode
|
|
@@ -37,11 +37,15 @@ public class KitConfig {
|
|
|
37
37
|
public var headerGradient: String? = nil
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
public var IsShowBaseLineDebug = false
|
|
41
|
+
|
|
42
|
+
public var UseFontScaleSystem = true
|
|
43
|
+
|
|
40
44
|
public class ApplicationEnvironment: ObservableObject {
|
|
41
45
|
let applicationContext: MiniAppContext?
|
|
42
46
|
let composeApi: KitComposeApi?
|
|
43
47
|
let config: KitConfig?
|
|
44
|
-
|
|
48
|
+
|
|
45
49
|
public init(applicationContext: MiniAppContext? = nil, composeApi: KitComposeApi? = nil, config: KitConfig? = nil) {
|
|
46
50
|
self.applicationContext = applicationContext
|
|
47
51
|
self.composeApi = composeApi
|
package/ios/Input/Input.swift
CHANGED
|
@@ -4,7 +4,7 @@ import Combine
|
|
|
4
4
|
|
|
5
5
|
public struct Input: View {
|
|
6
6
|
@Binding public var text: String
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
public var placeholder: String
|
|
9
9
|
public var floatingValue: String
|
|
10
10
|
public var floatingIcon: String
|
|
@@ -22,7 +22,6 @@ public struct Input: View {
|
|
|
22
22
|
public var leadingIconColor: Color
|
|
23
23
|
public var loading: Bool
|
|
24
24
|
public var required: Bool
|
|
25
|
-
public var maxLength: Int?
|
|
26
25
|
public var fontWeight: InputFontWeight
|
|
27
26
|
public var keyboardType: UIKeyboardType
|
|
28
27
|
public var autofocus: Bool
|
|
@@ -30,10 +29,10 @@ public struct Input: View {
|
|
|
30
29
|
public var onFocus: (() -> Void)?
|
|
31
30
|
public var onBlur: (() -> Void)?
|
|
32
31
|
public var onRightIconPressed: (() -> Void)?
|
|
33
|
-
|
|
32
|
+
|
|
34
33
|
@State private var isFocused: Bool = false
|
|
35
34
|
@State private var isPasswordHidden: Bool = true
|
|
36
|
-
|
|
35
|
+
|
|
37
36
|
public init(
|
|
38
37
|
text: Binding<String>,
|
|
39
38
|
placeholder: String = "",
|
|
@@ -53,7 +52,6 @@ public struct Input: View {
|
|
|
53
52
|
leadingIconColor: Color = Colors.black12,
|
|
54
53
|
loading: Bool = false,
|
|
55
54
|
required: Bool = false,
|
|
56
|
-
maxLength: Int? = nil,
|
|
57
55
|
fontWeight: InputFontWeight = .regular,
|
|
58
56
|
keyboardType: UIKeyboardType = .default,
|
|
59
57
|
autofocus: Bool = false,
|
|
@@ -80,7 +78,6 @@ public struct Input: View {
|
|
|
80
78
|
self.leadingIconColor = leadingIconColor
|
|
81
79
|
self.loading = loading
|
|
82
80
|
self.required = required
|
|
83
|
-
self.maxLength = maxLength
|
|
84
81
|
self.fontWeight = fontWeight
|
|
85
82
|
self.keyboardType = keyboardType
|
|
86
83
|
self.autofocus = autofocus
|
|
@@ -96,7 +93,7 @@ public struct Input: View {
|
|
|
96
93
|
get: { self.text },
|
|
97
94
|
set: { newValue in
|
|
98
95
|
self.text = newValue
|
|
99
|
-
self.onChangeText?(
|
|
96
|
+
self.onChangeText?(newValue)
|
|
100
97
|
}
|
|
101
98
|
)
|
|
102
99
|
|
|
@@ -118,7 +115,7 @@ public struct Input: View {
|
|
|
118
115
|
.offset(x: Spacing.S, y: -8)
|
|
119
116
|
.zIndex(10)
|
|
120
117
|
}
|
|
121
|
-
|
|
118
|
+
|
|
122
119
|
// Input container
|
|
123
120
|
HStack(alignment: .center, spacing: 0) {
|
|
124
121
|
// Leading icon
|
|
@@ -126,7 +123,7 @@ public struct Input: View {
|
|
|
126
123
|
Icon(source: leadingIcon, size: size == .small ? 24 : 32, color: leadingIconColor)
|
|
127
124
|
.padding(.trailing, Spacing.M)
|
|
128
125
|
}
|
|
129
|
-
|
|
126
|
+
|
|
130
127
|
// Text input field
|
|
131
128
|
ZStack(alignment: .leading) {
|
|
132
129
|
if text.isEmpty {
|
|
@@ -136,7 +133,7 @@ public struct Input: View {
|
|
|
136
133
|
color: getPlaceholderColor()
|
|
137
134
|
)
|
|
138
135
|
}
|
|
139
|
-
|
|
136
|
+
|
|
140
137
|
if secureTextEntry && isPasswordHidden {
|
|
141
138
|
SecureInputField(
|
|
142
139
|
text: $text,
|
|
@@ -145,7 +142,6 @@ public struct Input: View {
|
|
|
145
142
|
fontWeight: fontWeight == .bold ? .bold : .regular,
|
|
146
143
|
textColor: UIColor(getTextColor()),
|
|
147
144
|
isDisabled: disabled || readOnly,
|
|
148
|
-
maxLength: maxLength,
|
|
149
145
|
onFocusChange: { focused in
|
|
150
146
|
handleFocusChange(focused)
|
|
151
147
|
},
|
|
@@ -160,15 +156,9 @@ public struct Input: View {
|
|
|
160
156
|
.foregroundColor(getTextColor())
|
|
161
157
|
.disabled(disabled || readOnly)
|
|
162
158
|
.applyPrimaryCursorColor()
|
|
163
|
-
.onChange(of: text) { newValue in
|
|
164
|
-
let limited = limitText(newValue)
|
|
165
|
-
if limited != newValue {
|
|
166
|
-
text = limited
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
159
|
}
|
|
170
160
|
}
|
|
171
|
-
|
|
161
|
+
|
|
172
162
|
// Clear button (only show when focused and has text)
|
|
173
163
|
if isFocused && !text.isEmpty {
|
|
174
164
|
SwiftUI.Button(action: {
|
|
@@ -179,14 +169,14 @@ public struct Input: View {
|
|
|
179
169
|
.padding(.leading, Spacing.S).accessibility(identifier: "ic_clear")
|
|
180
170
|
}
|
|
181
171
|
}
|
|
182
|
-
|
|
172
|
+
|
|
183
173
|
// Loading indicator
|
|
184
174
|
if loading {
|
|
185
175
|
ActivityIndicator(isAnimating: .constant(true), style: .medium)
|
|
186
176
|
.frame(width: 16, height: 16)
|
|
187
177
|
.padding(.leading, Spacing.S)
|
|
188
178
|
}
|
|
189
|
-
|
|
179
|
+
|
|
190
180
|
// Right icon (password toggle or custom icon)
|
|
191
181
|
if secureTextEntry {
|
|
192
182
|
if !text.isEmpty {
|
|
@@ -207,7 +197,7 @@ public struct Input: View {
|
|
|
207
197
|
}
|
|
208
198
|
}
|
|
209
199
|
.padding(.horizontal, Spacing.M)
|
|
210
|
-
.frame(height: scaleSize(size == .small ? 48 : 56
|
|
200
|
+
.frame(height: scaleSize(size == .small ? 48 : 56))
|
|
211
201
|
.background(
|
|
212
202
|
RoundedRectangle(cornerRadius: Radius.S)
|
|
213
203
|
.fill(Colors.black01)
|
|
@@ -217,7 +207,7 @@ public struct Input: View {
|
|
|
217
207
|
.stroke(borderColor(), lineWidth: 1)
|
|
218
208
|
)
|
|
219
209
|
}
|
|
220
|
-
|
|
210
|
+
|
|
221
211
|
// Error or hint
|
|
222
212
|
ErrorView(
|
|
223
213
|
errorMessage: error,
|
|
@@ -233,9 +223,9 @@ public struct Input: View {
|
|
|
233
223
|
}
|
|
234
224
|
}
|
|
235
225
|
}
|
|
236
|
-
|
|
226
|
+
|
|
237
227
|
// MARK: - Helpers
|
|
238
|
-
|
|
228
|
+
|
|
239
229
|
private func handleFocusChange(_ focused: Bool) {
|
|
240
230
|
isFocused = focused
|
|
241
231
|
if focused {
|
|
@@ -244,19 +234,12 @@ public struct Input: View {
|
|
|
244
234
|
onBlur?()
|
|
245
235
|
}
|
|
246
236
|
}
|
|
247
|
-
|
|
237
|
+
|
|
248
238
|
private func togglePasswordVisibility() {
|
|
249
239
|
isPasswordHidden.toggle()
|
|
250
240
|
onRightIconPressed?()
|
|
251
241
|
}
|
|
252
242
|
|
|
253
|
-
private func limitText(_ value: String) -> String {
|
|
254
|
-
guard let maxLength = maxLength else {
|
|
255
|
-
return value
|
|
256
|
-
}
|
|
257
|
-
return String(value.prefix(maxLength))
|
|
258
|
-
}
|
|
259
|
-
|
|
260
243
|
private func borderColor() -> Color {
|
|
261
244
|
if disabled {
|
|
262
245
|
return Colors.black04 // border.disable
|
|
@@ -269,19 +252,19 @@ public struct Input: View {
|
|
|
269
252
|
}
|
|
270
253
|
return Colors.black04 // border.default
|
|
271
254
|
}
|
|
272
|
-
|
|
255
|
+
|
|
273
256
|
private func getTextColor() -> Color {
|
|
274
257
|
return disabled ? Colors.black09 : Colors.black17
|
|
275
258
|
}
|
|
276
|
-
|
|
259
|
+
|
|
277
260
|
private func getPlaceholderColor() -> Color {
|
|
278
261
|
return disabled ? Colors.black09 : Colors.black12
|
|
279
262
|
}
|
|
280
|
-
|
|
263
|
+
|
|
281
264
|
private func getFloatingColor() -> Color {
|
|
282
265
|
return disabled ? Colors.black09 : Colors.black12
|
|
283
266
|
}
|
|
284
|
-
|
|
267
|
+
|
|
285
268
|
private func getFloatingIconColor() -> Color {
|
|
286
269
|
return disabled ? Colors.black09 : floatingIconColor
|
|
287
270
|
}
|
|
@@ -296,7 +279,6 @@ private struct SecureInputField: UIViewRepresentable {
|
|
|
296
279
|
var fontWeight: UIFont.Weight
|
|
297
280
|
var textColor: UIColor
|
|
298
281
|
var isDisabled: Bool
|
|
299
|
-
var maxLength: Int?
|
|
300
282
|
var onFocusChange: (Bool) -> Void
|
|
301
283
|
var onChangeText: ((String) -> Void)?
|
|
302
284
|
|
|
@@ -325,7 +307,6 @@ private struct SecureInputField: UIViewRepresentable {
|
|
|
325
307
|
}
|
|
326
308
|
|
|
327
309
|
func updateUIView(_ textField: UITextField, context: Context) {
|
|
328
|
-
context.coordinator.parent = self
|
|
329
310
|
if textField.text != text {
|
|
330
311
|
textField.text = text
|
|
331
312
|
}
|
|
@@ -361,7 +342,7 @@ private struct SecureInputField: UIViewRepresentable {
|
|
|
361
342
|
}
|
|
362
343
|
|
|
363
344
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
|
364
|
-
parent.text =
|
|
345
|
+
parent.text = textField.text ?? ""
|
|
365
346
|
parent.onFocusChange(false)
|
|
366
347
|
}
|
|
367
348
|
|
|
@@ -376,10 +357,7 @@ private struct SecureInputField: UIViewRepresentable {
|
|
|
376
357
|
|
|
377
358
|
@objc func textFieldDidChange(_ textField: UITextField) {
|
|
378
359
|
if isResettingText { return }
|
|
379
|
-
let newText =
|
|
380
|
-
if textField.text != newText {
|
|
381
|
-
textField.text = newText
|
|
382
|
-
}
|
|
360
|
+
let newText = textField.text ?? ""
|
|
383
361
|
parent.text = newText
|
|
384
362
|
parent.onChangeText?(newText)
|
|
385
363
|
}
|
|
@@ -388,13 +366,6 @@ private struct SecureInputField: UIViewRepresentable {
|
|
|
388
366
|
textField.resignFirstResponder()
|
|
389
367
|
return true
|
|
390
368
|
}
|
|
391
|
-
|
|
392
|
-
private func limitText(_ value: String) -> String {
|
|
393
|
-
guard let maxLength = parent.maxLength else {
|
|
394
|
-
return value
|
|
395
|
-
}
|
|
396
|
-
return String(value.prefix(maxLength))
|
|
397
|
-
}
|
|
398
369
|
}
|
|
399
370
|
}
|
|
400
371
|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import SwiftUI
|
|
9
9
|
public struct InputPhoneNumber: View {
|
|
10
10
|
@Binding public var text: String
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
public var placeholder: String
|
|
13
13
|
public var size: InputSize
|
|
14
14
|
public var hintText: String
|
|
@@ -22,9 +22,9 @@ public struct InputPhoneNumber: View {
|
|
|
22
22
|
public var onBlur: (() -> Void)?
|
|
23
23
|
public var onRightIconPressed: (() -> Void)?
|
|
24
24
|
public var accessibilityLabel: String?
|
|
25
|
-
|
|
25
|
+
|
|
26
26
|
@State private var isFocused: Bool = false
|
|
27
|
-
|
|
27
|
+
|
|
28
28
|
public init(
|
|
29
29
|
text: Binding<String>,
|
|
30
30
|
placeholder: String = "0123456789",
|
|
@@ -57,7 +57,7 @@ public struct InputPhoneNumber: View {
|
|
|
57
57
|
self.onRightIconPressed = onRightIconPressed
|
|
58
58
|
self.accessibilityLabel = accessibilityLabel
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
// MARK: - Body
|
|
62
62
|
public var body: some View {
|
|
63
63
|
let textBinding = Binding<String>(
|
|
@@ -67,28 +67,28 @@ public struct InputPhoneNumber: View {
|
|
|
67
67
|
self.onChangeText?(newValue)
|
|
68
68
|
}
|
|
69
69
|
)
|
|
70
|
-
|
|
70
|
+
|
|
71
71
|
VStack(alignment: .leading, spacing: 4) {
|
|
72
72
|
HStack(spacing: 0) {
|
|
73
73
|
// 🇻🇳 Flag
|
|
74
74
|
ImageView("https://static.momocdn.net/app/img/icon/ic-qrcode-package/ic_vn_flag.png")
|
|
75
75
|
.frame(width: 24, height: 24)
|
|
76
76
|
.padding(.trailing, Spacing.XS)
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
MomoText("+84", typography: size == .small ? .headerSSemibold : .headerMBold)
|
|
79
79
|
.foregroundColor(Colors.black17)
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
Rectangle()
|
|
82
82
|
.fill(Colors.black04)
|
|
83
83
|
.frame(width: 1, height: size == .small ? 24 : 32)
|
|
84
84
|
.padding(.horizontal, Spacing.M)
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
// Text input
|
|
87
87
|
ZStack(alignment: .leading) {
|
|
88
88
|
if text.isEmpty {
|
|
89
89
|
MomoText(placeholder, typography: size == .small ? .headerSSemibold : .headerMBold, color: Colors.black12)
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
|
|
92
92
|
TextField("", text: textBinding, onEditingChanged: { focused in
|
|
93
93
|
handleFocusChange(focused)
|
|
94
94
|
})
|
|
@@ -100,7 +100,7 @@ public struct InputPhoneNumber: View {
|
|
|
100
100
|
.accessibility(identifier: accessibilityLabel ?? "")
|
|
101
101
|
.accessibilityValue(textBinding.wrappedValue.isEmpty ? placeholder : textBinding.wrappedValue)
|
|
102
102
|
}
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
// Clear button
|
|
105
105
|
if isFocused && !text.isEmpty {
|
|
106
106
|
SwiftUI.Button(action: {
|
|
@@ -111,13 +111,13 @@ public struct InputPhoneNumber: View {
|
|
|
111
111
|
.padding(.leading, Spacing.S).accessibility(identifier: "ic_clear")
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
|
|
114
|
+
|
|
115
115
|
// Loading indicator
|
|
116
116
|
if loading {
|
|
117
117
|
ActivityIndicator(isAnimating: .constant(true), style: .medium)
|
|
118
118
|
.frame(width: 16, height: 16)
|
|
119
119
|
}
|
|
120
|
-
|
|
120
|
+
|
|
121
121
|
// ✅ Right icon
|
|
122
122
|
if !rightIcon.isEmpty {
|
|
123
123
|
SwiftUI.Button(action: { onRightIconPressed?() }) {
|
|
@@ -127,7 +127,7 @@ public struct InputPhoneNumber: View {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
.padding(.horizontal, Spacing.M)
|
|
130
|
-
.frame(height: scaleSize(size == .small ? 48 : 56
|
|
130
|
+
.frame(height: scaleSize(size == .small ? 48 : 56))
|
|
131
131
|
.background(
|
|
132
132
|
RoundedRectangle(cornerRadius: Radius.S)
|
|
133
133
|
.fill(Colors.black01)
|
|
@@ -136,7 +136,7 @@ public struct InputPhoneNumber: View {
|
|
|
136
136
|
RoundedRectangle(cornerRadius: Radius.S)
|
|
137
137
|
.stroke(borderColor(), lineWidth: isFocused ? 1.5 : 1)
|
|
138
138
|
)
|
|
139
|
-
|
|
139
|
+
|
|
140
140
|
// Error or hint
|
|
141
141
|
ErrorView(
|
|
142
142
|
errorMessage: error,
|
|
@@ -145,9 +145,9 @@ public struct InputPhoneNumber: View {
|
|
|
145
145
|
)
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
|
|
148
|
+
|
|
149
149
|
// MARK: - Helpers
|
|
150
|
-
|
|
150
|
+
|
|
151
151
|
private func handleFocusChange(_ focused: Bool) {
|
|
152
152
|
isFocused = focused
|
|
153
153
|
if focused {
|
|
@@ -156,7 +156,7 @@ public struct InputPhoneNumber: View {
|
|
|
156
156
|
onBlur?()
|
|
157
157
|
}
|
|
158
158
|
}
|
|
159
|
-
|
|
159
|
+
|
|
160
160
|
private func borderColor() -> Color {
|
|
161
161
|
if !error.isEmpty { return Colors.red03 }
|
|
162
162
|
if isFocused { return Colors.primary }
|
|
@@ -1,30 +1,25 @@
|
|
|
1
1
|
import SwiftUI
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
let maxFontScale: CGFloat = scaleRate ?? 1.5
|
|
6
|
-
let maxDeviceScale: CGFloat = 5
|
|
3
|
+
private let DEFAULT_SCREEN_SIZE: CGFloat = 375
|
|
4
|
+
private let MAX_FONT_SCALE: CGFloat = 1.2
|
|
7
5
|
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
public func scaleSize(_ size: CGFloat) -> CGFloat {
|
|
7
|
+
if UseFontScaleSystem {
|
|
8
|
+
let deviceWidth = UIScreen.main.bounds.width
|
|
9
|
+
let deviceScale = deviceWidth / DEFAULT_SCREEN_SIZE
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
let defaultFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
|
|
12
|
+
let scaledFont = UIFontMetrics.default.scaledFont(for: defaultFont)
|
|
13
|
+
let fontScale = scaledFont.pointSize / defaultFont.pointSize
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
let maxSize = size * MAX_FONT_SCALE
|
|
16
|
+
let fontSizeScaleDevice = deviceScale > 1 ? deviceScale * size : size
|
|
17
|
+
let fontSizeScaleOS = fontScale > 1 ? fontScale * size : size
|
|
17
18
|
|
|
18
|
-
|
|
19
|
-
if deviceScale > 1 {
|
|
20
|
-
fontSizeDeviceScale = min(fontSizeDeviceScale * deviceScale, fontSizeDeviceScale + maxDeviceScale)
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if fontScale > 1 {
|
|
24
|
-
fontSizeOSScale = min(fontSizeOSScale * fontScale, fontSizeOSScale * maxFontScale)
|
|
19
|
+
return min(max(fontSizeScaleDevice, fontSizeScaleOS), maxSize)
|
|
25
20
|
}
|
|
26
21
|
|
|
27
|
-
return
|
|
22
|
+
return size
|
|
28
23
|
}
|
|
29
24
|
|
|
30
25
|
public enum TypographyStyle {
|
|
@@ -2,28 +2,7 @@ import SwiftUI
|
|
|
2
2
|
|
|
3
3
|
public extension Font {
|
|
4
4
|
static func appFont(size: CGFloat) -> Font {
|
|
5
|
-
|
|
6
|
-
let maxFontScale: CGFloat = 1.5
|
|
7
|
-
let maxDeviceScale: CGFloat = 5
|
|
8
|
-
|
|
9
|
-
let deviceWidth = UIScreen.main.bounds.width
|
|
10
|
-
let deviceScale = deviceWidth / defaultScreenSize
|
|
11
|
-
|
|
12
|
-
let defaultFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
|
|
13
|
-
let scaledFont = UIFontMetrics.default.scaledFont(for: defaultFont)
|
|
14
|
-
let fontScale = scaledFont.pointSize / defaultFont.pointSize
|
|
15
|
-
|
|
16
|
-
var fontSize = size
|
|
17
|
-
|
|
18
|
-
if deviceScale > 1 {
|
|
19
|
-
fontSize = min(fontSize * deviceScale, fontSize + maxDeviceScale)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if fontScale > 1 {
|
|
23
|
-
fontSize = min(fontSize * fontScale, fontSize * maxFontScale)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return Font.system(size: fontSize)
|
|
5
|
+
return Font.system(size: scaleSize(size))
|
|
27
6
|
}
|
|
28
7
|
|
|
29
8
|
// New supported typography styles
|