@momo-kits/native-kits 0.161.2-search-header.1 → 0.161.3-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.
Files changed (16) hide show
  1. package/example/ios/Example.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/xcschememanagement.plist +1 -1
  2. package/example/ios/Example.xcworkspace/xcuserdata/huynhdung.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  3. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/xcschememanagement.plist +5 -5
  4. package/ios/Application/ApplicationEnvironment.swift +6 -2
  5. package/ios/Input/Input.swift +19 -19
  6. package/ios/Input/InputPhoneNumber.swift +17 -17
  7. package/ios/Typography/Text.swift +14 -19
  8. package/ios/Typography/Typography.swift +1 -22
  9. package/package.json +1 -1
  10. package/example/ios/Example.xcodeproj/xcuserdata/vunh.xcuserdatad/xcschemes/ios.xcscheme +0 -36
  11. /package/example/ios/Example.xcworkspace/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/xcschememanagement.plist +0 -0
  12. /package/example/ios/Pods/Pods.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/MoMoUIKits.xcscheme +0 -0
  13. /package/example/ios/Pods/Pods.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/Pods-Example.xcscheme +0 -0
  14. /package/example/ios/Pods/Pods.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/SDWebImage.xcscheme +0 -0
  15. /package/example/ios/Pods/Pods.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/SDWebImageSwiftUI.xcscheme +0 -0
  16. /package/example/ios/Pods/Pods.xcodeproj/xcuserdata/{vunh.xcuserdatad → huynhdung.xcuserdatad}/xcschemes/SkeletonUI.xcscheme +0 -0
@@ -4,7 +4,7 @@
4
4
  <dict>
5
5
  <key>SchemeUserState</key>
6
6
  <dict>
7
- <key>ios.xcscheme</key>
7
+ <key>Example.xcscheme_^#shared#^_</key>
8
8
  <dict>
9
9
  <key>orderHint</key>
10
10
  <integer>0</integer>
@@ -9,35 +9,35 @@
9
9
  <key>isShown</key>
10
10
  <false />
11
11
  <key>orderHint</key>
12
- <integer>1</integer>
12
+ <integer>0</integer>
13
13
  </dict>
14
14
  <key>Pods-Example.xcscheme</key>
15
15
  <dict>
16
16
  <key>isShown</key>
17
17
  <false />
18
18
  <key>orderHint</key>
19
- <integer>2</integer>
19
+ <integer>1</integer>
20
20
  </dict>
21
21
  <key>SDWebImage.xcscheme</key>
22
22
  <dict>
23
23
  <key>isShown</key>
24
24
  <false />
25
25
  <key>orderHint</key>
26
- <integer>3</integer>
26
+ <integer>2</integer>
27
27
  </dict>
28
28
  <key>SDWebImageSwiftUI.xcscheme</key>
29
29
  <dict>
30
30
  <key>isShown</key>
31
31
  <false />
32
32
  <key>orderHint</key>
33
- <integer>4</integer>
33
+ <integer>3</integer>
34
34
  </dict>
35
35
  <key>SkeletonUI.xcscheme</key>
36
36
  <dict>
37
37
  <key>isShown</key>
38
38
  <false />
39
39
  <key>orderHint</key>
40
- <integer>5</integer>
40
+ <integer>4</integer>
41
41
  </dict>
42
42
  </dict>
43
43
  <key>SuppressBuildableAutocreation</key>
@@ -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
@@ -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
@@ -30,10 +30,10 @@ public struct Input: View {
30
30
  public var onFocus: (() -> Void)?
31
31
  public var onBlur: (() -> Void)?
32
32
  public var onRightIconPressed: (() -> Void)?
33
-
33
+
34
34
  @State private var isFocused: Bool = false
35
35
  @State private var isPasswordHidden: Bool = true
36
-
36
+
37
37
  public init(
38
38
  text: Binding<String>,
39
39
  placeholder: String = "",
@@ -118,7 +118,7 @@ public struct Input: View {
118
118
  .offset(x: Spacing.S, y: -8)
119
119
  .zIndex(10)
120
120
  }
121
-
121
+
122
122
  // Input container
123
123
  HStack(alignment: .center, spacing: 0) {
124
124
  // Leading icon
@@ -126,7 +126,7 @@ public struct Input: View {
126
126
  Icon(source: leadingIcon, size: size == .small ? 24 : 32, color: leadingIconColor)
127
127
  .padding(.trailing, Spacing.M)
128
128
  }
129
-
129
+
130
130
  // Text input field
131
131
  ZStack(alignment: .leading) {
132
132
  if text.isEmpty {
@@ -136,7 +136,7 @@ public struct Input: View {
136
136
  color: getPlaceholderColor()
137
137
  )
138
138
  }
139
-
139
+
140
140
  if secureTextEntry && isPasswordHidden {
141
141
  SecureInputField(
142
142
  text: $text,
@@ -168,7 +168,7 @@ public struct Input: View {
168
168
  }
169
169
  }
170
170
  }
171
-
171
+
172
172
  // Clear button (only show when focused and has text)
173
173
  if isFocused && !text.isEmpty {
174
174
  SwiftUI.Button(action: {
@@ -179,14 +179,14 @@ public struct Input: View {
179
179
  .padding(.leading, Spacing.S).accessibility(identifier: "ic_clear")
180
180
  }
181
181
  }
182
-
182
+
183
183
  // Loading indicator
184
184
  if loading {
185
185
  ActivityIndicator(isAnimating: .constant(true), style: .medium)
186
186
  .frame(width: 16, height: 16)
187
187
  .padding(.leading, Spacing.S)
188
188
  }
189
-
189
+
190
190
  // Right icon (password toggle or custom icon)
191
191
  if secureTextEntry {
192
192
  if !text.isEmpty {
@@ -207,7 +207,7 @@ public struct Input: View {
207
207
  }
208
208
  }
209
209
  .padding(.horizontal, Spacing.M)
210
- .frame(height: scaleSize(size == .small ? 48 : 56, 1.1))
210
+ .frame(height: scaleSize(size == .small ? 48 : 56))
211
211
  .background(
212
212
  RoundedRectangle(cornerRadius: Radius.S)
213
213
  .fill(Colors.black01)
@@ -217,7 +217,7 @@ public struct Input: View {
217
217
  .stroke(borderColor(), lineWidth: 1)
218
218
  )
219
219
  }
220
-
220
+
221
221
  // Error or hint
222
222
  ErrorView(
223
223
  errorMessage: error,
@@ -233,9 +233,9 @@ public struct Input: View {
233
233
  }
234
234
  }
235
235
  }
236
-
236
+
237
237
  // MARK: - Helpers
238
-
238
+
239
239
  private func handleFocusChange(_ focused: Bool) {
240
240
  isFocused = focused
241
241
  if focused {
@@ -244,7 +244,7 @@ public struct Input: View {
244
244
  onBlur?()
245
245
  }
246
246
  }
247
-
247
+
248
248
  private func togglePasswordVisibility() {
249
249
  isPasswordHidden.toggle()
250
250
  onRightIconPressed?()
@@ -256,7 +256,7 @@ public struct Input: View {
256
256
  }
257
257
  return String(value.prefix(maxLength))
258
258
  }
259
-
259
+
260
260
  private func borderColor() -> Color {
261
261
  if disabled {
262
262
  return Colors.black04 // border.disable
@@ -269,19 +269,19 @@ public struct Input: View {
269
269
  }
270
270
  return Colors.black04 // border.default
271
271
  }
272
-
272
+
273
273
  private func getTextColor() -> Color {
274
274
  return disabled ? Colors.black09 : Colors.black17
275
275
  }
276
-
276
+
277
277
  private func getPlaceholderColor() -> Color {
278
278
  return disabled ? Colors.black09 : Colors.black12
279
279
  }
280
-
280
+
281
281
  private func getFloatingColor() -> Color {
282
282
  return disabled ? Colors.black09 : Colors.black12
283
283
  }
284
-
284
+
285
285
  private func getFloatingIconColor() -> Color {
286
286
  return disabled ? Colors.black09 : floatingIconColor
287
287
  }
@@ -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, 1.1))
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
- public func scaleSize(_ size: CGFloat, _ scaleRate: CGFloat? = nil) -> CGFloat {
4
- let defaultScreenSize: CGFloat = 375
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
- let deviceWidth = UIScreen.main.bounds.width
9
- let deviceScale = deviceWidth / defaultScreenSize
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
- let defaultFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
12
- let scaledFont = UIFontMetrics.default.scaledFont(for: defaultFont)
13
- let fontScale = scaledFont.pointSize / defaultFont.pointSize
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
- var fontSizeDeviceScale = size
16
- var fontSizeOSScale = size
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 max(fontSizeDeviceScale, fontSizeOSScale)
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
- let defaultScreenSize: CGFloat = 375
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@momo-kits/native-kits",
3
- "version": "0.161.2-search-header.1",
3
+ "version": "0.161.3-beta.1",
4
4
  "private": false,
5
5
  "dependencies": {},
6
6
  "devDependencies": {},
@@ -1,36 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <Scheme
3
- version = "1.3">
4
- <BuildAction>
5
- <BuildActionEntries>
6
- <BuildActionEntry
7
- buildForRunning = "YES">
8
- <BuildableReference
9
- BuildableIdentifier = "primary"
10
- BlueprintIdentifier = "A6A920D22B2ADD1E00C1A11F"
11
- BuildableName = "Example"
12
- BlueprintName = "Example"
13
- ReferencedContainer = "container:Example.xcodeproj">
14
- </BuildableReference>
15
- </BuildActionEntry>
16
- </BuildActionEntries>
17
- </BuildAction>
18
- <LaunchAction
19
- useCustomWorkingDirectory = "NO"
20
- buildConfiguration = "Debug"
21
- allowLocationSimulation = "YES">
22
- <BuildableProductRunnable>
23
- <BuildableReference
24
- BuildableIdentifier = "primary"
25
- BlueprintIdentifier = "A6A920D22B2ADD1E00C1A11F"
26
- BuildableName = "Example"
27
- BlueprintName = "Example"
28
- ReferencedContainer = "container:Example.xcodeproj">
29
- </BuildableReference>
30
- </BuildableProductRunnable>
31
- <LocationScenarioReference
32
- identifier = "com.apple.dt.IDEFoundation.CurrentLocationScenarioIdentifier"
33
- referenceType = "1">
34
- </LocationScenarioReference>
35
- </LaunchAction>
36
- </Scheme>