@momo-kits/native-kits 0.162.1-beta.1 → 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.
- package/CLAUDE.md +78 -0
- package/build.gradle.kts +11 -0
- package/compose/build.gradle.kts +190 -0
- package/compose/build.gradle.kts.backup +190 -0
- package/compose/compose.podspec +47 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
- package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +123 -0
- package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
- package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
- package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +108 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +183 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +207 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +39 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +294 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +826 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +107 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +378 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +82 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +338 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +175 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +354 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +113 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +89 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +128 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +209 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +543 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +23 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +76 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +140 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +231 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +112 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +477 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +114 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +214 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +240 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +216 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +259 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +182 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +343 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +84 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +328 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +97 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +310 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +59 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +90 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +323 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +217 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +473 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +122 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +199 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +91 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +470 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +88 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +134 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +203 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +498 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +175 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +182 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +193 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +234 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +306 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +188 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +269 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +35 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +2 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +52 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +66 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +104 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +48 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +253 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +129 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +94 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +186 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +360 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +557 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +164 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +225 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +169 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +320 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +81 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +309 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +34 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +360 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +128 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +70 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +58 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +55 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
- package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +105 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +32 -0
- package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +184 -0
- 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/gradle/libs.versions.toml +69 -0
- package/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/gradle/wrapper/gradle-wrapper.properties +8 -0
- package/gradle.properties +26 -0
- package/gradlew +252 -0
- package/gradlew.bat +94 -0
- package/ios/Application/ApplicationEnvironment.swift +1 -0
- package/ios/Application/Components.swift +1 -0
- package/ios/Application/FloatingButton.swift +1 -0
- package/ios/Application/FontScaleStore.swift +59 -0
- package/ios/Badge/Badge.swift +1 -0
- package/ios/Badge/BadgeRibbon.swift +2 -0
- package/ios/Button/Button.swift +1 -1
- package/ios/Checkbox/Checkbox.swift +1 -0
- package/ios/Information/Information.swift +151 -0
- package/ios/Input/Input.swift +1 -0
- package/ios/Input/InputPhoneNumber.swift +1 -0
- package/ios/Input/InputSearch.swift +3 -0
- package/ios/Input/InputTextArea.swift +1 -0
- package/ios/OTPKeyboard/KeyboardButton.swift +1 -1
- package/ios/Popup/PopupDisplay.swift +6 -0
- package/ios/Popup/PopupInput.swift +2 -0
- package/ios/Template/TrustBanner/TrustBanner.swift +2 -0
- package/ios/Typography/Text.swift +13 -7
- package/ios/Typography/Typography.swift +22 -8
- package/local.properties +8 -0
- package/package.json +1 -1
- package/settings.gradle.kts +64 -0
- package/.claude/settings.local.json +0 -32
package/ios/Button/Button.swift
CHANGED
|
@@ -200,7 +200,7 @@ public struct Button: View {
|
|
|
200
200
|
.background(bg)
|
|
201
201
|
.overlay(
|
|
202
202
|
RoundedRectangle(cornerRadius: size.radius)
|
|
203
|
-
.
|
|
203
|
+
.strokeBorder(border ?? .clear, lineWidth: border != nil ? borderWidth : 0)
|
|
204
204
|
)
|
|
205
205
|
.clipShape(RoundedRectangle(cornerRadius: size.radius))
|
|
206
206
|
.opacity(loading ? 0.75 : 1)
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import SwiftUI
|
|
2
|
+
|
|
3
|
+
public enum InformationState {
|
|
4
|
+
case `default`
|
|
5
|
+
case warning
|
|
6
|
+
case error
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
public struct Information: View {
|
|
10
|
+
private let title: String?
|
|
11
|
+
private let description: String
|
|
12
|
+
private let state: InformationState
|
|
13
|
+
private let image: String?
|
|
14
|
+
private let onPressAction: (() -> Void)?
|
|
15
|
+
private let showIcon: Bool
|
|
16
|
+
private let action: String?
|
|
17
|
+
private let showIconClose: Bool
|
|
18
|
+
private let onPressClose: (() -> Void)?
|
|
19
|
+
|
|
20
|
+
public init(
|
|
21
|
+
title: String? = nil,
|
|
22
|
+
description: String = "Description",
|
|
23
|
+
state: InformationState = .default,
|
|
24
|
+
image: String? = nil,
|
|
25
|
+
onPressAction: (() -> Void)? = nil,
|
|
26
|
+
showIcon: Bool = true,
|
|
27
|
+
action: String? = nil,
|
|
28
|
+
showIconClose: Bool = true,
|
|
29
|
+
onPressClose: (() -> Void)? = nil
|
|
30
|
+
) {
|
|
31
|
+
self.title = title
|
|
32
|
+
self.description = description
|
|
33
|
+
self.state = state
|
|
34
|
+
self.image = image
|
|
35
|
+
self.onPressAction = onPressAction
|
|
36
|
+
self.showIcon = showIcon
|
|
37
|
+
self.action = action
|
|
38
|
+
self.showIconClose = showIconClose
|
|
39
|
+
self.onPressClose = onPressClose
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private var borderColor: Color {
|
|
43
|
+
switch state {
|
|
44
|
+
case .default: return Colors.blue07
|
|
45
|
+
case .warning: return Colors.yellow06
|
|
46
|
+
case .error: return Colors.red07
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private var backgroundColor: Color {
|
|
51
|
+
switch state {
|
|
52
|
+
case .default: return Colors.blue10
|
|
53
|
+
case .warning: return Colors.yellow09
|
|
54
|
+
case .error: return Colors.red10
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private var accentColor: Color {
|
|
59
|
+
switch state {
|
|
60
|
+
case .default: return Colors.blue03
|
|
61
|
+
case .warning: return Colors.orange03
|
|
62
|
+
case .error: return Colors.red03
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private var iconSource: String {
|
|
67
|
+
switch state {
|
|
68
|
+
case .default: return "notifications_info"
|
|
69
|
+
case .warning: return "24_notifications_alert_triangle"
|
|
70
|
+
case .error: return "24_notifications_alert_octagon"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public var body: some View {
|
|
75
|
+
VStack(alignment: .leading, spacing: 0) {
|
|
76
|
+
HStack(alignment: .top, spacing: 0) {
|
|
77
|
+
if let image {
|
|
78
|
+
ImageView(image)
|
|
79
|
+
.frame(width: 40, height: 40)
|
|
80
|
+
.clipShape(RoundedRectangle(cornerRadius: Radius.S))
|
|
81
|
+
.padding(.trailing, Spacing.S)
|
|
82
|
+
} else if showIcon {
|
|
83
|
+
Icon(source: iconSource, size: 16, color: accentColor)
|
|
84
|
+
.padding(.trailing, Spacing.S)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
VStack(alignment: .leading, spacing: 0) {
|
|
88
|
+
if let title {
|
|
89
|
+
MomoText(title, typography: .labelDefaultMedium)
|
|
90
|
+
}
|
|
91
|
+
MomoText(description, typography: .descriptionDefaultRegular)
|
|
92
|
+
}
|
|
93
|
+
.frame(maxWidth: .infinity, alignment: .leading)
|
|
94
|
+
|
|
95
|
+
if let onPressClose, showIconClose {
|
|
96
|
+
Icon(source: "navigation_close", size: 16, color: Colors.black17)
|
|
97
|
+
.contentShape(Rectangle())
|
|
98
|
+
.onTapGesture(perform: onPressClose)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if let action, let onPressAction {
|
|
103
|
+
MomoText(action, typography: .actionXsBold, color: accentColor)
|
|
104
|
+
.frame(maxWidth: .infinity, alignment: .trailing)
|
|
105
|
+
.contentShape(Rectangle())
|
|
106
|
+
.onTapGesture(perform: onPressAction)
|
|
107
|
+
.padding(.top, Spacing.S)
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
.padding(Spacing.M)
|
|
111
|
+
.background(
|
|
112
|
+
RoundedRectangle(cornerRadius: Radius.S)
|
|
113
|
+
.fill(backgroundColor)
|
|
114
|
+
)
|
|
115
|
+
.overlay(
|
|
116
|
+
RoundedRectangle(cornerRadius: Radius.S)
|
|
117
|
+
.stroke(borderColor, lineWidth: 0.5)
|
|
118
|
+
)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// MARK: - Preview
|
|
123
|
+
#if DEBUG
|
|
124
|
+
struct Information_Previews: PreviewProvider {
|
|
125
|
+
static var previews: some View {
|
|
126
|
+
VStack(spacing: 16) {
|
|
127
|
+
Information(
|
|
128
|
+
title: "Information",
|
|
129
|
+
description: "This is a default information message."
|
|
130
|
+
)
|
|
131
|
+
Information(
|
|
132
|
+
title: "Warning",
|
|
133
|
+
description: "This is a warning message.",
|
|
134
|
+
state: .warning
|
|
135
|
+
)
|
|
136
|
+
Information(
|
|
137
|
+
title: "Error",
|
|
138
|
+
description: "This is an error message.",
|
|
139
|
+
state: .error,
|
|
140
|
+
onPressAction: {}, action: "Retry"
|
|
141
|
+
)
|
|
142
|
+
Information(
|
|
143
|
+
description: "Dismissible information.",
|
|
144
|
+
onPressClose: {}
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
.padding()
|
|
148
|
+
.previewLayout(.sizeThatFits)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
#endif
|
package/ios/Input/Input.swift
CHANGED
|
@@ -157,6 +157,7 @@ public struct Input: View {
|
|
|
157
157
|
})
|
|
158
158
|
.keyboardType(keyboardType)
|
|
159
159
|
.font(fontWeight == .bold ? .action_s_bold : .body_default_regular)
|
|
160
|
+
.ignoreBoldTextSetting()
|
|
160
161
|
.foregroundColor(getTextColor())
|
|
161
162
|
.disabled(disabled || readOnly)
|
|
162
163
|
.applyPrimaryCursorColor()
|
|
@@ -168,6 +168,7 @@ public struct InputSearch: View {
|
|
|
168
168
|
Text(placeholder)
|
|
169
169
|
.foregroundColor(disabled ? Colors.black08 : Colors.black12)
|
|
170
170
|
.font(.system(size: 16, weight: fontWeight))
|
|
171
|
+
.ignoreBoldTextSetting()
|
|
171
172
|
}
|
|
172
173
|
TextField("", text: $text, onEditingChanged: { editing in
|
|
173
174
|
isFocused = editing
|
|
@@ -183,6 +184,7 @@ public struct InputSearch: View {
|
|
|
183
184
|
.disabled(disabled)
|
|
184
185
|
.foregroundColor(disabled ? Colors.black08 : Colors.black17)
|
|
185
186
|
.font(.system(size: 15, weight: fontWeight))
|
|
187
|
+
.ignoreBoldTextSetting()
|
|
186
188
|
.keyboardType(keyboardType)
|
|
187
189
|
}
|
|
188
190
|
|
|
@@ -212,6 +214,7 @@ public struct InputSearch: View {
|
|
|
212
214
|
Text(buttonText)
|
|
213
215
|
.foregroundColor(Colors.black17)
|
|
214
216
|
.font(.system(size: 14, weight: .medium))
|
|
217
|
+
.ignoreBoldTextSetting()
|
|
215
218
|
}
|
|
216
219
|
.padding(.leading, Spacing.L)
|
|
217
220
|
}
|
|
@@ -22,7 +22,7 @@ public struct KeyboardButton: View {
|
|
|
22
22
|
public var body: some View {
|
|
23
23
|
SwiftUI.Button(action: { self.action(key) }) {
|
|
24
24
|
HStack {
|
|
25
|
-
Text(key).font(.system(size: 24, weight: .bold))
|
|
25
|
+
Text(key).font(.system(size: 24, weight: .bold)).ignoreBoldTextSetting()
|
|
26
26
|
}.frame(maxWidth: CGFloat(width), minHeight: height)
|
|
27
27
|
.background(color)
|
|
28
28
|
.foregroundColor(textColor)
|
|
@@ -24,6 +24,7 @@ extension View {
|
|
|
24
24
|
VStack(spacing: 0) {
|
|
25
25
|
Text("A")
|
|
26
26
|
.font(font)
|
|
27
|
+
.ignoreBoldTextSetting()
|
|
27
28
|
.lineLimit(1)
|
|
28
29
|
.fixedSize()
|
|
29
30
|
.background(
|
|
@@ -35,6 +36,7 @@ extension View {
|
|
|
35
36
|
|
|
36
37
|
Text("A\nA")
|
|
37
38
|
.font(font)
|
|
39
|
+
.ignoreBoldTextSetting()
|
|
38
40
|
.lineLimit(2)
|
|
39
41
|
.fixedSize(horizontal: false, vertical: true)
|
|
40
42
|
.background(
|
|
@@ -221,12 +223,14 @@ public struct PopupDisplay: View {
|
|
|
221
223
|
SwiftUI.Button(action: onPressCloseButton) {
|
|
222
224
|
Text(closeButtonTitle)
|
|
223
225
|
.font(.action2)
|
|
226
|
+
.ignoreBoldTextSetting()
|
|
224
227
|
}.foregroundColor(Colors.black09)
|
|
225
228
|
.padding(.trailing, 12)
|
|
226
229
|
|
|
227
230
|
SwiftUI.Button(action: onPressAction) {
|
|
228
231
|
Text(actionButtonTitle)
|
|
229
232
|
.font(.action2)
|
|
233
|
+
.ignoreBoldTextSetting()
|
|
230
234
|
}.foregroundColor(Colors.primary)
|
|
231
235
|
}
|
|
232
236
|
.frame(maxWidth: .infinity, alignment: .trailing)
|
|
@@ -238,12 +242,14 @@ public struct PopupDisplay: View {
|
|
|
238
242
|
SwiftUI.Button(action: onPressAction) {
|
|
239
243
|
Text(actionButtonTitle)
|
|
240
244
|
.font(.action2)
|
|
245
|
+
.ignoreBoldTextSetting()
|
|
241
246
|
}.foregroundColor(Colors.primary)
|
|
242
247
|
.padding(.bottom, 6)
|
|
243
248
|
|
|
244
249
|
SwiftUI.Button(action: onPressCloseButton) {
|
|
245
250
|
Text(closeButtonTitle)
|
|
246
251
|
.font(.action2)
|
|
252
|
+
.ignoreBoldTextSetting()
|
|
247
253
|
}.foregroundColor(Colors.black09)
|
|
248
254
|
}
|
|
249
255
|
.frame(maxWidth: .infinity, alignment: .trailing)
|
|
@@ -38,12 +38,14 @@ public struct PopupInput: View {
|
|
|
38
38
|
Text(title)
|
|
39
39
|
.foregroundColor(.black)
|
|
40
40
|
.font(.headerText1)
|
|
41
|
+
.ignoreBoldTextSetting()
|
|
41
42
|
.padding(.top, 12)
|
|
42
43
|
.padding(.bottom, 24)
|
|
43
44
|
|
|
44
45
|
Text(description)
|
|
45
46
|
.foregroundColor(.black)
|
|
46
47
|
.font(.paragraph)
|
|
48
|
+
.ignoreBoldTextSetting()
|
|
47
49
|
.opacity(0.6)
|
|
48
50
|
.multilineTextAlignment(.leading)
|
|
49
51
|
.padding(.bottom, 20)
|
|
@@ -79,6 +79,7 @@ public struct TrustBanner: View {
|
|
|
79
79
|
.foregroundColor(Color(hex: "484848"))
|
|
80
80
|
.lineLimit(2)
|
|
81
81
|
.font(.system(size: 13, weight: Font.Weight.regular))
|
|
82
|
+
.ignoreBoldTextSetting()
|
|
82
83
|
.lineSpacing(3)
|
|
83
84
|
.padding(.bottom, 8)
|
|
84
85
|
HStack {
|
|
@@ -86,6 +87,7 @@ public struct TrustBanner: View {
|
|
|
86
87
|
Text(applicationEnvironment.config?.trustBanner?.subContent[language ?? "vi"] as? String ?? defaultBanner.subContent[language ?? "vi"])
|
|
87
88
|
.foregroundColor(Colors.pink03)
|
|
88
89
|
.font(.system(size: 13, weight: .bold))
|
|
90
|
+
.ignoreBoldTextSetting()
|
|
89
91
|
.padding(.trailing, 4)
|
|
90
92
|
|
|
91
93
|
Icon(source: "arrow_chevron_right_small", color: Colors.pink03)
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import SwiftUI
|
|
2
2
|
|
|
3
3
|
public func scaleSize(_ size: CGFloat, _ scaleRate: CGFloat? = nil) -> CGFloat {
|
|
4
|
+
let config = FontScaleStore.shared.config
|
|
4
5
|
let defaultScreenSize: CGFloat = 375
|
|
5
6
|
let maxFontScale: CGFloat = scaleRate ?? 1.5
|
|
6
7
|
let maxDeviceScale: CGFloat = 5
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
if !config.useOSFontScale {
|
|
10
|
+
let customRate = config.userScaleRate ?? 1
|
|
11
|
+
return customRate > 1 ? size * customRate : size
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
let deviceScale = UIScreen.main.bounds.width / defaultScreenSize
|
|
10
15
|
|
|
11
16
|
let defaultFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
|
|
12
17
|
let scaledFont = UIFontMetrics.default.scaledFont(for: defaultFont)
|
|
13
|
-
let
|
|
18
|
+
let osFontScale = scaledFont.pointSize / defaultFont.pointSize
|
|
14
19
|
|
|
15
20
|
var fontSizeDeviceScale = size
|
|
16
21
|
var fontSizeOSScale = size
|
|
17
22
|
|
|
18
|
-
|
|
19
23
|
if deviceScale > 1 {
|
|
20
24
|
fontSizeDeviceScale = min(fontSizeDeviceScale * deviceScale, fontSizeDeviceScale + maxDeviceScale)
|
|
21
25
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
fontSizeOSScale = min(fontSizeOSScale * fontScale, fontSizeOSScale * maxFontScale)
|
|
26
|
+
if osFontScale > 1 {
|
|
27
|
+
fontSizeOSScale = min(fontSizeOSScale * osFontScale, fontSizeOSScale * maxFontScale)
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
return max(fontSizeDeviceScale, fontSizeOSScale)
|
|
@@ -118,6 +121,7 @@ public struct MomoText: View {
|
|
|
118
121
|
private let content: String
|
|
119
122
|
private let typography: TypographyStyle
|
|
120
123
|
private let color: Color
|
|
124
|
+
@ObservedObject private var fontScale = FontScaleStore.shared
|
|
121
125
|
|
|
122
126
|
public init(
|
|
123
127
|
_ content: String,
|
|
@@ -130,11 +134,13 @@ public struct MomoText: View {
|
|
|
130
134
|
}
|
|
131
135
|
|
|
132
136
|
public var body: some View {
|
|
137
|
+
_ = fontScale.config
|
|
133
138
|
let text = SwiftUI.Text(content)
|
|
134
139
|
.font(.system(size: scaleSize(typography.fontSize), weight: typography.fontWeight))
|
|
135
140
|
.foregroundColor(color)
|
|
136
141
|
.lineSpacing(scaleSize(typography.lineHeight) - scaleSize(typography.fontSize))
|
|
137
142
|
|
|
138
143
|
return text
|
|
144
|
+
.ignoreBoldTextSetting()
|
|
139
145
|
}
|
|
140
146
|
}
|
|
@@ -1,26 +1,40 @@
|
|
|
1
1
|
import SwiftUI
|
|
2
2
|
|
|
3
|
+
public extension View {
|
|
4
|
+
/// Forces SwiftUI to ignore the OS "Bold Text" accessibility setting so the
|
|
5
|
+
/// kit's typography weight stays fixed and matches the Compose implementation
|
|
6
|
+
/// (which does not honor that OS setting). Apply it wherever a `.font(...)` is set.
|
|
7
|
+
func ignoreBoldTextSetting() -> some View {
|
|
8
|
+
environment(\.legibilityWeight, .regular)
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
3
12
|
public extension Font {
|
|
4
13
|
static func appFont(size: CGFloat) -> Font {
|
|
14
|
+
let config = FontScaleStore.shared.config
|
|
5
15
|
let defaultScreenSize: CGFloat = 375
|
|
6
16
|
let maxFontScale: CGFloat = 1.5
|
|
7
17
|
let maxDeviceScale: CGFloat = 5
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
18
|
+
|
|
19
|
+
if !config.useOSFontScale {
|
|
20
|
+
let customRate = config.userScaleRate ?? 1
|
|
21
|
+
let scaled = customRate > 1 ? size * customRate : size
|
|
22
|
+
return Font.system(size: scaled)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
let deviceScale = UIScreen.main.bounds.width / defaultScreenSize
|
|
26
|
+
|
|
12
27
|
let defaultFont = UIFont.systemFont(ofSize: UIFont.labelFontSize)
|
|
13
28
|
let scaledFont = UIFontMetrics.default.scaledFont(for: defaultFont)
|
|
14
|
-
let
|
|
29
|
+
let osFontScale = scaledFont.pointSize / defaultFont.pointSize
|
|
15
30
|
|
|
16
31
|
var fontSize = size
|
|
17
32
|
|
|
18
33
|
if deviceScale > 1 {
|
|
19
34
|
fontSize = min(fontSize * deviceScale, fontSize + maxDeviceScale)
|
|
20
35
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
fontSize = min(fontSize * fontScale, fontSize * maxFontScale)
|
|
36
|
+
if osFontScale > 1 {
|
|
37
|
+
fontSize = min(fontSize * osFontScale, fontSize * maxFontScale)
|
|
24
38
|
}
|
|
25
39
|
|
|
26
40
|
return Font.system(size: fontSize)
|
package/local.properties
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
## This file must *NOT* be checked into Version Control Systems,
|
|
2
|
+
# as it contains information specific to your local configuration.
|
|
3
|
+
#
|
|
4
|
+
# Location of the SDK. This is only used by Gradle.
|
|
5
|
+
# For customization when using a Version Control System, please read the
|
|
6
|
+
# header note.
|
|
7
|
+
#Wed Aug 21 14:20:12 ICT 2024
|
|
8
|
+
sdk.dir=/Users/huynhdung/Library/Android/sdk
|
package/package.json
CHANGED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import org.gradle.kotlin.dsl.maven
|
|
2
|
+
|
|
3
|
+
rootProject.name = "momo-native-kits"
|
|
4
|
+
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
|
5
|
+
|
|
6
|
+
pluginManagement {
|
|
7
|
+
repositories {
|
|
8
|
+
google {
|
|
9
|
+
mavenContent {
|
|
10
|
+
includeGroupAndSubgroups("androidx")
|
|
11
|
+
includeGroupAndSubgroups("com.android")
|
|
12
|
+
includeGroupAndSubgroups("com.google")
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
mavenCentral()
|
|
16
|
+
gradlePluginPortal()
|
|
17
|
+
maven {
|
|
18
|
+
url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven")
|
|
19
|
+
credentials {username = "download_packages"; password = "gldt-bjDqLpU_sPcHDuXau2ws" }
|
|
20
|
+
}
|
|
21
|
+
maven {
|
|
22
|
+
url = uri("https://artifacts.mservice.com.vn/repository/maven-momo-app/")
|
|
23
|
+
credentials {
|
|
24
|
+
username = "viewer"
|
|
25
|
+
password = "viewer"
|
|
26
|
+
}
|
|
27
|
+
isAllowInsecureProtocol = true
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
dependencyResolutionManagement {
|
|
33
|
+
repositories {
|
|
34
|
+
google {
|
|
35
|
+
mavenContent {
|
|
36
|
+
includeGroupAndSubgroups("androidx")
|
|
37
|
+
includeGroupAndSubgroups("com.android")
|
|
38
|
+
includeGroupAndSubgroups("com.google")
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
mavenCentral()
|
|
42
|
+
maven { url = uri("https://maven.pkg.jetbrains.space/public/p/compose/dev") }
|
|
43
|
+
maven {
|
|
44
|
+
url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven")
|
|
45
|
+
credentials {
|
|
46
|
+
username = "download_packages";
|
|
47
|
+
password = "gldt-bjDqLpU_sPcHDuXau2ws"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
maven {
|
|
51
|
+
url = uri("https://artifacts.mservice.com.vn/repository/maven-momo-app/")
|
|
52
|
+
credentials {
|
|
53
|
+
username = "viewer"
|
|
54
|
+
password = "viewer"
|
|
55
|
+
}
|
|
56
|
+
isAllowInsecureProtocol = true
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
include(":compose")
|
|
62
|
+
|
|
63
|
+
include(":sample:androidApp")
|
|
64
|
+
include(":sample:shared")
|
|
@@ -1,32 +0,0 @@
|
|
|
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
|
-
}
|