@momo-kits/native-kits 0.300.3 → 0.300.4-debug

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/CLAUDE.md +51 -7
  2. package/README.md +2 -2
  3. package/build.gradle.kts +13 -0
  4. package/compose/build.gradle.kts +197 -0
  5. package/compose/build.gradle.kts.backup +197 -0
  6. package/compose/compose.podspec +47 -0
  7. package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +20 -0
  8. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
  9. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +12 -0
  10. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +7 -0
  11. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +153 -0
  12. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/ReservedRegions.android.kt +6 -0
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +110 -0
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/application/DesignSystemKits.kt +62 -0
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +1071 -0
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
  17. package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +65 -0
  18. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
  19. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +81 -0
  20. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +338 -0
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +175 -0
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +357 -0
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +115 -0
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +89 -0
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +128 -0
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +209 -0
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +542 -0
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +49 -0
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +86 -0
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +125 -0
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +231 -0
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +189 -0
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +478 -0
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +114 -0
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +265 -0
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +235 -0
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +223 -0
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +265 -0
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +185 -0
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +343 -0
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +84 -0
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +361 -0
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +108 -0
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +308 -0
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +59 -0
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +21 -0
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +90 -0
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +330 -0
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +220 -0
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +473 -0
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +122 -0
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +207 -0
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +92 -0
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +560 -0
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +86 -0
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +125 -0
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +207 -0
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +501 -0
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +176 -0
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +182 -0
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +193 -0
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +236 -0
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +180 -0
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +325 -0
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +17 -0
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +194 -0
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +287 -0
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +54 -0
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +50 -0
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/ScreenLayout.kt +306 -0
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +41 -0
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +52 -0
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +66 -0
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +104 -0
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +48 -0
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +338 -0
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +58 -0
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +137 -0
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +116 -0
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +215 -0
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +404 -0
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +732 -0
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +148 -0
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +40 -0
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +233 -0
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +217 -0
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/DuoBarCompression.kt +97 -0
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/DuoTabBar.kt +377 -0
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +169 -0
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +455 -0
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +103 -0
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +106 -0
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +74 -0
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +413 -0
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +39 -0
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +363 -0
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HelpCenterRequest.kt +37 -0
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SideBar.kt +192 -0
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +133 -0
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/ToolkitRequests.kt +41 -0
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +135 -0
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +12 -0
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +91 -0
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +9 -0
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +74 -0
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ReservedRegions.kt +20 -0
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +55 -0
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +118 -0
  124. package/compose/src/commonTest/kotlin/vn/momo/kits/navigation/component/HelpCenterRequestTest.kt +44 -0
  125. package/compose/src/commonTest/kotlin/vn/momo/kits/navigation/component/ToolkitRequestsTest.kt +62 -0
  126. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +42 -0
  127. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +45 -0
  128. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +36 -0
  129. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +38 -0
  130. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +66 -0
  131. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +217 -0
  132. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/ReservedRegions.ios.kt +138 -0
  133. package/gradle/libs.versions.toml +68 -0
  134. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  135. package/gradle/wrapper/gradle-wrapper.properties +8 -0
  136. package/gradle.properties +26 -0
  137. package/gradlew +252 -0
  138. package/gradlew.bat +94 -0
  139. package/ios/Application/ApplicationEnvironment.swift +24 -6
  140. package/ios/Application/DesignSystemKits.swift +100 -0
  141. package/ios/Application/DesignSystemKitsPayload.swift +68 -0
  142. package/ios/Application/MaxApi.swift +30 -3
  143. package/ios/Avatar/Avatar.swift +4 -3
  144. package/ios/Badge/Badge.swift +6 -4
  145. package/ios/Badge/BadgeDot.swift +1 -1
  146. package/ios/Badge/BadgeRibbon.swift +8 -2
  147. package/ios/Button/Button.swift +15 -12
  148. package/ios/CalculatorKeyboard/CalculatorKeyboard.swift +64 -18
  149. package/ios/Carousel/Carousel.swift +29 -12
  150. package/ios/Checkbox/Checkbox.swift +7 -3
  151. package/ios/Chip/Chip.swift +5 -4
  152. package/ios/Collapse/Collapse.swift +70 -19
  153. package/ios/Colors+Radius+Spacing/Colors.swift +10 -1
  154. package/ios/Colors+Radius+Spacing/Radius.swift +6 -0
  155. package/ios/DateTimePicker/DateTimePicker.swift +54 -20
  156. package/ios/DateTimePicker/WheelPicker.swift +103 -105
  157. package/ios/Divider/Divider.swift +37 -4
  158. package/ios/Extensions/Color++.swift +38 -9
  159. package/ios/Extensions/OptionalEnvironmentObject.swift +12 -0
  160. package/ios/Extensions/SkeletonUICompat.swift +11 -0
  161. package/ios/Icon/Icon.swift +21 -23
  162. package/ios/Icon/Icons.swift +1329 -0
  163. package/ios/IconButton/IconButton.swift +15 -7
  164. package/ios/Image/Image.swift +7 -23
  165. package/ios/Information/Information.swift +27 -9
  166. package/ios/Input/ErrorView.swift +2 -2
  167. package/ios/Input/Input.swift +171 -148
  168. package/ios/Input/InputPhoneNumber.swift +10 -9
  169. package/ios/Input/InputSearch.swift +107 -78
  170. package/ios/Input/InputTextArea.swift +133 -148
  171. package/ios/InputDropDown/InputDropDown.swift +10 -7
  172. package/ios/InputMoney/InputMoney.swift +32 -11
  173. package/ios/InputOTP/InputOTP.swift +22 -12
  174. package/ios/Layout/Card.swift +50 -0
  175. package/ios/Layout/GridContext.swift +187 -3
  176. package/ios/Layout/Item.swift +5 -4
  177. package/ios/Layout/ScreenLayout.swift +415 -0
  178. package/ios/Layout/Section.swift +4 -100
  179. package/ios/Loader/Loader.swift +5 -9
  180. package/ios/Lottie/LottieView.swift +14 -2
  181. package/ios/{Application/Navigation/Overplay → Navigation}/BottomSheet.swift +169 -29
  182. package/ios/Navigation/BottomTab/BottomTab.swift +332 -0
  183. package/ios/{Application/Navigation → Navigation}/BottomTab/BottomTabBar.swift +18 -7
  184. package/ios/Navigation/BottomTab/DuoBarCompression.swift +104 -0
  185. package/ios/Navigation/BottomTab/DuoTabBar.swift +329 -0
  186. package/ios/{Application → Navigation/Component}/FloatingButton.swift +43 -54
  187. package/ios/Navigation/Component/Header.swift +545 -0
  188. package/ios/Navigation/Component/HeaderBackground.swift +154 -0
  189. package/ios/Navigation/Component/HeaderJourney.swift +73 -0
  190. package/ios/Navigation/Component/HeaderLocation.swift +48 -0
  191. package/ios/Navigation/Component/HeaderRight.swift +425 -0
  192. package/ios/Navigation/Component/HeaderTitle.swift +36 -0
  193. package/ios/{Application/Navigation → Navigation/Component}/HeaderUser.swift +21 -24
  194. package/ios/Navigation/Component/SideBar.swift +183 -0
  195. package/ios/{Application/Navigation/Overplay → Navigation/Component}/SnackBar.swift +8 -8
  196. package/ios/Navigation/HostBackGestureBridge.swift +78 -0
  197. package/ios/{Application/Navigation/Overplay → Navigation}/ModalScreen.swift +9 -2
  198. package/ios/Navigation/Navigation.swift +204 -0
  199. package/ios/Navigation/NavigationContainer.swift +195 -0
  200. package/ios/{Application/Navigation → Navigation}/Navigator.swift +207 -107
  201. package/ios/Navigation/StackScreen.swift +930 -0
  202. package/ios/Navigation/StackTransition.swift +400 -0
  203. package/ios/Navigation/SwipeBackHaptic.swift +33 -0
  204. package/ios/{Application/Navigation → Navigation}/Tracking/ScreenTracker.swift +12 -5
  205. package/ios/OTPKeyboard/OTPKeyboard.swift +8 -11
  206. package/ios/Pagination/PaginationScroll.swift +2 -2
  207. package/ios/Popup/PopupDisplay.swift +72 -135
  208. package/ios/Popup/PopupInput.swift +10 -13
  209. package/ios/Popup/PopupLayout.swift +138 -0
  210. package/ios/Popup/PopupNotify.swift +59 -69
  211. package/ios/Popup/PopupPromotion.swift +31 -47
  212. package/ios/PopupView/FullscreenPopup.swift +13 -19
  213. package/ios/PopupView/PopupView.swift +1 -1
  214. package/ios/PopupView/Utils++.swift +0 -8
  215. package/ios/ProgressInfo/ProgressInfo.swift +4 -2
  216. package/ios/Radio/Radio.swift +2 -1
  217. package/ios/Rating/Rating.swift +9 -1
  218. package/ios/Resources/dot_loading.json +558 -0
  219. package/ios/Resources/lottie_circle_loader.json +1 -0
  220. package/ios/ScrollIndicator/ScrollIndicator.swift +11 -10
  221. package/ios/Skeleton/Skeleton.swift +22 -27
  222. package/ios/Slider/Slider.swift +16 -18
  223. package/ios/Stepper/Stepper.swift +7 -3
  224. package/ios/Steps/Steps.swift +8 -6
  225. package/ios/SuggestAction/SuggestAction.swift +5 -0
  226. package/ios/Swipeable/SwipeCell.swift +10 -6
  227. package/ios/Switch/Switch.swift +22 -20
  228. package/ios/TabView/TabView.swift +102 -21
  229. package/ios/Tag/Tag.swift +15 -4
  230. package/ios/Template/Logo/Logo.swift +2 -1
  231. package/ios/Template/TrustBanner/TrustBanner.swift +109 -55
  232. package/ios/Title/Title.swift +6 -17
  233. package/ios/Tooltip/Tooltip.swift +29 -14
  234. package/ios/Typography/FontScale.swift +17 -14
  235. package/ios/Typography/Text.swift +156 -20
  236. package/ios/Typography/Typography.swift +2 -2
  237. package/ios/Uploader/Uploader.swift +3 -1
  238. package/ios/native-kits.podspec +2 -3
  239. package/ios-demo/MoMoUIKitsDemo.podspec +1 -3
  240. package/ios-demo/README.md +120 -0
  241. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +1 -1
  242. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DuoTabDemo.swift +80 -0
  243. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +2 -0
  244. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IPhoneDuoDemo.swift +173 -0
  245. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +77 -1
  246. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +1 -0
  247. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +2 -2
  248. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +2 -0
  249. package/package.json +1 -1
  250. package/publish.sh +19 -2
  251. package/scripts/gen-ios-icons.mjs +36 -0
  252. package/settings.gradle.kts +64 -0
  253. package/ios/Application/Components.swift +0 -270
  254. package/ios/Application/ComposeApi.swift +0 -22
  255. package/ios/Application/HeaderRight.swift +0 -306
  256. package/ios/Application/Navigation/BottomTab/BottomTab.swift +0 -104
  257. package/ios/Application/Navigation/HeaderBackProps.swift +0 -66
  258. package/ios/Application/Navigation/HeaderTitle.swift +0 -57
  259. package/ios/Application/Navigation/NavigationContainer.swift +0 -213
  260. package/ios/Application/Navigation/NavigationOptions.swift +0 -109
  261. package/ios/Application/Navigation/NavigatorManager.swift +0 -22
  262. package/ios/Application/Navigation/component/Header.swift +0 -178
  263. package/ios/Application/Navigation/component/HeaderBackground.swift +0 -83
  264. package/ios/Application/Navigation/component/HeaderColor.swift +0 -65
  265. package/ios/Application/Navigation/component/HeaderRightWidthKey.swift +0 -11
  266. package/ios/Application/Navigation/component/NavigationFooter.swift +0 -90
  267. package/ios/Application/Navigation/component/NavigationHeaderRight.swift +0 -196
  268. package/ios/Application/Screen.swift +0 -250
  269. package/ios/Application/StackScreen.swift +0 -492
  270. package/ios/Typography/FontScaleStore.swift +0 -58
  271. package/ios/Typography/KitDesignSystem.swift +0 -17
  272. /package/ios/{Application/Navigation → Navigation}/BottomTab/CurvedContainer.swift +0 -0
@@ -1,306 +0,0 @@
1
- import SwiftUI
2
- import Foundation
3
-
4
- public struct HeaderRightData {
5
- var useShortcut: Bool
6
- var useMore: Bool
7
- var tools: [ToolGroup]
8
- var toolCallback: ((String) -> Void)?
9
- var useSystemTools: Bool
10
-
11
- public init(
12
- useShortcut: Bool = false,
13
- useMore: Bool = false,
14
- tools: [ToolGroup] = [],
15
- toolCallback: ((String) -> Void)? = nil,
16
- useSystemTools: Bool = true
17
- ) {
18
- self.useShortcut = useShortcut
19
- self.useMore = useMore
20
- self.tools = tools
21
- self.toolCallback = toolCallback
22
- self.useSystemTools = useSystemTools
23
- }
24
- }
25
-
26
- public struct Tool {
27
- var key: String
28
- var icon: String
29
- var showBadge: Bool
30
- var name: [String: String]
31
- var showRightIcon: Bool
32
-
33
- public init(
34
- key: String,
35
- icon: String,
36
- name: [String: String] = [:],
37
- showBadge: Bool = false,
38
- showRightIcon: Bool = true
39
- ) {
40
- self.key = key
41
- self.icon = icon
42
- self.showBadge = showBadge
43
- self.name = name
44
- self.showRightIcon = showRightIcon
45
- }
46
-
47
- func toMap() -> [String: Any] {
48
- return [
49
- "key": key,
50
- "icon": icon,
51
- "showBadge": showBadge,
52
- "name": name,
53
- "showRightIcon": showRightIcon
54
- ]
55
- }
56
- }
57
-
58
- public struct ToolGroup {
59
- var title: [String: String]
60
- var items: [Tool]
61
-
62
- public init(
63
- title: [String: String] = [:],
64
- items: [Tool]
65
- ) {
66
- self.title = title
67
- self.items = items
68
- }
69
-
70
- func toMap() -> [String: Any] {
71
- return [
72
- "title": title,
73
- "items": items.map { $0.toMap() }
74
- ]
75
- }
76
- }
77
-
78
- struct NavigationButtonConfig {
79
- let icon: String
80
- let onPress: () -> Void
81
- }
82
-
83
- // MARK: - Components
84
- public struct HeaderRight: View {
85
- public init(headerRight: HeaderRightData? = nil, tintColor: Color? = nil) {
86
- self.headerRight = headerRight
87
- self.tintColor = tintColor
88
- }
89
- var headerRight: HeaderRightData?
90
- var tintColor: Color? = nil
91
-
92
- public var body: some View {
93
- HStack(alignment: .center) {
94
- ToolkitHeaderRight(headerRight: headerRight, tintColor: tintColor)
95
- }
96
- }
97
- }
98
-
99
- struct ToolkitHeaderRight: View {
100
- var headerRight: HeaderRightData?
101
- var tintColor: Color?
102
- @State private var isFavorite: Bool = false
103
- @State private var isLoading: Bool = false
104
- @EnvironmentObject private var environment: ApplicationEnvironment
105
-
106
- // MARK: - Actions
107
- private func onPressShortcut() {
108
- // onToolAction needs the app context (appId/code) so the host knows which app to (un)favorite;
109
- // without it the favorite is a no-op. Mirrors onPressMore below and the Compose HeaderRight.
110
- let context = environment.applicationContext
111
- environment.composeApi?.request(
112
- funcName: "onToolAction",
113
- params: [
114
- "item": ["key": "onFavorite"],
115
- "context": [
116
- "appId": context?.appId,
117
- "code": context?.appCode,
118
- "name": context?.appName,
119
- "icon": context?.appIcon,
120
- "description": context?.description,
121
- "support": context?.support,
122
- "toolkitConfig": context?.toolkitConfig,
123
- "providerId": context?.providerId,
124
- "permissions": context?.permissions
125
- ]
126
- ]
127
- ) { _ in
128
- isFavorite.toggle()
129
- }
130
- }
131
-
132
- private func onPressHelpCenter() {
133
- let context = environment.applicationContext
134
- let paramMap: [String: Any] = [
135
- "appId": context?.appId,
136
- "code": context?.appCode,
137
- "name": context?.appName,
138
- "icon": context?.appIcon,
139
- "description": context?.description
140
- ]
141
- environment.composeApi?.request(
142
- funcName: "showHelpCenter",
143
- params: paramMap
144
- ) { _ in }
145
- }
146
-
147
- private func onPressClose() {
148
- environment.composeApi?.request(
149
- funcName: "dismissAll",
150
- params: ""
151
- ) { _ in }
152
- }
153
-
154
- private func onPressMore() {
155
- let context = environment.applicationContext
156
- let params: [String: Any] = [
157
- "useSystemTools": headerRight?.useSystemTools,
158
- "tools": headerRight?.tools.map { $0.toMap() } ?? [],
159
- "context": [
160
- "appId": context?.appId,
161
- "code": context?.appCode,
162
- "name": context?.appName,
163
- "icon": context?.appIcon,
164
- "description": context?.description,
165
- "support": context?.support,
166
- "toolkitConfig": context?.toolkitConfig,
167
- "providerId": context?.providerId,
168
- "permissions": context?.permissions
169
- ]
170
- ]
171
- environment.composeApi?.request(
172
- funcName: "showTools",
173
- params: params
174
- ) { response in
175
- do {
176
- if let jsonData = response.data(using: .utf8),
177
- let json = try JSONSerialization.jsonObject(with: jsonData) as? [String: Any],
178
- let toolResponse = json["response"] as? String {
179
- headerRight?.toolCallback?(toolResponse)
180
- }
181
- } catch {
182
- print("Error parsing response:", error)
183
- }
184
- }
185
- }
186
-
187
- // Load the current favorite state on appear so the star reflects reality; without this the button
188
- // always renders "not favorited" until the user taps it. Mirrors the Compose LaunchedEffect.
189
- private func loadFavoriteState() {
190
- let context = environment.applicationContext
191
- environment.composeApi?.request(
192
- funcName: "isFavoriteApp",
193
- params: ["code": context?.appCode]
194
- ) { response in
195
- guard let data = response.data(using: .utf8),
196
- let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else {
197
- return
198
- }
199
- isFavorite = (json["response"] as? Bool) ?? false
200
- }
201
- }
202
-
203
- private func getNavigationButtonConfig() -> NavigationButtonConfig {
204
- let totalTools = headerRight?.tools.reduce(0) { $0 + $1.items.count } ?? 0
205
- var icon = isFavorite ? "pin_star_checked" : "pin_star"
206
- var onClickHandler: () -> Void = onPressShortcut
207
-
208
- if totalTools > 1 || headerRight?.useMore == true {
209
- icon = "navigation_more_icon"
210
- onClickHandler = onPressMore
211
- } else if totalTools == 1, let singleTool = headerRight?.tools.first?.items.first {
212
- icon = singleTool.icon
213
- onClickHandler = {
214
- headerRight?.toolCallback?(singleTool.key)
215
- }
216
- }
217
-
218
- return NavigationButtonConfig(icon: icon, onPress: onClickHandler)
219
- }
220
-
221
- var body: some View {
222
- let backgroundButtonColor: Color = tintColor == Colors.black01 ? Colors.black20.opacity(0.6) : Colors.black01.opacity(0.6)
223
- let borderColor: Color = tintColor == Colors.black01 ? Colors.black01.opacity(0.2) : Colors.black20.opacity(0.2)
224
- let navButtonConfig = getNavigationButtonConfig()
225
- let showBadge = headerRight?.tools.contains { group in
226
- group.items.contains { $0.showBadge }
227
- } ?? false
228
-
229
- HStack(alignment: .center, spacing: 0) {
230
- if headerRight?.useShortcut == true {
231
- NavigationButton(
232
- disabled: isLoading,
233
- icon: navButtonConfig.icon,
234
- showBadge: showBadge,
235
- onClick: navButtonConfig.onPress,
236
- tintColor: tintColor
237
- )
238
- }
239
-
240
- HStack(alignment: .center, spacing: 0) {
241
- Icon(source: "help_center", size: 20, color: tintColor ?? Colors.black17)
242
- .padding(4)
243
- .onTapGesture {
244
- onPressHelpCenter()
245
- }
246
-
247
- Rectangle()
248
- .fill(tintColor ?? Colors.black20)
249
- .frame(width: 0.5, height: 12)
250
-
251
- Icon(source: "16_basic_home", size: 20, color: tintColor ?? Colors.black17)
252
- .padding(4)
253
- .onTapGesture {
254
- onPressClose()
255
- }
256
- }
257
- .frame(width: 65, height: 28)
258
- .background(backgroundButtonColor)
259
- .cornerRadius(14)
260
- .overlay(
261
- RoundedRectangle(cornerRadius: 14)
262
- .stroke(borderColor, lineWidth: 0.2)
263
- )
264
- .padding(.leading, Spacing.S)
265
- }
266
- .onAppear {
267
- loadFavoriteState()
268
- }
269
- }
270
- }
271
-
272
- struct NavigationButton: View {
273
- var disabled: Bool
274
- var icon: String
275
- var showBadge: Bool
276
- var onClick: () -> Void
277
- var tintColor: Color?
278
-
279
- var body: some View {
280
- let backgroundButtonColor: Color = tintColor == Colors.black01 ? Colors.black20.opacity(0.6) : Colors.black01.opacity(0.6)
281
- let borderColor: Color = tintColor == Colors.black01 ? Colors.black01.opacity(0.2) : Colors.black20.opacity(0.2)
282
-
283
- ZStack {
284
- Circle()
285
- .fill(backgroundButtonColor)
286
- .overlay(
287
- Circle()
288
- .stroke(borderColor, lineWidth: 0.2)
289
- )
290
-
291
- Icon(source: icon, size: 16, color: tintColor)
292
-
293
- if showBadge {
294
- BadgeDot(size: .small)
295
- .offset(x: -2, y: -2)
296
- .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topTrailing)
297
- }
298
- }
299
- .frame(width: 28, height: 28)
300
- .onTapGesture {
301
- if !disabled {
302
- onClick()
303
- }
304
- }
305
- }
306
- }
@@ -1,104 +0,0 @@
1
- //
2
- // BottomTab.swift
3
- // MoMoUIKits
4
- //
5
- // SwiftUI mirror of Compose's `BottomTab` (navigation/bottomtab/BottomTab.kt).
6
- // Hosts a set of tabbed screens, each wrapped in `StackScreen` chrome built
7
- // from that tab's `NavigationOptions`, with a `BottomTabBar` pinned to the
8
- // bottom. Switching tabs cross-fades + scales the content (parity with Compose).
9
- //
10
-
11
- import SwiftUI
12
-
13
- @available(iOS 16.0, *)
14
- public struct BottomTab: View {
15
- private let items: [BottomTabItem]
16
- private let floatingButton: BottomTabFloatingButton?
17
-
18
- @EnvironmentObject private var navigator: Navigator
19
- @State private var selectedIndex: Int = 0
20
-
21
- public init(items: [BottomTabItem], floatingButton: BottomTabFloatingButton? = nil) {
22
- self.items = items
23
- self.floatingButton = floatingButton
24
- }
25
-
26
- private var bottomInset: CGFloat { safeAreaBottomInset() }
27
- private var reservedBottom: CGFloat { BOTTOM_TAB_BAR_HEIGHT + bottomInset + Spacing.S }
28
-
29
- public var body: some View {
30
- ZStack(alignment: .bottom) {
31
- // Tab content area, inset above the bar.
32
- ZStack {
33
- ForEach(items.indices, id: \.self) { index in
34
- if index == selectedIndex {
35
- tabScreen(for: index)
36
- .transition(.scale(scale: 0.97).combined(with: .opacity))
37
- }
38
- }
39
- }
40
- .padding(.bottom, reservedBottom)
41
- .animation(.easeInOut(duration: 0.2), value: selectedIndex)
42
-
43
- // Tab bar + home-indicator filler.
44
- VStack(spacing: 0) {
45
- BottomTabBar(
46
- items: items,
47
- floatingButton: floatingButton,
48
- selectedIndex: selectedIndex,
49
- onTabSelected: { index in
50
- if index != selectedIndex { selectedIndex = index }
51
- }
52
- )
53
- Colors.black01
54
- .frame(height: bottomInset + Spacing.S)
55
- }
56
- }
57
- .frame(maxWidth: .infinity, maxHeight: .infinity)
58
- .ignoresSafeArea(edges: .bottom)
59
- .preference(key: IsBottomTabRootKey.self, value: true)
60
- }
61
-
62
- @ViewBuilder
63
- private func tabScreen(for index: Int) -> some View {
64
- let item = items[index]
65
- let options = item.options ?? NavigationOptions()
66
- StackScreen(
67
- backgroundColor: options.backgroundColor,
68
- headerTransparent: options.headerTransparent,
69
- fullScreenContent: options.fullScreenContent,
70
- tintColor: options.tintColor ?? Colors.black17,
71
- isBack: !options.hiddenBack,
72
- headerType: options.headerType,
73
- useAnimated: options.useAnimated,
74
- title: options.title,
75
- headerTitle: options.headerTitle,
76
- titlePosition: options.titlePosition,
77
- // Tab back: non-first tab returns to the first tab, first tab
78
- // delegates to the navigator (mirrors Compose's onBackHandler).
79
- goBack: options.hiddenBack ? nil : {
80
- if index != 0 { selectedIndex = 0 } else { navigator.onBackSafe() }
81
- },
82
- scrollable: options.scrollable,
83
- scrollToTopCallback: options.scrollToTopCallback,
84
- useAvoidKeyboard: options.useAvoidKeyboard,
85
- keyboardShouldPersistTaps: options.keyboardShouldPersistTaps,
86
- footer: options.footer,
87
- headerRight: options.resolvedHeaderRight,
88
- animatedHeader: options.animatedHeader,
89
- layoutOffset: options.layoutOffset,
90
- inputSearchProps: options.inputSearchProps,
91
- fabProps: options.fabProps,
92
- content: { item.screen() }
93
- )
94
- }
95
- }
96
-
97
- /// Bottom safe-area inset (home indicator).
98
- @available(iOS 16.0, *)
99
- private func safeAreaBottomInset() -> CGFloat {
100
- let bottomInset = UIApplication.shared.connectedScenes
101
- .compactMap { ($0 as? UIWindowScene)?.keyWindow?.safeAreaInsets.bottom }
102
- .first ?? 0
103
- return min(bottomInset, 21)
104
- }
@@ -1,66 +0,0 @@
1
- //
2
- // HeaderBackProps.swift
3
- // MoMoUIKits
4
- //
5
- // SwiftUI mirror of Compose's `HeaderBackProps` + `PopupNotifyProps`/`PopupAction`.
6
- // When `preventBack` is set, `Navigator.onBackSafe` shows a confirm popup
7
- // before actually leaving the screen — same behavior as Compose.
8
- //
9
-
10
- import SwiftUI
11
-
12
- /// Mirrors Compose's `PopupAction` (a titled button with an optional handler).
13
- public struct PopupAction {
14
- public let title: String
15
- public let onPress: (() -> Void)?
16
-
17
- public init(title: String, onPress: (() -> Void)? = nil) {
18
- self.title = title
19
- self.onPress = onPress
20
- }
21
- }
22
-
23
- /// Mirrors Compose's `PopupNotifyProps` as consumed by `headerBackProps.preventBack`.
24
- public struct PreventBackProps {
25
- public var image: String
26
- public var title: String
27
- public var description: String
28
- public var error: String
29
- public var primary: PopupAction?
30
- public var secondary: PopupAction?
31
- public var buttonDirection: PopupButtonDirection
32
- public var isShowCloseIcon: Bool
33
- public var onIconClose: (() -> Void)?
34
-
35
- public init(
36
- image: String = "",
37
- title: String = "",
38
- description: String = "",
39
- error: String = "",
40
- primary: PopupAction? = nil,
41
- secondary: PopupAction? = nil,
42
- buttonDirection: PopupButtonDirection = .row,
43
- isShowCloseIcon: Bool = true,
44
- onIconClose: (() -> Void)? = nil
45
- ) {
46
- self.image = image
47
- self.title = title
48
- self.description = description
49
- self.error = error
50
- self.primary = primary
51
- self.secondary = secondary
52
- self.buttonDirection = buttonDirection
53
- self.isShowCloseIcon = isShowCloseIcon
54
- self.onIconClose = onIconClose
55
- }
56
- }
57
-
58
- /// Mirrors Compose's `HeaderBackProps`.
59
- public struct HeaderBackProps {
60
- /// When non-nil, a confirm popup is shown before the back navigation runs.
61
- public var preventBack: PreventBackProps?
62
-
63
- public init(preventBack: PreventBackProps? = nil) {
64
- self.preventBack = preventBack
65
- }
66
- }
@@ -1,57 +0,0 @@
1
- //
2
- // HeaderTitle.swift
3
- // MoMoUIKits
4
- //
5
- // SwiftUI mirror of Compose's `sealed class HeaderTitle` (navigation/component/Header.kt).
6
- // The header can show either a plain title (`.default`) or a rich "user" title
7
- // with an avatar group, subtitle, inline icons and a status dot (`.user`).
8
- // (Compose's `Location`/`Journey` variants are not rendered yet, so they are
9
- // omitted here for parity with the implemented `HeaderUser`.)
10
- //
11
-
12
- import SwiftUI
13
-
14
- /// Data backing a `.user` header title (mirrors `HeaderTitle.User`).
15
- public struct HeaderUserData {
16
- public var title: String
17
- public var subTitle: String?
18
- public var image: [String]?
19
- public var dotColor: Color?
20
- public var tintColor: Color?
21
- public var onPress: (() -> Void)?
22
- public var icons: [String]
23
- public var isLoading: Bool
24
-
25
- public init(
26
- title: String,
27
- subTitle: String? = nil,
28
- image: [String]? = nil,
29
- dotColor: Color? = nil,
30
- tintColor: Color? = nil,
31
- onPress: (() -> Void)? = nil,
32
- icons: [String] = [],
33
- isLoading: Bool = false
34
- ) {
35
- self.title = title
36
- self.subTitle = subTitle
37
- self.image = image
38
- self.dotColor = dotColor
39
- self.tintColor = tintColor
40
- self.onPress = onPress
41
- self.icons = icons
42
- self.isLoading = isLoading
43
- }
44
- }
45
-
46
- /// Mirrors Compose's `HeaderTitle` sealed class.
47
- public enum HeaderTitle {
48
- case `default`(String)
49
- case user(HeaderUserData)
50
-
51
- /// Plain title text, when this is a `.default` title (used by the legacy
52
- /// string-based `Header`/`NavigationOptions` paths).
53
- public var defaultTitle: String? {
54
- if case let .default(text) = self { return text }
55
- return nil
56
- }
57
- }