@momo-kits/native-kits 0.300.3 → 0.300.4

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 (134) hide show
  1. package/CLAUDE.md +51 -7
  2. package/README.md +2 -2
  3. package/ios/Application/ApplicationEnvironment.swift +24 -6
  4. package/ios/Application/DesignSystemKits.swift +100 -0
  5. package/ios/Application/DesignSystemKitsPayload.swift +68 -0
  6. package/ios/Application/MaxApi.swift +30 -3
  7. package/ios/Avatar/Avatar.swift +4 -3
  8. package/ios/Badge/Badge.swift +6 -4
  9. package/ios/Badge/BadgeDot.swift +1 -1
  10. package/ios/Badge/BadgeRibbon.swift +8 -2
  11. package/ios/Button/Button.swift +15 -12
  12. package/ios/CalculatorKeyboard/CalculatorKeyboard.swift +64 -18
  13. package/ios/Carousel/Carousel.swift +29 -12
  14. package/ios/Checkbox/Checkbox.swift +7 -3
  15. package/ios/Chip/Chip.swift +5 -4
  16. package/ios/Collapse/Collapse.swift +70 -19
  17. package/ios/Colors+Radius+Spacing/Colors.swift +10 -1
  18. package/ios/Colors+Radius+Spacing/Radius.swift +6 -0
  19. package/ios/DateTimePicker/DateTimePicker.swift +54 -20
  20. package/ios/DateTimePicker/WheelPicker.swift +103 -105
  21. package/ios/Divider/Divider.swift +37 -4
  22. package/ios/Extensions/Color++.swift +38 -9
  23. package/ios/Extensions/OptionalEnvironmentObject.swift +12 -0
  24. package/ios/Extensions/SkeletonUICompat.swift +11 -0
  25. package/ios/Icon/Icon.swift +21 -23
  26. package/ios/Icon/Icons.swift +1329 -0
  27. package/ios/IconButton/IconButton.swift +15 -7
  28. package/ios/Image/Image.swift +7 -23
  29. package/ios/Information/Information.swift +27 -9
  30. package/ios/Input/ErrorView.swift +2 -2
  31. package/ios/Input/Input.swift +171 -148
  32. package/ios/Input/InputPhoneNumber.swift +10 -9
  33. package/ios/Input/InputSearch.swift +107 -78
  34. package/ios/Input/InputTextArea.swift +133 -148
  35. package/ios/InputDropDown/InputDropDown.swift +10 -7
  36. package/ios/InputMoney/InputMoney.swift +32 -11
  37. package/ios/InputOTP/InputOTP.swift +22 -12
  38. package/ios/Layout/Card.swift +50 -0
  39. package/ios/Layout/GridContext.swift +187 -3
  40. package/ios/Layout/Item.swift +5 -4
  41. package/ios/Layout/ScreenLayout.swift +415 -0
  42. package/ios/Layout/Section.swift +4 -100
  43. package/ios/Loader/Loader.swift +5 -9
  44. package/ios/Lottie/LottieView.swift +14 -2
  45. package/ios/{Application/Navigation/Overplay → Navigation}/BottomSheet.swift +169 -29
  46. package/ios/Navigation/BottomTab/BottomTab.swift +332 -0
  47. package/ios/{Application/Navigation → Navigation}/BottomTab/BottomTabBar.swift +18 -7
  48. package/ios/Navigation/BottomTab/DuoBarCompression.swift +104 -0
  49. package/ios/Navigation/BottomTab/DuoTabBar.swift +329 -0
  50. package/ios/{Application → Navigation/Component}/FloatingButton.swift +43 -54
  51. package/ios/Navigation/Component/Header.swift +545 -0
  52. package/ios/Navigation/Component/HeaderBackground.swift +154 -0
  53. package/ios/Navigation/Component/HeaderJourney.swift +73 -0
  54. package/ios/Navigation/Component/HeaderLocation.swift +48 -0
  55. package/ios/Navigation/Component/HeaderRight.swift +425 -0
  56. package/ios/Navigation/Component/HeaderTitle.swift +36 -0
  57. package/ios/{Application/Navigation → Navigation/Component}/HeaderUser.swift +21 -24
  58. package/ios/Navigation/Component/SideBar.swift +183 -0
  59. package/ios/{Application/Navigation/Overplay → Navigation/Component}/SnackBar.swift +8 -8
  60. package/ios/Navigation/HostBackGestureBridge.swift +78 -0
  61. package/ios/{Application/Navigation/Overplay → Navigation}/ModalScreen.swift +9 -2
  62. package/ios/Navigation/Navigation.swift +204 -0
  63. package/ios/Navigation/NavigationContainer.swift +195 -0
  64. package/ios/{Application/Navigation → Navigation}/Navigator.swift +207 -107
  65. package/ios/Navigation/StackScreen.swift +930 -0
  66. package/ios/Navigation/StackTransition.swift +400 -0
  67. package/ios/Navigation/SwipeBackHaptic.swift +33 -0
  68. package/ios/{Application/Navigation → Navigation}/Tracking/ScreenTracker.swift +12 -5
  69. package/ios/OTPKeyboard/OTPKeyboard.swift +8 -11
  70. package/ios/Pagination/PaginationScroll.swift +2 -2
  71. package/ios/Popup/PopupDisplay.swift +72 -135
  72. package/ios/Popup/PopupInput.swift +10 -13
  73. package/ios/Popup/PopupLayout.swift +138 -0
  74. package/ios/Popup/PopupNotify.swift +59 -69
  75. package/ios/Popup/PopupPromotion.swift +31 -47
  76. package/ios/PopupView/FullscreenPopup.swift +13 -19
  77. package/ios/PopupView/PopupView.swift +1 -1
  78. package/ios/PopupView/Utils++.swift +0 -8
  79. package/ios/ProgressInfo/ProgressInfo.swift +4 -2
  80. package/ios/Radio/Radio.swift +2 -1
  81. package/ios/Rating/Rating.swift +9 -1
  82. package/ios/Resources/dot_loading.json +558 -0
  83. package/ios/Resources/lottie_circle_loader.json +1 -0
  84. package/ios/ScrollIndicator/ScrollIndicator.swift +11 -10
  85. package/ios/Skeleton/Skeleton.swift +22 -27
  86. package/ios/Slider/Slider.swift +16 -18
  87. package/ios/Stepper/Stepper.swift +7 -3
  88. package/ios/Steps/Steps.swift +8 -6
  89. package/ios/SuggestAction/SuggestAction.swift +5 -0
  90. package/ios/Swipeable/SwipeCell.swift +10 -6
  91. package/ios/Switch/Switch.swift +22 -20
  92. package/ios/TabView/TabView.swift +102 -21
  93. package/ios/Tag/Tag.swift +15 -4
  94. package/ios/Template/Logo/Logo.swift +2 -1
  95. package/ios/Template/TrustBanner/TrustBanner.swift +109 -55
  96. package/ios/Title/Title.swift +6 -17
  97. package/ios/Tooltip/Tooltip.swift +29 -14
  98. package/ios/Typography/FontScale.swift +17 -14
  99. package/ios/Typography/Text.swift +156 -20
  100. package/ios/Typography/Typography.swift +2 -2
  101. package/ios/Uploader/Uploader.swift +3 -1
  102. package/ios/native-kits.podspec +2 -3
  103. package/ios-demo/MoMoUIKitsDemo.podspec +1 -3
  104. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +1 -1
  105. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DuoTabDemo.swift +80 -0
  106. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +2 -0
  107. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IPhoneDuoDemo.swift +173 -0
  108. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +77 -1
  109. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +1 -0
  110. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +2 -2
  111. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +2 -0
  112. package/package.json +1 -1
  113. package/publish.sh +19 -2
  114. package/scripts/gen-ios-icons.mjs +36 -0
  115. package/ios/Application/Components.swift +0 -270
  116. package/ios/Application/ComposeApi.swift +0 -22
  117. package/ios/Application/HeaderRight.swift +0 -306
  118. package/ios/Application/Navigation/BottomTab/BottomTab.swift +0 -104
  119. package/ios/Application/Navigation/HeaderBackProps.swift +0 -66
  120. package/ios/Application/Navigation/HeaderTitle.swift +0 -57
  121. package/ios/Application/Navigation/NavigationContainer.swift +0 -213
  122. package/ios/Application/Navigation/NavigationOptions.swift +0 -109
  123. package/ios/Application/Navigation/NavigatorManager.swift +0 -22
  124. package/ios/Application/Navigation/component/Header.swift +0 -178
  125. package/ios/Application/Navigation/component/HeaderBackground.swift +0 -83
  126. package/ios/Application/Navigation/component/HeaderColor.swift +0 -65
  127. package/ios/Application/Navigation/component/HeaderRightWidthKey.swift +0 -11
  128. package/ios/Application/Navigation/component/NavigationFooter.swift +0 -90
  129. package/ios/Application/Navigation/component/NavigationHeaderRight.swift +0 -196
  130. package/ios/Application/Screen.swift +0 -250
  131. package/ios/Application/StackScreen.swift +0 -492
  132. package/ios/Typography/FontScaleStore.swift +0 -58
  133. package/ios/Typography/KitDesignSystem.swift +0 -17
  134. /package/ios/{Application/Navigation → Navigation}/BottomTab/CurvedContainer.swift +0 -0
@@ -1,250 +0,0 @@
1
- //
2
- // Screen.swift
3
- // Pods
4
- //
5
- // Created by sophia on 5/2/25.
6
- //
7
-
8
- import SwiftUI
9
-
10
- public struct Screen<Content: View>: View {
11
- // MARK: - Properties
12
-
13
- var backgroundColor: Color?
14
- var headerTransparent: Bool = false
15
- var fullScreenContent: Bool = false
16
- var tintColor: Color? = Colors.black17
17
- var isBack: Bool
18
- var headerType: HeaderType
19
- var verticalAlignment: VerticalAlignment
20
- var horizontalAlignment: HorizontalAlignment
21
- var title: String
22
- var titlePosition: TitlePosition
23
- var goBack: (() -> Void)?
24
- var scrollable: Bool
25
- var onContentLayout: ((CGRect) -> Void)?
26
- var useAvoidKeyboard: Bool
27
- var footer: (() -> AnyView)?
28
- var headerRight: (()->any View)? = {HeaderRight()}
29
- var animatedHeader: AnimatedHeader? = nil
30
- var layoutOffset: CGFloat
31
- var inputSearchProps: InputSearchProps?
32
- var fabProps: FabProps?
33
- var content: () -> Content
34
-
35
- public init(
36
- backgroundColor: Color? = nil,
37
- headerTransparent: Bool = false,
38
- fullScreenContent: Bool = false,
39
- tintColor: Color = Colors.black17,
40
- isBack: Bool = true,
41
- headerType: HeaderType = .default,
42
- verticalAlignment: VerticalAlignment = .top,
43
- horizontalAlignment: HorizontalAlignment = .leading,
44
- title: String = "Stack",
45
- titlePosition: TitlePosition = .left,
46
- goBack: (() -> Void)? = nil,
47
- scrollable: Bool = true,
48
- onContentLayout: ((CGRect) -> Void)? = nil,
49
- useAvoidKeyboard: Bool = true,
50
- footer: (() -> AnyView)? = nil,
51
- headerRight: (()->any View)? = {HeaderRight()},
52
- animatedHeader: AnimatedHeader? = nil,
53
- layoutOffset: CGFloat = 56,
54
- inputSearchProps: InputSearchProps? = nil,
55
- fabProps: FabProps? = nil,
56
- @ViewBuilder content: @escaping () -> Content
57
- ) {
58
- self.backgroundColor = backgroundColor
59
- self.headerTransparent = headerTransparent
60
- self.fullScreenContent = fullScreenContent
61
- self.tintColor = tintColor
62
- self.isBack = isBack
63
- self.headerType = headerType
64
- self.verticalAlignment = verticalAlignment
65
- self.horizontalAlignment = horizontalAlignment
66
- self.title = title
67
- self.titlePosition = titlePosition
68
- self.goBack = goBack
69
- self.scrollable = scrollable
70
- self.onContentLayout = onContentLayout
71
- self.useAvoidKeyboard = useAvoidKeyboard
72
- self.footer = footer
73
- self.headerRight = headerRight
74
- self.animatedHeader = animatedHeader
75
- self.layoutOffset = layoutOffset
76
- self.inputSearchProps = inputSearchProps
77
- self.fabProps = fabProps
78
- self.content = content
79
- }
80
-
81
- @State private var scrollOffset: CGFloat = 0
82
- @State private var keyboardHeight: CGFloat = 0
83
-
84
- // MARK: - Body
85
-
86
- public var body: some View {
87
- GeometryReader { geometry in
88
- let topInset = geometry.safeAreaInsets.top
89
- let keyboardSize: CGFloat = useAvoidKeyboard ? max(keyboardHeight, 0) : 0
90
- let height = geometry.size.height
91
- let bottomInset = geometry.safeAreaInsets.bottom
92
- let screenHeight = height + topInset + bottomInset
93
-
94
- ZStack(alignment: .top) {
95
- // Background color
96
- (backgroundColor ?? Color.white)
97
- .edgesIgnoringSafeArea(.all)
98
-
99
- VStack(spacing: 0) {
100
- ZStack(alignment: fabProps?.position == .center ? .bottom : .bottomTrailing) {
101
- VStack(alignment: horizontalAlignment, spacing: 0) {
102
- if animatedHeader != nil || (headerTransparent && fullScreenContent) {
103
- ZStack(alignment: .top) {
104
- // MARK: - Header
105
- Header(
106
- headerType: headerType,
107
- titlePosition: titlePosition,
108
- title: title,
109
- headerRight: headerRight,
110
- goBack: goBack,
111
- opacity: min(scrollOffset / 114, 1),
112
- animatedHeader: animatedHeader,
113
- scrollState: scrollOffset,
114
- inputSearchProps: inputSearchProps,
115
- tintColor: tintColor
116
- )
117
-
118
- .background(
119
- HeaderBackground(
120
- headerType: headerType,
121
- scrollState: scrollOffset,
122
- headerTransparent: headerTransparent,
123
- fullScreenContent: fullScreenContent
124
-
125
- )
126
- .overlay(animatedHeader?.composable(scrollOffset)
127
- .frame(maxWidth: .infinity)
128
- .aspectRatio(animatedHeader?.aspectRatio.value, contentMode: .fill)
129
- )
130
- ).zIndex(100)
131
-
132
- VStack {
133
- if scrollable {
134
- ScrollView(.vertical, showsIndicators: false) {
135
- VStack {
136
- content()
137
- }
138
- .background(GeometryReader { geo -> Color in
139
- DispatchQueue.main.async {
140
- self.scrollOffset = -geo.frame(in: .global).origin.y
141
- }
142
- return Color.clear
143
- })
144
- }
145
- } else {
146
- content()
147
- }
148
- }
149
- .edgesIgnoringSafeArea(.all)
150
- }
151
- } else {
152
- // MARK: - Header
153
- Header(
154
- headerType: headerType,
155
- titlePosition: titlePosition,
156
- title: title,
157
- headerRight: headerRight,
158
- goBack: goBack,
159
- opacity: min(scrollOffset / 114, 1),
160
- animatedHeader: animatedHeader,
161
- scrollState: scrollOffset,
162
- inputSearchProps: inputSearchProps,
163
- tintColor: tintColor
164
- )
165
- .background(
166
- HeaderBackground(
167
- headerType: headerType,
168
- scrollState: scrollOffset,
169
- headerTransparent: headerTransparent,
170
- fullScreenContent: fullScreenContent
171
- )
172
- .edgesIgnoringSafeArea(.top)
173
- )
174
-
175
- if scrollable {
176
- ScrollView(.vertical, showsIndicators: false) {
177
- VStack {
178
- content()
179
- }
180
- .background(GeometryReader { geo -> Color in
181
- DispatchQueue.main.async {
182
- self.scrollOffset = -geo.frame(in: .global).origin.y
183
- }
184
- return Color.clear
185
- })
186
- }
187
- } else {
188
- content()
189
- }
190
- }
191
- }
192
-
193
- if let fabProps = fabProps {
194
- FloatingButton(
195
- props: fabProps,
196
- keyboardOffset: useAvoidKeyboard ? keyboardSize : 0,
197
- scrollOffset: scrollOffset
198
- )
199
- .padding(.horizontal, Spacing.M)
200
- }
201
- }
202
-
203
-
204
- // MARK: - Footer
205
- if let footerView = footer?() {
206
- Footer(footerView: footerView, keyboardSize: keyboardSize)
207
- }
208
- }
209
- }
210
- }
211
- }
212
-
213
- // MARK: - Keyboard Handling
214
-
215
- private func observeKeyboard() {
216
- NotificationCenter.default.addObserver(forName: UIResponder.keyboardWillChangeFrameNotification, object: nil, queue: .main) { notification in
217
- if useAvoidKeyboard,
218
- let endFrame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect {
219
- withAnimation(.easeOut(duration: 0.25)) {
220
- keyboardHeight = UIScreen.main.bounds.height - endFrame.origin.y
221
- }
222
- }
223
- }
224
- }
225
- }
226
-
227
- // MARK: - Footer
228
-
229
- struct Footer: View {
230
- var footerView: AnyView
231
- var keyboardSize: CGFloat
232
- var bottomInset: CGFloat = 0
233
-
234
- var body: some View {
235
- VStack {
236
- footerView
237
- }
238
- .padding(.vertical, Spacing.S)
239
- .padding(.horizontal, Spacing.M)
240
- .padding(.bottom, keyboardSize - bottomInset)
241
- .background(Colors.black01)
242
- .overlay(
243
- Rectangle()
244
- .fill(Colors.black20.opacity(0.1))
245
- .frame(height: 4)
246
- .shadow(color: Colors.black20.opacity(0.2), radius: 10, y: -2),
247
- alignment: .top
248
- )
249
- }
250
- }