@momo-kits/native-kits 0.0.1-beta.4 → 0.0.2-alpha.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 (296) hide show
  1. package/CLAUDE.md +99 -0
  2. package/PUBLISH_GUIDE.md +675 -0
  3. package/README.md +184 -5
  4. package/ios/Application/ApplicationEnvironment.swift +71 -0
  5. package/ios/Application/Components.swift +270 -0
  6. package/ios/Application/ComposeApi.swift +22 -0
  7. package/ios/Application/FloatingButton.swift +174 -0
  8. package/ios/Application/HeaderRight.swift +306 -0
  9. package/ios/Application/LanguageSource.swift +93 -0
  10. package/ios/Application/Localize.swift +378 -0
  11. package/ios/Application/LocalizeModifier.swift +30 -0
  12. package/ios/Application/MaxApi.swift +18 -0
  13. package/ios/Application/Navigation/BottomTab/BottomTab.swift +104 -0
  14. package/ios/Application/Navigation/BottomTab/BottomTabBar.swift +215 -0
  15. package/ios/Application/Navigation/BottomTab/CurvedContainer.swift +65 -0
  16. package/ios/Application/Navigation/HeaderBackProps.swift +66 -0
  17. package/ios/Application/Navigation/HeaderTitle.swift +57 -0
  18. package/ios/Application/Navigation/HeaderUser.swift +209 -0
  19. package/ios/Application/Navigation/NavigationContainer.swift +213 -0
  20. package/ios/Application/Navigation/NavigationOptions.swift +109 -0
  21. package/ios/Application/Navigation/Navigator.swift +453 -0
  22. package/ios/Application/Navigation/NavigatorManager.swift +22 -0
  23. package/ios/Application/Navigation/Overplay/BottomSheet.swift +256 -0
  24. package/ios/Application/Navigation/Overplay/ModalScreen.swift +74 -0
  25. package/ios/Application/Navigation/Overplay/SnackBar.swift +144 -0
  26. package/ios/Application/Navigation/Tracking/ScreenTracker.swift +117 -0
  27. package/ios/Application/Navigation/component/Header.swift +178 -0
  28. package/ios/Application/Navigation/component/HeaderBackground.swift +83 -0
  29. package/ios/Application/Navigation/component/HeaderColor.swift +65 -0
  30. package/ios/Application/Navigation/component/HeaderRightWidthKey.swift +11 -0
  31. package/ios/Application/Navigation/component/NavigationFooter.swift +90 -0
  32. package/ios/Application/Navigation/component/NavigationHeaderRight.swift +196 -0
  33. package/ios/Application/Screen.swift +250 -0
  34. package/ios/Application/StackScreen.swift +492 -0
  35. package/ios/Avatar/Avatar.swift +193 -0
  36. package/ios/Badge/Badge.swift +84 -0
  37. package/ios/Badge/BadgeDot.swift +31 -0
  38. package/ios/Badge/BadgeRibbon.swift +319 -0
  39. package/ios/BaselineView/BaselineView.swift +163 -0
  40. package/ios/Button/Button.swift +232 -84
  41. package/ios/CalculatorKeyboard/CalculatorKeyboard.swift +126 -0
  42. package/ios/Carousel/Carousel.swift +196 -0
  43. package/ios/Checkbox/Checkbox.swift +77 -0
  44. package/ios/Chip/Chip.swift +120 -0
  45. package/ios/Collapse/Collapse.swift +192 -0
  46. package/ios/{Colors+Spacing → Colors+Radius+Spacing}/Colors.swift +42 -37
  47. package/ios/Colors+Radius+Spacing/Radius.swift +22 -0
  48. package/ios/{Colors+Spacing → Colors+Radius+Spacing}/Spacing.swift +3 -1
  49. package/ios/Colors+Radius+Spacing/Theme.swift +295 -0
  50. package/ios/DateTimePicker/DateTimePicker.swift +212 -0
  51. package/ios/DateTimePicker/DateTimePickerTypes.swift +55 -0
  52. package/ios/DateTimePicker/DateTimePickerUtils.swift +167 -0
  53. package/ios/DateTimePicker/WheelPicker.swift +165 -0
  54. package/ios/Divider/Divider.swift +16 -0
  55. package/ios/Extensions/ActiveOpacityButtonStyle.swift +14 -0
  56. package/ios/Extensions/Color++.swift +32 -0
  57. package/ios/Icon/Icon.swift +69 -0
  58. package/ios/IconButton/IconButton.swift +140 -0
  59. package/ios/Image/Image.swift +87 -0
  60. package/ios/Information/Information.swift +156 -0
  61. package/ios/Input/ErrorView.swift +58 -0
  62. package/ios/Input/Input.swift +461 -77
  63. package/ios/Input/InputPhoneNumber.swift +192 -0
  64. package/ios/Input/InputSearch.swift +301 -0
  65. package/ios/Input/InputTextArea.swift +318 -0
  66. package/ios/InputDropDown/InputDropDown.swift +201 -0
  67. package/ios/InputMoney/InputMoney.swift +405 -0
  68. package/ios/InputOTP/InputOTP.swift +211 -0
  69. package/ios/Layout/GridContext.swift +30 -0
  70. package/ios/Layout/Item.swift +42 -0
  71. package/ios/Layout/Section.swift +134 -0
  72. package/ios/Loader/Loader.swift +113 -0
  73. package/ios/Lottie/LottieView.swift +86 -0
  74. package/ios/MoMoUIKits.podspec +5 -0
  75. package/ios/OTPKeyboard/KeyboardButton.swift +13 -5
  76. package/ios/OTPKeyboard/OTPKeyboard.swift +1 -1
  77. package/ios/Pagination/PaginationDot.swift +61 -0
  78. package/ios/Pagination/PaginationNumber.swift +35 -0
  79. package/ios/Pagination/PaginationScroll.swift +101 -0
  80. package/ios/Pagination/PaginationWhiteDot.swift +37 -0
  81. package/ios/Popup/PopupDisplay.swift +279 -0
  82. package/ios/Popup/PopupInput.swift +92 -0
  83. package/ios/Popup/PopupNotify.swift +219 -0
  84. package/ios/Popup/PopupPromotion.swift +74 -0
  85. package/ios/PopupView/FullscreenPopup.swift +251 -0
  86. package/ios/{Popup → PopupView}/Modifiers.swift +6 -20
  87. package/ios/{Popup → PopupView}/PopupView.swift +38 -146
  88. package/ios/PopupView/Utils++.swift +281 -0
  89. package/ios/ProgressInfo/ProgressInfo.swift +297 -0
  90. package/ios/Radio/Radio.swift +69 -0
  91. package/ios/Rating/Rating.swift +83 -0
  92. package/{example/ios/Example/Preview Content/Preview Assets.xcassets/Contents.json → ios/Resources/MoMoUIKitsColors.xcassets/AccentColor.colorset/Contents.json} +5 -0
  93. package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Text.colorset/Contents.json +3 -3
  94. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/Contents.json +9 -0
  95. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-default.colorset/Contents.json +38 -0
  96. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-disable.colorset/Contents.json +38 -0
  97. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-pressed.colorset/Contents.json +38 -0
  98. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-selected.colorset/Contents.json +38 -0
  99. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-surface.colorset/Contents.json +38 -0
  100. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-tonal.colorset/Contents.json +38 -0
  101. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/border-default.colorset/Contents.json +38 -0
  102. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/border-disable.colorset/Contents.json +38 -0
  103. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/gradient.colorset/Contents.json +38 -0
  104. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/primary.colorset/Contents.json +38 -0
  105. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/secondary.colorset/Contents.json +38 -0
  106. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-container.colorset/Contents.json +38 -0
  107. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-primary.colorset/Contents.json +38 -0
  108. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-secondary.colorset/Contents.json +38 -0
  109. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-default.colorset/Contents.json +38 -0
  110. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-disable.colorset/Contents.json +38 -0
  111. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-hint.colorset/Contents.json +38 -0
  112. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-secondary.colorset/Contents.json +38 -0
  113. package/ios/ScrollIndicator/ScrollIndicator.swift +110 -0
  114. package/ios/Skeleton/Skeleton.swift +99 -0
  115. package/ios/Slider/Slider.swift +237 -0
  116. package/ios/StatusBarTap/StatusBarTap.h +13 -0
  117. package/ios/StatusBarTap/StatusBarTap.m +75 -0
  118. package/ios/Stepper/Stepper.swift +221 -0
  119. package/ios/Steps/Steps.swift +467 -0
  120. package/ios/SuggestAction/SuggestAction.swift +100 -0
  121. package/ios/Swipeable/SwipeCell.swift +226 -31
  122. package/ios/Swipeable/SwipeCellModel.swift +21 -0
  123. package/ios/Switch/Switch.swift +69 -0
  124. package/ios/TabView/TabView.swift +534 -0
  125. package/ios/Tag/Tag.swift +99 -0
  126. package/ios/Template/Logo/Logo.swift +75 -0
  127. package/ios/Template/TrustBanner/TrustBanner.swift +123 -0
  128. package/ios/Title/Title.swift +270 -0
  129. package/ios/Tooltip/Tooltip.swift +486 -0
  130. package/ios/Typography/FontScale.swift +103 -0
  131. package/ios/Typography/FontScaleStore.swift +58 -0
  132. package/ios/Typography/KitDesignSystem.swift +17 -0
  133. package/ios/Typography/Text.swift +262 -0
  134. package/ios/Typography/Typography.swift +80 -23
  135. package/ios/Uploader/Uploader.swift +174 -0
  136. package/ios/native-kits.podspec +73 -13
  137. package/ios-demo/MoMoUIKitsDemo.podspec +20 -0
  138. package/ios-demo/Resources/dot_loading.json +558 -0
  139. package/ios-demo/Resources/icon.json +4052 -0
  140. package/ios-demo/Resources/lottie_circle_loader.json +1 -0
  141. package/ios-demo/Sources/MoMoUIKitsDemo/DemoScaffold.swift +48 -0
  142. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsBadgeDemoView.swift +25 -0
  143. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsButtonDemoView.swift +26 -0
  144. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsCheckboxDemoView.swift +19 -0
  145. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsChipDemoView.swift +33 -0
  146. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsInputDemoView.swift +48 -0
  147. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsPopupDemoView.swift +21 -0
  148. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsRadioDemoView.swift +17 -0
  149. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsTypographyDemoView.swift +28 -0
  150. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoContext.swift +31 -0
  151. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoFactory.swift +24 -0
  152. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AnimatedHeaderDemo.swift +110 -0
  153. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AvatarDemo.swift +107 -0
  154. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BadgeDemo.swift +75 -0
  155. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BaselineView.swift +117 -0
  156. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BottomTabDemo.swift +89 -0
  157. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ButtonDemo.swift +108 -0
  158. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CarouselDemo.swift +96 -0
  159. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CheckboxDemo.swift +60 -0
  160. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ChipDemo.swift +76 -0
  161. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CollapseDemo.swift +102 -0
  162. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +107 -0
  163. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DateTimePickerDemo.swift +100 -0
  164. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DemoScreen.swift +420 -0
  165. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DividerDemo.swift +56 -0
  166. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/HeaderUserDemo.swift +49 -0
  167. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +276 -0
  168. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconButtonDemo.swift +93 -0
  169. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconDemo.swift +81 -0
  170. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ImageDemo.swift +65 -0
  171. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InformationDemo.swift +96 -0
  172. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDemo.swift +117 -0
  173. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDropDownDemo.swift +94 -0
  174. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputMoneyDemo.swift +94 -0
  175. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputOTPDemo.swift +88 -0
  176. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputPhoneNumberDemo.swift +120 -0
  177. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputSearchDemo.swift +85 -0
  178. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputTextAreaDemo.swift +87 -0
  179. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LoaderDemo.swift +73 -0
  180. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LocalizeDemo.swift +235 -0
  181. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +241 -0
  182. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PaginationDemo.swift +68 -0
  183. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PlaygroundData.swift +76 -0
  184. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +175 -0
  185. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +95 -0
  186. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +67 -0
  187. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ProgressInfoDemo.swift +101 -0
  188. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RadioDemo.swift +64 -0
  189. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RatingDemo.swift +68 -0
  190. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SectionDemo.swift +83 -0
  191. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SkeletonDemo.swift +61 -0
  192. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SliderDemo.swift +90 -0
  193. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SnackBarDemo.swift +82 -0
  194. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepperDemo.swift +93 -0
  195. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepsDemo.swift +114 -0
  196. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SuggestActionDemo.swift +90 -0
  197. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwipeDemo.swift +107 -0
  198. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwitchDemo.swift +58 -0
  199. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TabViewDemo.swift +114 -0
  200. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TagDemo.swift +86 -0
  201. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ThemeDemo.swift +181 -0
  202. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TitleDemo.swift +104 -0
  203. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TooltipDemo.swift +118 -0
  204. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TypographyDemo.swift +87 -0
  205. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/UploaderDemo.swift +85 -0
  206. package/ios-demo/Sources/MoMoUIKitsDemo/SwiftUIDemoBrowserView.swift +53 -0
  207. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoModels.swift +15 -0
  208. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoRegistry.swift +73 -0
  209. package/package.json +6 -6
  210. package/publish.sh +554 -20
  211. package/scripts/gen-ios-color.mjs +136 -0
  212. package/CODE_OF_CONDUCT.md +0 -133
  213. package/CONTRIBUTING.md +0 -114
  214. package/LICENSE +0 -20
  215. package/android/build.gradle +0 -82
  216. package/android/gradle.properties +0 -5
  217. package/android/src/main/AndroidManifest.xml +0 -4
  218. package/android/src/main/java/com/momoplatform/nativekits/NativeKitsPackage.kt +0 -17
  219. package/android/src/main/java/com/momoplatform/nativekits/NativeKitsViewManager.kt +0 -20
  220. package/example/ios/Example/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -63
  221. package/example/ios/Example/ComponentDetail.swift +0 -35
  222. package/example/ios/Example/ComponentItem.swift +0 -24
  223. package/example/ios/Example/ComponentModel.swift +0 -33
  224. package/example/ios/Example/ContentView.swift +0 -53
  225. package/example/ios/Example/Example.entitlements +0 -10
  226. package/example/ios/Example/Foundation/ButtonDemo.swift +0 -80
  227. package/example/ios/Example/Foundation/Popup/ActionSheets.swift +0 -136
  228. package/example/ios/Example/Foundation/Popup/Floats.swift +0 -127
  229. package/example/ios/Example/Foundation/Popup/Popups.swift +0 -101
  230. package/example/ios/Example/Foundation/PopupDemo.swift +0 -366
  231. package/example/ios/Example/Foundation/TextInputDemo.swift +0 -31
  232. package/example/ios/Example/Foundation/TypographyDemo.swift +0 -53
  233. package/example/ios/Example/Foundation.swift +0 -26
  234. package/example/ios/Example/Info.plist +0 -18
  235. package/example/ios/Example/Library/SwipeableDemo.swift +0 -105
  236. package/example/ios/Example/Library.swift +0 -26
  237. package/example/ios/Example/Main.swift +0 -11
  238. package/example/ios/Example/Overview.swift +0 -20
  239. package/example/ios/Example/Resource/SFProText-Black.ttf +0 -0
  240. package/example/ios/Example/Resource/SFProText-Bold.ttf +0 -0
  241. package/example/ios/Example/Resource/SFProText-Heavy.ttf +0 -0
  242. package/example/ios/Example/Resource/SFProText-Light.ttf +0 -0
  243. package/example/ios/Example/Resource/SFProText-Medium.ttf +0 -0
  244. package/example/ios/Example/Resource/SFProText-Regular.ttf +0 -0
  245. package/example/ios/Example/Resource/SFProText-Semibold.ttf +0 -0
  246. package/example/ios/Example/Resource/SFProText-Thin.ttf +0 -0
  247. package/example/ios/Example/Resource/SFProText-Ultralight.ttf +0 -0
  248. package/example/ios/Example/Resource/foundation.json +0 -33
  249. package/example/ios/Example/Resource/library.json +0 -8
  250. package/example/ios/Example/Utils.swift +0 -30
  251. package/example/ios/Example/ViewModifier/DarkViewModifier.swift +0 -22
  252. package/example/ios/Example.xcodeproj/project.pbxproj +0 -570
  253. package/example/ios/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  254. package/example/ios/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  255. package/example/ios/Example.xcodeproj/project.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  256. package/example/ios/Example.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  257. package/example/ios/Example.xcworkspace/contents.xcworkspacedata +0 -10
  258. package/example/ios/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  259. package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  260. package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
  261. package/example/ios/Podfile +0 -6
  262. package/example/ios/Podfile.lock +0 -16
  263. package/example/ios/Pods/Local Podspecs/MoMoUIKits.podspec.json +0 -29
  264. package/example/ios/Pods/Manifest.lock +0 -16
  265. package/example/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -661
  266. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
  267. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
  268. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -25
  269. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-dummy.m +0 -5
  270. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-prefix.pch +0 -12
  271. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-umbrella.h +0 -16
  272. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.debug.xcconfig +0 -12
  273. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.modulemap +0 -6
  274. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.release.xcconfig +0 -12
  275. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown +0 -3
  276. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist +0 -29
  277. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-dummy.m +0 -5
  278. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-umbrella.h +0 -16
  279. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig +0 -14
  280. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.modulemap +0 -6
  281. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig +0 -14
  282. package/ios/Colors+Spacing/Radius.swift +0 -11
  283. package/ios/Popup/Utils++.swift +0 -163
  284. package/ios/Theme.md +0 -18
  285. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Background.colorset/Contents.json +0 -0
  286. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Border.colorset/Contents.json +0 -0
  287. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Card.colorset/Contents.json +0 -0
  288. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Contents.json +0 -0
  289. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Error.colorset/Contents.json +0 -0
  290. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Primary.colorset/Contents.json +0 -0
  291. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/PrimaryDark.colorset/Contents.json +0 -0
  292. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/PrimaryLight.colorset/Contents.json +0 -0
  293. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Secondary.colorset/Contents.json +0 -0
  294. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Success.colorset/Contents.json +0 -0
  295. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/TextSecondary.colorset/Contents.json +0 -0
  296. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Warning.colorset/Contents.json +0 -0
@@ -0,0 +1,192 @@
1
+ //
2
+ // InputPhoneNumber.swift
3
+ // Pods
4
+ //
5
+ // Created by sophia on 20/10/25.
6
+ //
7
+
8
+ import SwiftUI
9
+ public struct InputPhoneNumber: View {
10
+ @Environment(\.appTheme) private var theme
11
+ @Environment(\.momoFontScale) private var fontScale
12
+ @Binding public var text: String
13
+
14
+ public var placeholder: String
15
+ public var size: InputSize
16
+ public var hintText: String
17
+ public var error: String
18
+ public var errorSpacing: Bool
19
+ public var loading: Bool
20
+ public var required: Bool
21
+ public var rightIcon: String
22
+ public var rightIconColor: Color?
23
+ public var autofocus: Bool
24
+ public var onChangeText: ((String) -> Void)?
25
+ public var onFocus: (() -> Void)?
26
+ public var onBlur: (() -> Void)?
27
+ public var onRightIconPressed: (() -> Void)?
28
+ public var accessibilityLabel: String?
29
+
30
+ @State private var isFocused: Bool = false
31
+ @FocusState private var isFieldFocused: Bool
32
+
33
+ public init(
34
+ text: Binding<String>,
35
+ placeholder: String = "0123456789",
36
+ size: InputSize = .small,
37
+ hintText: String = "",
38
+ error: String = "",
39
+ errorSpacing: Bool = false,
40
+ loading: Bool = false,
41
+ required: Bool = false,
42
+ rightIcon: String = "",
43
+ rightIconColor: Color? = nil,
44
+ autofocus: Bool = false,
45
+ onChangeText: ((String) -> Void)? = nil,
46
+ onFocus: (() -> Void)? = nil,
47
+ onBlur: (() -> Void)? = nil,
48
+ onRightIconPressed: (() -> Void)? = nil,
49
+ accessibilityLabel: String? = nil
50
+ ) {
51
+ self._text = text
52
+ self.placeholder = placeholder
53
+ self.size = size
54
+ self.hintText = hintText
55
+ self.error = error
56
+ self.errorSpacing = errorSpacing
57
+ self.loading = loading
58
+ self.required = required
59
+ self.rightIcon = rightIcon
60
+ self.rightIconColor = rightIconColor
61
+ self.autofocus = autofocus
62
+ self.onChangeText = onChangeText
63
+ self.onFocus = onFocus
64
+ self.onBlur = onBlur
65
+ self.onRightIconPressed = onRightIconPressed
66
+ self.accessibilityLabel = accessibilityLabel
67
+ }
68
+
69
+ // MARK: - Body
70
+ public var body: some View {
71
+ let textBinding = Binding<String>(
72
+ get: { self.text },
73
+ set: { newValue in
74
+ self.text = newValue
75
+ self.onChangeText?(newValue)
76
+ }
77
+ )
78
+
79
+ VStack(alignment: .leading, spacing: 4) {
80
+ HStack(spacing: 0) {
81
+ // 🇻🇳 Flag
82
+ ImageView("https://static.momocdn.net/app/img/icon/ic-qrcode-package/ic_vn_flag.png")
83
+ .frame(width: 24, height: 24)
84
+ .padding(.trailing, Spacing.XS)
85
+
86
+ MomoText("+84", typography: size == .small ? .headerSSemibold : .headerMBold)
87
+ .foregroundColor(theme.colors.text.default)
88
+
89
+ Rectangle()
90
+ .fill(theme.colors.border.default)
91
+ .frame(width: 1, height: size == .small ? 24 : 32)
92
+ .padding(.horizontal, Spacing.M)
93
+
94
+ // Text input
95
+ ZStack(alignment: .leading) {
96
+ if text.isEmpty {
97
+ MomoText(
98
+ placeholder + (required ? " *" : ""),
99
+ typography: size == .small ? .headerSSemibold : .headerMBold,
100
+ color: theme.colors.text.hint
101
+ )
102
+ }
103
+
104
+ TextField("", text: textBinding, onEditingChanged: { focused in
105
+ handleFocusChange(focused)
106
+ })
107
+ .keyboardType(.numberPad)
108
+ .font(size == .small ? .header_s_semibold : .header_m_bold)
109
+ .ignoreBoldTextSetting()
110
+ .foregroundColor(theme.colors.text.default)
111
+ .applyCursorColor(theme.colors.primary)
112
+ .lineLimit(1)
113
+ .focused($isFieldFocused)
114
+ .onAppear {
115
+ if autofocus { isFieldFocused = true }
116
+ }
117
+ .accessibility(identifier: accessibilityLabel ?? "")
118
+ .accessibilityValue(textBinding.wrappedValue.isEmpty ? placeholder : textBinding.wrappedValue)
119
+ }
120
+
121
+ // Clear button
122
+ if isFocused && !text.isEmpty {
123
+ SwiftUI.Button(action: {
124
+ text = ""
125
+ onChangeText?("")
126
+ }) {
127
+ Icon(source: "24_navigation_close_circle_full", size: 16, color: theme.colors.text.hint)
128
+ .padding(.leading, Spacing.S).accessibility(identifier: "ic_clear")
129
+ }
130
+ }
131
+
132
+ // Loading indicator
133
+ if loading {
134
+ ActivityIndicator(isAnimating: .constant(true), style: .medium)
135
+ .frame(width: 16, height: 16)
136
+ }
137
+
138
+ // ✅ Right icon
139
+ if !rightIcon.isEmpty {
140
+ SwiftUI.Button(action: { onRightIconPressed?() }) {
141
+ Icon(source: rightIcon, size: 24, color: rightIconColor ?? theme.colors.text.default)
142
+ .padding(.leading, Spacing.S)
143
+ }
144
+ }
145
+ }
146
+ .padding(.horizontal, Spacing.M)
147
+ .frame(height: fontScale(size == .small ? 48 : 56))
148
+ .background(
149
+ RoundedRectangle(cornerRadius: Radius.S)
150
+ .fill(theme.colors.background.surface)
151
+ )
152
+ .overlay(
153
+ RoundedRectangle(cornerRadius: Radius.S)
154
+ .stroke(borderColor(), lineWidth: isFocused ? 1.5 : 1)
155
+ )
156
+
157
+ // Error or hint
158
+ ErrorView(
159
+ errorMessage: error,
160
+ errorSpacing: errorSpacing,
161
+ hintText: hintText
162
+ )
163
+ }
164
+ }
165
+
166
+ // MARK: - Helpers
167
+
168
+ private func handleFocusChange(_ focused: Bool) {
169
+ isFocused = focused
170
+ if focused {
171
+ onFocus?()
172
+ } else {
173
+ onBlur?()
174
+ }
175
+ }
176
+
177
+ private func borderColor() -> Color {
178
+ if !error.isEmpty { return theme.colors.error.primary }
179
+ if isFocused { return theme.colors.primary }
180
+ return theme.colors.border.default
181
+ }
182
+ }
183
+
184
+ private extension View {
185
+ func applyCursorColor(_ color: Color) -> some View {
186
+ if #available(iOS 15.0, *) {
187
+ return self.tint(color)
188
+ } else {
189
+ return self
190
+ }
191
+ }
192
+ }
@@ -0,0 +1,301 @@
1
+ //
2
+ // InputSearch.swift
3
+ // Pods
4
+ //
5
+ // Created by dung.pham2 on 3/12/24.
6
+ //
7
+ import SwiftUI
8
+
9
+ // MARK: - RenderRightIconSearch
10
+
11
+ struct RenderRightIconSearch: View {
12
+ @Environment(\.appTheme) private var theme
13
+ let loading: Bool
14
+ let icon: String
15
+ let color: Color
16
+ let onClick: () -> Void
17
+
18
+ var body: some View {
19
+ HStack(spacing: 0) {
20
+ if loading {
21
+ ActivityIndicator(isAnimating: .constant(true), style: .medium)
22
+ .frame(width: 16, height: 16)
23
+ .padding(.horizontal, Spacing.S)
24
+ }
25
+ if !icon.isEmpty {
26
+ Divider()
27
+ .frame(width: 1)
28
+ .background(theme.colors.primary)
29
+ .padding(.leading, Spacing.S)
30
+
31
+ Icon(source: icon, size: 24, color: color)
32
+ .padding(.leading, Spacing.S)
33
+ .onTapGesture(perform: onClick)
34
+ }
35
+ }
36
+ }
37
+ }
38
+
39
+ public struct InputSearchProps {
40
+ @Binding var text: String
41
+ var buttonText: String = ""
42
+ var showButtonText: Bool = false
43
+ var showBorder: Bool = true
44
+ var placeholder: String = ""
45
+ var onChangeText: (String) -> Void = { _ in }
46
+ var onPressButtonText: () -> Void = {}
47
+ var error: String = ""
48
+ var disabled: Bool = false
49
+ var icon: String = ""
50
+ var iconColor: Color? = nil
51
+ var onRightIconPressed: () -> Void = {}
52
+ var onFocus: () -> Void = {}
53
+ var onBlur: () -> Void = {}
54
+ var loading: Bool = false
55
+ var fontWeight: Font.Weight = .regular
56
+ var keyboardType: UIKeyboardType = .default
57
+ // Mirrors Compose's InputSearchProps.searchIcon — a custom leading icon view.
58
+ var searchIcon: (() -> AnyView)? = nil
59
+ // Mirrors Compose's InputSearchProps.placeholderCustomRender — a custom placeholder view.
60
+ var placeholderCustomRender: (() -> AnyView)? = nil
61
+
62
+ public init(text: Binding<String>,
63
+ buttonText: String = "",
64
+ showButtonText: Bool = false,
65
+ showBorder: Bool = true,
66
+ placeholder: String = "",
67
+ onChangeText: @escaping (String) -> Void = { _ in },
68
+ onPressButtonText: @escaping () -> Void = {},
69
+ error: String = "",
70
+ disabled: Bool = false,
71
+ icon: String = "",
72
+ iconColor: Color? = nil,
73
+ onRightIconPressed: @escaping () -> Void = {},
74
+ onFocus: @escaping () -> Void = {},
75
+ onBlur: @escaping () -> Void = {},
76
+ loading: Bool = false,
77
+ fontWeight: Font.Weight = .regular,
78
+ keyboardType: UIKeyboardType = .default,
79
+ searchIcon: (() -> AnyView)? = nil,
80
+ placeholderCustomRender: (() -> AnyView)? = nil) {
81
+ self._text = text
82
+ self.buttonText = buttonText
83
+ self.showButtonText = showButtonText
84
+ self.showBorder = showBorder
85
+ self.placeholder = placeholder
86
+ self.onChangeText = onChangeText
87
+ self.onPressButtonText = onPressButtonText
88
+ self.error = error
89
+ self.disabled = disabled
90
+ self.icon = icon
91
+ self.iconColor = iconColor
92
+ self.onRightIconPressed = onRightIconPressed
93
+ self.onFocus = onFocus
94
+ self.onBlur = onBlur
95
+ self.loading = loading
96
+ self.fontWeight = fontWeight
97
+ self.keyboardType = keyboardType
98
+ self.searchIcon = searchIcon
99
+ self.placeholderCustomRender = placeholderCustomRender
100
+ }
101
+ }
102
+
103
+ // MARK: - InputSearch
104
+
105
+ public struct InputSearch: View {
106
+ @Environment(\.appTheme) private var theme
107
+ @Environment(\.momoFontScale) private var fontScale
108
+ @Binding var text: String
109
+ var buttonText: String = ""
110
+ var showButtonText: Bool = false
111
+ var showBorder: Bool = true
112
+ var placeholder: String = ""
113
+ var onChangeText: (String) -> Void = { _ in }
114
+ var onPressButtonText: () -> Void = {}
115
+ var error: String = ""
116
+ var disabled: Bool = false
117
+ var icon: String = ""
118
+ var iconColor: Color? = nil
119
+ var onRightIconPressed: () -> Void = {}
120
+ var onFocus: () -> Void = {}
121
+ var onBlur: () -> Void = {}
122
+ var loading: Bool = false
123
+ var fontWeight: Font.Weight = .regular
124
+ var keyboardType: UIKeyboardType = .default
125
+ var searchIcon: (() -> AnyView)? = nil
126
+ var placeholderCustomRender: (() -> AnyView)? = nil
127
+
128
+ @State private var isFocused = false
129
+ @State private var isBlurred = false
130
+
131
+ public init(text: Binding<String>,
132
+ buttonText: String = "",
133
+ showButtonText: Bool = false,
134
+ showBorder: Bool = true,
135
+ placeholder: String = "",
136
+ onChangeText: @escaping (String) -> Void = { _ in },
137
+ onPressButtonText: @escaping () -> Void = {},
138
+ error: String = "",
139
+ disabled: Bool = false,
140
+ icon: String = "",
141
+ iconColor: Color? = nil,
142
+ onRightIconPressed: @escaping () -> Void = {},
143
+ onFocus: @escaping () -> Void = {},
144
+ onBlur: @escaping () -> Void = {},
145
+ loading: Bool = false,
146
+ fontWeight: Font.Weight = .regular,
147
+ keyboardType: UIKeyboardType = .default,
148
+ searchIcon: (() -> AnyView)? = nil,
149
+ placeholderCustomRender: (() -> AnyView)? = nil) {
150
+ self._text = text
151
+ self.buttonText = buttonText
152
+ self.showButtonText = showButtonText
153
+ self.showBorder = showBorder
154
+ self.placeholder = placeholder
155
+ self.onChangeText = onChangeText
156
+ self.onPressButtonText = onPressButtonText
157
+ self.error = error
158
+ self.disabled = disabled
159
+ self.icon = icon
160
+ self.iconColor = iconColor
161
+ self.onRightIconPressed = onRightIconPressed
162
+ self.onFocus = onFocus
163
+ self.onBlur = onBlur
164
+ self.loading = loading
165
+ self.fontWeight = fontWeight
166
+ self.keyboardType = keyboardType
167
+ self.searchIcon = searchIcon
168
+ self.placeholderCustomRender = placeholderCustomRender
169
+ }
170
+
171
+ /// Convenience initializer mirroring Compose's `InputSearch(inputSearchProps)`.
172
+ public init(props: InputSearchProps) {
173
+ self.init(
174
+ text: props.$text,
175
+ buttonText: props.buttonText,
176
+ showButtonText: props.showButtonText,
177
+ showBorder: props.showBorder,
178
+ placeholder: props.placeholder,
179
+ onChangeText: props.onChangeText,
180
+ onPressButtonText: props.onPressButtonText,
181
+ error: props.error,
182
+ disabled: props.disabled,
183
+ icon: props.icon,
184
+ iconColor: props.iconColor,
185
+ onRightIconPressed: props.onRightIconPressed,
186
+ onFocus: props.onFocus,
187
+ onBlur: props.onBlur,
188
+ loading: props.loading,
189
+ fontWeight: props.fontWeight,
190
+ keyboardType: props.keyboardType,
191
+ searchIcon: props.searchIcon,
192
+ placeholderCustomRender: props.placeholderCustomRender
193
+ )
194
+ }
195
+
196
+
197
+ public var body: some View {
198
+ let iconColor: Color = disabled ? theme.colors.text.disable : (self.iconColor ?? theme.colors.text.default)
199
+ VStack(alignment: .leading, spacing: 0) {
200
+ HStack(spacing: 0) {
201
+ HStack {
202
+ if let searchIcon = searchIcon {
203
+ searchIcon()
204
+ } else {
205
+ Image(systemName: "magnifyingglass")
206
+ .foregroundColor(theme.colors.text.hint)
207
+ .frame(width: 24, height: 24)
208
+ .padding(.trailing, Spacing.XS)
209
+ }
210
+
211
+ ZStack(alignment: .leading) {
212
+ if text.isEmpty {
213
+ if let placeholderCustomRender = placeholderCustomRender {
214
+ placeholderCustomRender()
215
+ } else {
216
+ Text(placeholder)
217
+ .foregroundColor(disabled ? theme.colors.text.disable : theme.colors.text.hint)
218
+ .font(.system(size: fontScale(14), weight: fontWeight))
219
+ .ignoreBoldTextSetting()
220
+ }
221
+ }
222
+ TextField("", text: $text, onEditingChanged: { editing in
223
+ isFocused = editing
224
+ if editing {
225
+ onFocus()
226
+ } else if isBlurred {
227
+ onBlur()
228
+ }
229
+ if editing && !isBlurred {
230
+ isBlurred = true
231
+ }
232
+ }, onCommit: {})
233
+ .disabled(disabled)
234
+ .foregroundColor(disabled ? theme.colors.text.disable : theme.colors.text.default)
235
+ .font(.system(size: fontScale(14), weight: fontWeight))
236
+ .ignoreBoldTextSetting()
237
+ .keyboardType(keyboardType)
238
+ .applyCursorColor(theme.colors.primary)
239
+ }
240
+
241
+ if isFocused && !text.isEmpty {
242
+ SwiftButton(action: {
243
+ text = ""
244
+ // Kotlin's clear icon fires a callback distinct from
245
+ // onChangeText (`onClearPress`, not ported here); route
246
+ // through onChangeText so clearing isn't a silent no-op.
247
+ onChangeText("")
248
+ }) {
249
+ Image(systemName: "xmark.circle.fill")
250
+ .foregroundColor(theme.colors.text.hint)
251
+ .frame(width: 16, height: 16)
252
+ }
253
+ .padding(.leading, Spacing.S)
254
+ }
255
+
256
+ RenderRightIconSearch(loading: loading, icon: icon, color: iconColor, onClick: onRightIconPressed)
257
+ }
258
+ .padding(.horizontal, Spacing.M)
259
+ .padding(.vertical, Spacing.S)
260
+ .background(theme.colors.background.surface)
261
+ .cornerRadius(Radius.XL)
262
+ .overlay(
263
+ RoundedRectangle(cornerRadius: Radius.XL)
264
+ .stroke(getBorderColor(isFocused: isFocused, error: error, disabled: disabled), lineWidth: showBorder ? 1 : 0)
265
+ )
266
+ .frame(maxWidth: showButtonText ? .infinity : nil, alignment: .leading)
267
+
268
+ if showButtonText {
269
+ SwiftButton(action: onPressButtonText) {
270
+ MomoText(buttonText, typography: .actionDefaultBold, color: theme.colors.text.default)
271
+ }
272
+ .padding(.leading, Spacing.L)
273
+ }
274
+ }
275
+ }
276
+ }
277
+
278
+ // MARK: - Helper Functions
279
+
280
+ func getBorderColor(isFocused: Bool, error: String, disabled: Bool) -> Color {
281
+ if disabled {
282
+ return theme.colors.border.disable
283
+ } else if !error.isEmpty {
284
+ return theme.colors.error.primary
285
+ } else if isFocused {
286
+ return theme.colors.primary
287
+ } else {
288
+ return theme.colors.border.default
289
+ }
290
+ }
291
+ }
292
+
293
+ private extension View {
294
+ func applyCursorColor(_ color: Color) -> some View {
295
+ if #available(iOS 15.0, *) {
296
+ return self.tint(color)
297
+ } else {
298
+ return self
299
+ }
300
+ }
301
+ }