@momo-kits/native-kits 0.0.1-beta.5 → 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 (511) 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 +59 -20
  44. package/ios/Chip/Chip.swift +120 -0
  45. package/ios/Collapse/Collapse.swift +192 -0
  46. package/ios/Colors+Radius+Spacing/Colors.swift +42 -37
  47. package/ios/Colors+Radius+Spacing/Spacing.swift +3 -1
  48. package/ios/Colors+Radius+Spacing/Theme.swift +295 -0
  49. package/ios/DateTimePicker/DateTimePicker.swift +212 -0
  50. package/ios/DateTimePicker/DateTimePickerTypes.swift +55 -0
  51. package/ios/DateTimePicker/DateTimePickerUtils.swift +167 -0
  52. package/ios/DateTimePicker/WheelPicker.swift +165 -0
  53. package/ios/Divider/Divider.swift +16 -0
  54. package/ios/Extensions/ActiveOpacityButtonStyle.swift +14 -0
  55. package/ios/Extensions/Color++.swift +32 -0
  56. package/ios/Icon/Icon.swift +69 -0
  57. package/ios/IconButton/IconButton.swift +140 -0
  58. package/ios/Image/Image.swift +36 -9
  59. package/ios/Information/Information.swift +156 -0
  60. package/ios/Input/ErrorView.swift +58 -0
  61. package/ios/Input/Input.swift +455 -121
  62. package/ios/Input/InputPhoneNumber.swift +192 -0
  63. package/ios/Input/InputSearch.swift +301 -0
  64. package/ios/Input/InputTextArea.swift +318 -0
  65. package/ios/InputDropDown/InputDropDown.swift +201 -0
  66. package/ios/InputMoney/InputMoney.swift +405 -0
  67. package/ios/InputOTP/InputOTP.swift +211 -0
  68. package/ios/Layout/GridContext.swift +30 -0
  69. package/ios/Layout/Item.swift +42 -0
  70. package/ios/Layout/Section.swift +134 -0
  71. package/ios/Loader/Loader.swift +113 -0
  72. package/ios/Lottie/LottieView.swift +86 -0
  73. package/ios/MoMoUIKits.podspec +5 -0
  74. package/ios/OTPKeyboard/KeyboardButton.swift +13 -5
  75. package/ios/Pagination/PaginationDot.swift +61 -0
  76. package/ios/Pagination/PaginationNumber.swift +35 -0
  77. package/ios/Pagination/PaginationScroll.swift +101 -0
  78. package/ios/Pagination/PaginationWhiteDot.swift +37 -0
  79. package/ios/Popup/PopupDisplay.swift +195 -94
  80. package/ios/Popup/PopupInput.swift +92 -0
  81. package/ios/Popup/PopupNotify.swift +219 -0
  82. package/ios/Popup/PopupPromotion.swift +74 -0
  83. package/ios/ProgressInfo/ProgressInfo.swift +297 -0
  84. package/ios/Radio/Radio.swift +69 -0
  85. package/ios/Rating/Rating.swift +83 -0
  86. package/{example/ios/Example/Preview Content/Preview Assets.xcassets/Contents.json → ios/Resources/MoMoUIKitsColors.xcassets/AccentColor.colorset/Contents.json} +5 -0
  87. package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Text.colorset/Contents.json +3 -3
  88. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/Contents.json +9 -0
  89. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-default.colorset/Contents.json +38 -0
  90. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-disable.colorset/Contents.json +38 -0
  91. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-pressed.colorset/Contents.json +38 -0
  92. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-selected.colorset/Contents.json +38 -0
  93. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-surface.colorset/Contents.json +38 -0
  94. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-tonal.colorset/Contents.json +38 -0
  95. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/border-default.colorset/Contents.json +38 -0
  96. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/border-disable.colorset/Contents.json +38 -0
  97. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/gradient.colorset/Contents.json +38 -0
  98. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/primary.colorset/Contents.json +38 -0
  99. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/secondary.colorset/Contents.json +38 -0
  100. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-container.colorset/Contents.json +38 -0
  101. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-primary.colorset/Contents.json +38 -0
  102. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-secondary.colorset/Contents.json +38 -0
  103. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-default.colorset/Contents.json +38 -0
  104. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-disable.colorset/Contents.json +38 -0
  105. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-hint.colorset/Contents.json +38 -0
  106. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-secondary.colorset/Contents.json +38 -0
  107. package/ios/ScrollIndicator/ScrollIndicator.swift +110 -0
  108. package/ios/Skeleton/Skeleton.swift +99 -0
  109. package/ios/Slider/Slider.swift +237 -0
  110. package/ios/StatusBarTap/StatusBarTap.h +13 -0
  111. package/ios/StatusBarTap/StatusBarTap.m +75 -0
  112. package/ios/Stepper/Stepper.swift +221 -0
  113. package/ios/Steps/Steps.swift +467 -0
  114. package/ios/SuggestAction/SuggestAction.swift +100 -0
  115. package/ios/Swipeable/SwipeCell.swift +226 -31
  116. package/ios/Swipeable/SwipeCellModel.swift +21 -0
  117. package/ios/Switch/Switch.swift +53 -28
  118. package/ios/TabView/TabView.swift +534 -0
  119. package/ios/Tag/Tag.swift +99 -0
  120. package/ios/Template/Logo/Logo.swift +75 -0
  121. package/ios/Template/TrustBanner/TrustBanner.swift +123 -0
  122. package/ios/Title/Title.swift +270 -0
  123. package/ios/Tooltip/Tooltip.swift +486 -0
  124. package/ios/Typography/FontScale.swift +103 -0
  125. package/ios/Typography/FontScaleStore.swift +58 -0
  126. package/ios/Typography/KitDesignSystem.swift +17 -0
  127. package/ios/Typography/Text.swift +262 -0
  128. package/ios/Typography/Typography.swift +80 -23
  129. package/ios/Uploader/Uploader.swift +174 -0
  130. package/ios/native-kits.podspec +73 -15
  131. package/ios-demo/MoMoUIKitsDemo.podspec +20 -0
  132. package/ios-demo/Resources/dot_loading.json +558 -0
  133. package/ios-demo/Resources/icon.json +4052 -0
  134. package/ios-demo/Resources/lottie_circle_loader.json +1 -0
  135. package/ios-demo/Sources/MoMoUIKitsDemo/DemoScaffold.swift +48 -0
  136. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsBadgeDemoView.swift +25 -0
  137. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsButtonDemoView.swift +26 -0
  138. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsCheckboxDemoView.swift +19 -0
  139. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsChipDemoView.swift +33 -0
  140. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsInputDemoView.swift +48 -0
  141. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsPopupDemoView.swift +21 -0
  142. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsRadioDemoView.swift +17 -0
  143. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsTypographyDemoView.swift +28 -0
  144. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoContext.swift +31 -0
  145. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoFactory.swift +24 -0
  146. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AnimatedHeaderDemo.swift +110 -0
  147. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AvatarDemo.swift +107 -0
  148. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BadgeDemo.swift +75 -0
  149. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BaselineView.swift +117 -0
  150. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BottomTabDemo.swift +89 -0
  151. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ButtonDemo.swift +108 -0
  152. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CarouselDemo.swift +96 -0
  153. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CheckboxDemo.swift +60 -0
  154. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ChipDemo.swift +76 -0
  155. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CollapseDemo.swift +102 -0
  156. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +107 -0
  157. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DateTimePickerDemo.swift +100 -0
  158. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DemoScreen.swift +420 -0
  159. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DividerDemo.swift +56 -0
  160. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/HeaderUserDemo.swift +49 -0
  161. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +276 -0
  162. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconButtonDemo.swift +93 -0
  163. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconDemo.swift +81 -0
  164. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ImageDemo.swift +65 -0
  165. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InformationDemo.swift +96 -0
  166. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDemo.swift +117 -0
  167. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDropDownDemo.swift +94 -0
  168. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputMoneyDemo.swift +94 -0
  169. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputOTPDemo.swift +88 -0
  170. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputPhoneNumberDemo.swift +120 -0
  171. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputSearchDemo.swift +85 -0
  172. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputTextAreaDemo.swift +87 -0
  173. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LoaderDemo.swift +73 -0
  174. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LocalizeDemo.swift +235 -0
  175. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +241 -0
  176. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PaginationDemo.swift +68 -0
  177. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PlaygroundData.swift +76 -0
  178. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +175 -0
  179. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +95 -0
  180. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +67 -0
  181. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ProgressInfoDemo.swift +101 -0
  182. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RadioDemo.swift +64 -0
  183. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RatingDemo.swift +68 -0
  184. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SectionDemo.swift +83 -0
  185. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SkeletonDemo.swift +61 -0
  186. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SliderDemo.swift +90 -0
  187. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SnackBarDemo.swift +82 -0
  188. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepperDemo.swift +93 -0
  189. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepsDemo.swift +114 -0
  190. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SuggestActionDemo.swift +90 -0
  191. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwipeDemo.swift +107 -0
  192. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwitchDemo.swift +58 -0
  193. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TabViewDemo.swift +114 -0
  194. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TagDemo.swift +86 -0
  195. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ThemeDemo.swift +181 -0
  196. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TitleDemo.swift +104 -0
  197. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TooltipDemo.swift +118 -0
  198. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TypographyDemo.swift +87 -0
  199. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/UploaderDemo.swift +85 -0
  200. package/ios-demo/Sources/MoMoUIKitsDemo/SwiftUIDemoBrowserView.swift +53 -0
  201. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoModels.swift +15 -0
  202. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoRegistry.swift +73 -0
  203. package/package.json +6 -6
  204. package/publish.sh +554 -20
  205. package/scripts/gen-ios-color.mjs +136 -0
  206. package/CODE_OF_CONDUCT.md +0 -133
  207. package/CONTRIBUTING.md +0 -114
  208. package/LICENSE +0 -20
  209. package/android/build.gradle +0 -82
  210. package/android/gradle.properties +0 -5
  211. package/android/src/main/AndroidManifest.xml +0 -4
  212. package/android/src/main/java/com/momoplatform/nativekits/NativeKitsPackage.kt +0 -17
  213. package/android/src/main/java/com/momoplatform/nativekits/NativeKitsViewManager.kt +0 -20
  214. package/example/ios/Example/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -63
  215. package/example/ios/Example/ComponentDetail.swift +0 -35
  216. package/example/ios/Example/ComponentItem.swift +0 -24
  217. package/example/ios/Example/ComponentModel.swift +0 -38
  218. package/example/ios/Example/ContentView.swift +0 -39
  219. package/example/ios/Example/Example.entitlements +0 -10
  220. package/example/ios/Example/Foundation/ButtonDemo.swift +0 -80
  221. package/example/ios/Example/Foundation/ImageDemo.swift +0 -43
  222. package/example/ios/Example/Foundation/Popup/ActionSheets.swift +0 -136
  223. package/example/ios/Example/Foundation/Popup/Floats.swift +0 -127
  224. package/example/ios/Example/Foundation/Popup/Popups.swift +0 -51
  225. package/example/ios/Example/Foundation/PopupDemo.swift +0 -389
  226. package/example/ios/Example/Foundation/TextInputDemo.swift +0 -36
  227. package/example/ios/Example/Foundation/TypographyDemo.swift +0 -53
  228. package/example/ios/Example/Foundation.swift +0 -26
  229. package/example/ios/Example/Info.plist +0 -18
  230. package/example/ios/Example/Library/CheckboxDemo.swift +0 -19
  231. package/example/ios/Example/Library/SwipeableDemo.swift +0 -105
  232. package/example/ios/Example/Library/SwitchDemo.swift +0 -19
  233. package/example/ios/Example/Library.swift +0 -26
  234. package/example/ios/Example/Main.swift +0 -27
  235. package/example/ios/Example/Overview.swift +0 -20
  236. package/example/ios/Example/Resource/SFProText-Black.ttf +0 -0
  237. package/example/ios/Example/Resource/SFProText-Bold.ttf +0 -0
  238. package/example/ios/Example/Resource/SFProText-Heavy.ttf +0 -0
  239. package/example/ios/Example/Resource/SFProText-Light.ttf +0 -0
  240. package/example/ios/Example/Resource/SFProText-Medium.ttf +0 -0
  241. package/example/ios/Example/Resource/SFProText-Regular.ttf +0 -0
  242. package/example/ios/Example/Resource/SFProText-Semibold.ttf +0 -0
  243. package/example/ios/Example/Resource/SFProText-Thin.ttf +0 -0
  244. package/example/ios/Example/Resource/SFProText-Ultralight.ttf +0 -0
  245. package/example/ios/Example/Resource/foundation.json +0 -33
  246. package/example/ios/Example/Resource/library.json +0 -18
  247. package/example/ios/Example/Utils.swift +0 -30
  248. package/example/ios/Example/ViewModifier/DarkViewModifier.swift +0 -22
  249. package/example/ios/Example.xcodeproj/project.pbxproj +0 -581
  250. package/example/ios/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  251. package/example/ios/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  252. package/example/ios/Example.xcodeproj/project.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  253. package/example/ios/Example.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  254. package/example/ios/Example.xcworkspace/contents.xcworkspacedata +0 -10
  255. package/example/ios/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  256. package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  257. package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
  258. package/example/ios/Podfile +0 -7
  259. package/example/ios/Podfile.lock +0 -35
  260. package/example/ios/Pods/Local Podspecs/MoMoUIKits.podspec.json +0 -37
  261. package/example/ios/Pods/Manifest.lock +0 -35
  262. package/example/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -2047
  263. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
  264. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
  265. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
  266. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
  267. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
  268. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -46
  269. package/example/ios/Pods/SDWebImage/LICENSE +0 -20
  270. package/example/ios/Pods/SDWebImage/README.md +0 -352
  271. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.h +0 -340
  272. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.m +0 -172
  273. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h +0 -63
  274. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m +0 -165
  275. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.h +0 -67
  276. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m +0 -120
  277. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h +0 -114
  278. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +0 -392
  279. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h +0 -112
  280. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m +0 -420
  281. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h +0 -23
  282. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m +0 -133
  283. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h +0 -168
  284. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.m +0 -79
  285. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h +0 -110
  286. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m +0 -540
  287. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.h +0 -145
  288. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m +0 -326
  289. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h +0 -73
  290. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m +0 -256
  291. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h +0 -19
  292. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m +0 -58
  293. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h +0 -23
  294. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.m +0 -98
  295. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h +0 -450
  296. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +0 -1030
  297. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h +0 -153
  298. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m +0 -68
  299. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h +0 -156
  300. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +0 -138
  301. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.h +0 -81
  302. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.m +0 -556
  303. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h +0 -297
  304. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m +0 -26
  305. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h +0 -153
  306. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +0 -822
  307. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.h +0 -58
  308. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.m +0 -130
  309. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h +0 -36
  310. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m +0 -28
  311. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h +0 -22
  312. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m +0 -58
  313. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h +0 -28
  314. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m +0 -127
  315. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h +0 -25
  316. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.m +0 -101
  317. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h +0 -58
  318. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +0 -807
  319. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h +0 -30
  320. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +0 -420
  321. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.h +0 -146
  322. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +0 -170
  323. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h +0 -40
  324. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m +0 -123
  325. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.h +0 -241
  326. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.m +0 -331
  327. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.h +0 -78
  328. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.m +0 -158
  329. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h +0 -32
  330. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m +0 -39
  331. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h +0 -36
  332. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m +0 -39
  333. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.h +0 -95
  334. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m +0 -17
  335. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h +0 -352
  336. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m +0 -149
  337. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h +0 -314
  338. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m +0 -658
  339. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h +0 -113
  340. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m +0 -60
  341. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h +0 -49
  342. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.m +0 -55
  343. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +0 -191
  344. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +0 -722
  345. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h +0 -69
  346. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m +0 -71
  347. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h +0 -69
  348. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m +0 -73
  349. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h +0 -32
  350. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m +0 -16
  351. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.h +0 -115
  352. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m +0 -275
  353. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.h +0 -290
  354. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m +0 -775
  355. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h +0 -27
  356. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.m +0 -14
  357. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h +0 -72
  358. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.m +0 -59
  359. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h +0 -143
  360. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.m +0 -303
  361. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h +0 -131
  362. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m +0 -194
  363. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.h +0 -387
  364. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.m +0 -234
  365. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h +0 -24
  366. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.m +0 -23
  367. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h +0 -46
  368. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m +0 -60
  369. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h +0 -26
  370. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m +0 -22
  371. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h +0 -27
  372. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m +0 -47
  373. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +0 -89
  374. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +0 -221
  375. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h +0 -80
  376. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.m +0 -47
  377. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h +0 -146
  378. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m +0 -824
  379. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h +0 -129
  380. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.m +0 -76
  381. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.h +0 -194
  382. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.m +0 -67
  383. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h +0 -110
  384. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +0 -446
  385. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h +0 -48
  386. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m +0 -82
  387. package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h +0 -24
  388. package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m +0 -42
  389. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.h +0 -14
  390. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m +0 -29
  391. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h +0 -21
  392. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m +0 -92
  393. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.h +0 -18
  394. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.m +0 -32
  395. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.h +0 -29
  396. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m +0 -227
  397. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h +0 -19
  398. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.m +0 -127
  399. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h +0 -23
  400. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m +0 -164
  401. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h +0 -21
  402. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.m +0 -83
  403. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +0 -39
  404. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h +0 -122
  405. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m +0 -13
  406. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h +0 -20
  407. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.m +0 -79
  408. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h +0 -19
  409. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDmetamacros.h +0 -667
  410. package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.h +0 -18
  411. package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.m +0 -42
  412. package/example/ios/Pods/SDWebImage/WebImage/SDWebImage.h +0 -89
  413. package/example/ios/Pods/SDWebImageSwiftUI/LICENSE +0 -19
  414. package/example/ios/Pods/SDWebImageSwiftUI/README.md +0 -690
  415. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift +0 -870
  416. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Backport.swift +0 -59
  417. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/OnChange.swift +0 -52
  418. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Overlay.swift +0 -124
  419. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/StateObject.swift +0 -151
  420. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Image.swift +0 -78
  421. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift +0 -132
  422. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImagePlayer.swift +0 -122
  423. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +0 -133
  424. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift +0 -82
  425. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +0 -97
  426. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift +0 -114
  427. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift +0 -64
  428. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift +0 -92
  429. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Transition/Transition.swift +0 -93
  430. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift +0 -509
  431. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Module/SDWebImageSwiftUI.h +0 -15
  432. package/example/ios/Pods/SkeletonUI/LICENSE +0 -21
  433. package/example/ios/Pods/SkeletonUI/README.md +0 -137
  434. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AngleInteractor.swift +0 -29
  435. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AnglePresenter.swift +0 -7
  436. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Animation/AnimationInteractor.swift +0 -56
  437. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearanceInteractor.swift +0 -58
  438. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearancePresenter.swift +0 -5
  439. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ClosedRange+Normalize.swift +0 -16
  440. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Image+OptionalType.swift +0 -102
  441. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ModifiedContent+SkeletonModifier.swift +0 -26
  442. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Optional+OptionalType.swift +0 -5
  443. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/SecureField+OptionalType.swift +0 -19
  444. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Text+OptionalType.swift +0 -27
  445. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/TextField+OptionalType.swift +0 -35
  446. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Toggle+OptionalType.swift +0 -29
  447. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/UnitPoint+Angle.swift +0 -8
  448. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/View+SkeletonModifier.swift +0 -8
  449. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Modifiers/SkeletonModifier.swift +0 -52
  450. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilineInteractor.swift +0 -41
  451. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilinePresenter.swift +0 -9
  452. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityInteractor.swift +0 -29
  453. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityPresenter.swift +0 -7
  454. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionInteractor.swift +0 -29
  455. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionPresenter.swift +0 -7
  456. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Protocols/OptionalType.swift +0 -4
  457. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusInteractor.swift +0 -29
  458. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusPresenter.swift +0 -7
  459. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapeInteractor.swift +0 -33
  460. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapePresenter.swift +0 -5
  461. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonForEach.swift +0 -20
  462. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonInteractor.swift +0 -27
  463. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonList.swift +0 -20
  464. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonPresenter.swift +0 -15
  465. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonShape.swift +0 -64
  466. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonView.swift +0 -25
  467. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-dummy.m +0 -5
  468. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-prefix.pch +0 -12
  469. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-umbrella.h +0 -16
  470. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.debug.xcconfig +0 -15
  471. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.modulemap +0 -6
  472. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.release.xcconfig +0 -15
  473. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown +0 -75
  474. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist +0 -119
  475. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-dummy.m +0 -5
  476. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-umbrella.h +0 -16
  477. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig +0 -15
  478. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.modulemap +0 -6
  479. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig +0 -15
  480. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m +0 -5
  481. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +0 -12
  482. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +0 -75
  483. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig +0 -14
  484. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +0 -6
  485. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig +0 -14
  486. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-dummy.m +0 -5
  487. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-prefix.pch +0 -12
  488. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-umbrella.h +0 -17
  489. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.debug.xcconfig +0 -17
  490. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.modulemap +0 -6
  491. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.release.xcconfig +0 -17
  492. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-dummy.m +0 -5
  493. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-prefix.pch +0 -12
  494. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-umbrella.h +0 -16
  495. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.debug.xcconfig +0 -12
  496. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.modulemap +0 -6
  497. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.release.xcconfig +0 -12
  498. package/ios/Extensions/View++.swift +0 -9
  499. package/ios/Theme.md +0 -18
  500. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Background.colorset/Contents.json +0 -0
  501. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Border.colorset/Contents.json +0 -0
  502. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Card.colorset/Contents.json +0 -0
  503. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Contents.json +0 -0
  504. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Error.colorset/Contents.json +0 -0
  505. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Primary.colorset/Contents.json +0 -0
  506. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/PrimaryDark.colorset/Contents.json +0 -0
  507. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/PrimaryLight.colorset/Contents.json +0 -0
  508. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Secondary.colorset/Contents.json +0 -0
  509. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Success.colorset/Contents.json +0 -0
  510. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/TextSecondary.colorset/Contents.json +0 -0
  511. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Warning.colorset/Contents.json +0 -0
package/README.md CHANGED
@@ -1,6 +1,185 @@
1
- ## 🛠 Installation
2
- ### Using Cocoapods
3
- Add it inside your `Podfile`.
4
- ```ruby
5
- pod 'MoMoUIKits', '../node_modules/@momo-platform/native-kits/ios'
1
+ ## ComposeKit (Kotlin Multiplatform)
2
+
3
+ ComposeKit là bộ UI Kit đa nền tảng phục vụ Mini App/SDK của MoMo. Toàn bộ giao diện, điều hướng, token thiết kế và layer tích hợp với MaxAPI đều được viết bằng Kotlin Multiplatform để tái sử dụng cho Android, iOS (qua Compose Multiplatform) cũng như các host native.
4
+
5
+ ### Mục tiêu & phạm vi
6
+ - Chuẩn hoá visual language của MoMo với kho component Compose đã mang sẵn màu sắc, typography, spacing, radius trong `vn.momo.compose.kit.const`.
7
+ - Cung cấp navigation stack thống nhất (`NavigationContainer`, `Navigator`, bottom tabs, modal/bottom sheet) hỗ trợ dynamic screen registry và MaxAPI dismiss/present.
8
+ - Cho phép host nhận context Mini App (`MiniAppContext`, `KitConfig`, `ApplicationContext`, `AppLanguage`) để tự động render Trust Banner, header assets, tracking.
9
+ - Đồng bộ hoá với native SwiftUI kit (`nativeSDK/ios`) nhằm cover các màn đang viết Swift/Objective‑C.
10
+
11
+ ---
12
+
13
+ ### Cấu trúc thư mục
14
+ - `shared/`: module KMP chính. Chứa toàn bộ source `vn.momo.compose.kit.*`, compose resources (font SF Pro), logic publish Maven và podspec.
15
+ - `composeApp/`: sample Compose Multiplatform Android dùng để thử nhanh component, navigator, trust banner.
16
+ - `iosApp/`: project SwiftUI + CocoaPods để test framework iOS sinh ra từ `shared`.
17
+ - `nativeSDK/ios/`: Swift package + podspec `MoMoUIKits` (phụ thuộc `SDWebImageSwiftUI`, `SkeletonUI`) cho các màn hoàn toàn native.
18
+ - `publish_release.sh`, `.gitlab-ci.yml`: script tự bump patch version, chạy `:compose:publish...` khi commit có `[ci build]`.
19
+ - `build-output/`, `build/`: output tạm thời (không commit).
20
+
21
+ ---
22
+
23
+ ### Thành phần chính trong `shared`
24
+
25
+ **Design tokens & theming**
26
+ - `const/Colors.kt`, `Radius.kt`, `Spacing.kt`, `Typography.kt` định nghĩa token thống nhất.
27
+ - `const/Theme.kt` cung cấp `Theme`, `ColorScheme`, `AppTheme`, `AppThemeController`. Có sẵn `defaultTheme` & `darkTheme`, hỗ trợ inject assets (vd. header background từ `KitConfig`).
28
+
29
+ **Layout primitives & modifier**
30
+ - `layout/Card.kt`, `Section.kt`, `Item.kt` chứa khung section theo guideline Super App.
31
+ - `modifier/AutomationId`, `Conditional`, `Shadow`, `Size` giúp thêm accessibility id, điều kiện hoá modifier, shadow blur tuỳ nền.
32
+
33
+ **UI components**
34
+ - Buttons (`Button.kt`, `IconButton.kt`), typography helper (`Text.kt`, `Title.kt`), badge/tag (`Badge*`, `Tag.kt`), chip & switch (`Chip.kt`, `Switch.kt`), checkbox/radio.
35
+ - Input stack: `Input*` (OTP, PhoneNumber, Money, Search, DropDown, TextArea) với keyboard helpers.
36
+ - Pagination indicator (`PaginationDot/Number/Scroll/WhiteDot.kt`), skeleton loading (`Skeleton.kt`), trust UI (`TrustBanner.kt`).
37
+ - Popup/notify (`PopupNotify`, `PopupPromotion`), floating button, `LazyColumnWithBouncing`, Cupertino overscroll, `DateTimePicker` (Wheel UI + utils).
38
+ - Lottie animation (`components/animation/LottieAnimation`) dựng trên [Compottie](https://github.com/alexzhirkevich/compottie) để chạy animation JSON đồng nhất trên Android/iOS/Desktop.
39
+
40
+ **Navigation & application layer**
41
+ - `navigation/NavigationContainer`, `Navigation.kt`, `Navigator.kt`, `StackScreen.kt`, `BottomSheet.kt`, bottom tab helpers.
42
+ - `Navigator` hỗ trợ `push`, `replace`, `present`, `reset`, `pop(count)`, `showModal`, `showBottomSheet` với overlay registry (`OverplayComponentRegistry`).
43
+ - `application/NavigationContainer.kt`, `MiniAppContext`, `KitConfig`, `ApplicationContext`, `AppConfig`, `AppLanguage` cung cấp context cho header/trust banner, mapping sang map để gửi qua MaxAPI.
44
+ - `application/Screen.kt`, `Header*`, `Footer`, `FloatingButton` tạo template screen (đang deprecate, khuyến nghị dùng `NavigationContainer + StackScreen`).
45
+
46
+ **Platform utilities**
47
+ - `platform/Platform.kt` định nghĩa expect/actual cho `getPlatformName`, `BackHandler`, `getScreenHeight`, `NativePaint` mask filter. Android actual đi kèm `getAndroidBuildVersion`.
48
+ - `utils/Icons.kt`, `Resources.kt`, `getAppStatusBarHeight()` giúp truy xuất resource Compose đa nền tảng.
49
+
50
+ **Native bridge**
51
+ - `shared/shared.podspec` và `nativeSDK/ios/MoMoUIKits.podspec` cho phép embed vào iOS app via CocoaPods (deployment target 15.0, Swift 5). Phần native duy trì các SwiftUI component tương đương Compose (Button, Input, Popup, Trust Banner, Badge...).
52
+
53
+ ---
54
+
55
+ ### Yêu cầu môi trường
56
+ - JDK 17+ và Android SDK (compileSdk xem `libs.versions.toml`); wrapper Gradle `9.5.0`, AGP `9.2.1`.
57
+ - Kotlin Multiplatform plugin + Compose Multiplatform (JetBrains 1.6.1+).
58
+ - Xcode 15, CocoaPods 1.12+ để build `iosApp` hoặc publish Pod.
59
+ - Truy cập mạng nội bộ GitLab Packages nếu cần publish/consume Maven repo `https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven`.
60
+
61
+ ---
62
+
63
+ ### Build & kiểm thử nhanh
64
+
65
+ | Tác vụ | Lệnh |
66
+ | --- | --- |
67
+ | Build thư viện KMP (AAR + klib + framework) | `./gradlew :compose:assembleRelease` |
68
+ | Publish local maven (nếu cần thử) | `./gradlew :compose:publishAllPublicationsToMavenLocal` |
69
+ | Sample Android | `./gradlew :composeApp:assembleDebug` |
70
+ | Sample iOS | mở `iosApp/iosApp.xcworkspace` rồi build trên Xcode |
71
+
72
+ Output Compose nằm trong `shared/build/outputs` và `shared/build/publications/*`. Debug fonts/resources ở `shared/src/commonMain/composeResources`.
73
+
74
+ ---
75
+
76
+ ### Publish nội bộ (GitLab Packages)
77
+ 1. Cập nhật `gradle.properties` nếu thay đổi group/artifact/version. Mặc định:
78
+ ```
79
+ name=ComposeKit
80
+ group=vn.momo.kits
81
+ artifact.id=kits
82
+ version=0.1.2
83
+ url=https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven
84
+ gitlab.user=upload_packages
85
+ gitlab.password=<token>
86
+ ```
87
+ 2. Chạy `./publish_release.sh`. Script sẽ:
88
+ - Đọc version hiện tại, query các version đã publish qua GitLab API.
89
+ - Bump patch (`X.Y.Z+1`) đến khi không trùng.
90
+ - Ghi lại `gradle.properties`, export `VERSION`, chạy `./gradlew clean` + `:compose:publishAllPublicationsToGitLabPackagesRepository`.
91
+ 3. CI (`.gitlab-ci.yml`) tự động thực thi script này khi push với commit message chứa `[ci build]` (trừ khi branch khớp `engine/w*`).
92
+
93
+ ---
94
+
95
+ ### Tích hợp ComposeKit trong dự án KMP/Android
96
+
97
+ **Thêm dependency**
98
+ ```kotlin
99
+ repositories {
100
+ maven { url = uri("https://gitlab.mservice.com.vn/api/v4/projects/5400/packages/maven") }
101
+ }
102
+
103
+ commonMain.dependencies {
104
+ implementation("vn.momo.kits:kits:<version>")
105
+ }
6
106
  ```
107
+
108
+ **Khởi tạo navigation container**
109
+ ```kotlin
110
+ val miniAppContext = MiniAppContext(appId = "...", appCode = "...", appIcon = "...", toolkitConfig = ...)
111
+
112
+ NavigationContainer(
113
+ initialScreen = { StackScreenExample() },
114
+ options = NavigationOptions(headerTitle = HeaderTitle.Default("Home")),
115
+ applicationContext = miniAppContext,
116
+ config = KitConfig(trustBanner = defaultBanner),
117
+ maxApi = maxApi, // IMaxApi implementation từ host
118
+ setNavigator = { navigator = it }
119
+ )
120
+ ```
121
+
122
+ Bên trong screen, truy cập `LocalNavigator.current` để:
123
+ ```kotlin
124
+ val navigator = LocalNavigator.current
125
+ navigator.push { DetailScreen() }
126
+ navigator.showBottomSheet(content = { BottomSheetContent() })
127
+ ```
128
+
129
+ Tuỳ biến theme bằng `AppThemeController`:
130
+ ```kotlin
131
+ val themeController = AppThemeController.current
132
+ themeController(defaultTheme.copy(colors = defaultTheme.colors.copy(primary = Colors.pink_04)))
133
+ ```
134
+
135
+ `ApplicationContext.current`, `AppConfig.current`, `AppLanguage.current` giúp component (ví dụ `TrustBanner`) tự lấy dữ liệu trust banner và tracking `service_component_clicked`.
136
+
137
+ ---
138
+
139
+ ### Tích hợp iOS / Native SDK
140
+ - `shared/shared.podspec` sinh framework Compose (static) mang tên theo `artifact.id` (`kits`). Add vào Podfile:
141
+ ```ruby
142
+ pod 'kits', :path => '../shared'
143
+ ```
144
+ - Với màn SwiftUI thuần native, dùng `nativeSDK/ios`:
145
+ ```ruby
146
+ pod 'MoMoUIKits', :path => 'nativeSDK/ios'
147
+ ```
148
+ Bộ này mirror hầu hết component Compose (Button, Input, Popup, TrustBanner...). `ApplicationEnvironment` chấp nhận `MiniAppContext`, `KitConfig` tương tự Kotlin.
149
+
150
+ ---
151
+
152
+ ### Lưu ý khác
153
+ - `Screen` composable cũ được đánh dấu `@Deprecated`; sử dụng `NavigationContainer + StackScreen` để hưởng lợi dynamic route và animation.
154
+ - `DesignSystemWhiteList` trong `application/ApplicationContainer.kt` hỗ trợ fallback cho host cũ; đừng kích hoạt nếu không cần.
155
+ - Khi thêm tài nguyên mới, đặt trong `shared/src/commonMain/composeResources` để Compose Multiplatform plugin sinh accessor tự động.
156
+ - Repo không bundle SDK bên thứ ba ngoại trừ `vn.momo.corex.maxapi`, Compose/Coil/Ktor **và Compottie** cho animation.
157
+
158
+ ---
159
+
160
+ ### Animation Lottie đa nền tảng với Compottie
161
+
162
+ ```kotlin
163
+ import io.github.alexzhirkevich.compottie.LottieCompositionSpec
164
+ import vn.momo.kits.components.animation.LottieAnimation
165
+
166
+ @Composable
167
+ fun SuccessState() {
168
+ LottieAnimation(
169
+ spec = LottieCompositionSpec.Url(
170
+ "https://assets10.lottiefiles.com/packages/lf20_jcikwtux.json"
171
+ )
172
+ )
173
+ }
174
+ ```
175
+
176
+ - `shared/build.gradle.kts` đã bật `coreLibraryDesugaringEnabled` để tương thích `compottie-dot`/`compottie-network` với `minSdk = 24`.
177
+ - Nếu animation dùng asset/font nội bộ, kết hợp `compottie-resources` (`rememberResourcesAssetsManager`, `rememberResourcesFontManager`) để trỏ về `composeResources`.
178
+ ### NativeMaxApi 0.3.1
179
+
180
+ Compose dùng typed `vn.momo.maxapi.IMaxApi` do host truyền vào `NavigationContainer`.
181
+ Toolkit dùng overload `showToolkit(ToolkitOptions, callback)` để giữ nhóm tool tùy chỉnh,
182
+ nhãn đa ngôn ngữ, icon, badge và `useSystemTools`. Callback trả `actionKey`; request đang chờ
183
+ được hủy khi composition bị gỡ. Kits không đóng client do host sở hữu.
184
+
185
+ Chạy `./gradlew :compose:testAndroidHostTest` để kiểm tra hủy request và callback đến muộn.
@@ -0,0 +1,71 @@
1
+ import SwiftUI
2
+
3
+ public protocol KitComposeApi {
4
+ func request(funcName: String, params: Any?) -> String
5
+ func request(funcName: String, params: Any?, onResponse: ((String) -> Void)?) -> String
6
+ func requestCallback(funcName: String, params: Any?, onResponse: ((String) -> Void)?)
7
+ func removeCallback(id: String)
8
+ }
9
+
10
+ public class MiniAppContext {
11
+ public var appId: String = ""
12
+ public var appCode: String = ""
13
+ public var appName: Any? = nil
14
+ public var appIcon: String = ""
15
+ public var description: Any? = nil
16
+ public var support: [String: Any] = [:]
17
+ public var toolkitConfig: [String: Any] = [:]
18
+ public var providerId: String = "momo"
19
+ public var permissions: [[String: Any]] = []
20
+ // Per-mini-app font-scale override; nil falls back to FontScaleStore. Mirrors Compose's
21
+ // MiniAppContext.userScaleRate / useOSScaleRate, which win per field over KitFontScale.
22
+ public var userScaleRate: CGFloat? = nil
23
+ public var useOSScaleRate: Bool? = nil
24
+
25
+ public init(appId: String, appCode: String, appName: Any? = nil, appIcon: String, description: Any? = nil, support: [String: Any] = [:], toolkitConfig: [String: Any] = [:], providerId: String = "momo", permissions: [[String: Any]] = [], userScaleRate: CGFloat? = nil, useOSScaleRate: Bool? = nil) {
26
+ self.appId = appId
27
+ self.appCode = appCode
28
+ self.appName = appName
29
+ self.appIcon = appIcon
30
+ self.description = description
31
+ self.support = support
32
+ self.toolkitConfig = toolkitConfig
33
+ self.providerId = providerId
34
+ self.permissions = permissions
35
+ self.userScaleRate = userScaleRate
36
+ self.useOSScaleRate = useOSScaleRate
37
+ }
38
+ }
39
+
40
+ public class KitConfig {
41
+ public var trustBanner: TrustBannerData? = nil
42
+ public var headerBar: String? = nil
43
+ public var headerGradient: String? = nil
44
+ }
45
+
46
+ public class ApplicationEnvironment: ObservableObject {
47
+ // AI-GENERATED START: expose the host bridge to modules outside MoMoUIKits (e.g. the demo pod)
48
+ public let applicationContext: MiniAppContext?
49
+ public let composeApi: KitComposeApi?
50
+ public let config: KitConfig?
51
+ public let maxApi: MaxApi?
52
+ // AI-GENERATED END: expose the host bridge to modules outside MoMoUIKits (e.g. the demo pod)
53
+
54
+ public init(applicationContext: MiniAppContext? = nil, composeApi: KitComposeApi? = nil, config: KitConfig? = nil, maxApi: MaxApi? = nil) {
55
+ self.applicationContext = applicationContext
56
+ self.composeApi = composeApi
57
+ self.config = config
58
+ self.maxApi = maxApi
59
+ }
60
+ }
61
+
62
+ private struct ApplicationEnvironmentKey: EnvironmentKey {
63
+ static let defaultValue = ApplicationEnvironment()
64
+ }
65
+
66
+ public extension EnvironmentValues {
67
+ var applicationEnvironment: ApplicationEnvironment {
68
+ get { self[ApplicationEnvironmentKey.self] }
69
+ set { self[ApplicationEnvironmentKey.self] = newValue }
70
+ }
71
+ }
@@ -0,0 +1,270 @@
1
+ //
2
+ // Components.swift
3
+ // Pods
4
+ //
5
+ // Created by sophia on 24/1/25.
6
+ //
7
+
8
+ import SwiftUI
9
+
10
+ // MARK: - Enums
11
+
12
+ public enum TitlePosition {
13
+ case left, center
14
+ }
15
+
16
+ public enum HeaderType {
17
+ case `default`, extended, none
18
+ }
19
+
20
+ public enum AnimatedHeaderRatio {
21
+ case ratio16_9
22
+ case ratio1_1
23
+ case ratio3_2
24
+
25
+ var value: CGFloat {
26
+ switch self {
27
+ case .ratio16_9: return 16.0 / 9.0
28
+ case .ratio1_1: return 1.0
29
+ case .ratio3_2: return 3.0 / 2.0
30
+ }
31
+ }
32
+ }
33
+
34
+
35
+ // MARK: - Animated Header Config
36
+
37
+ public struct AnimatedHeader {
38
+ public var aspectRatio: AnimatedHeaderRatio = .ratio16_9
39
+ public var isSurface: Bool = true
40
+ public var composable: (_ scrollState: CGFloat) -> AnyView = { _ in AnyView(EmptyView()) }
41
+
42
+ public init(
43
+ aspectRatio: AnimatedHeaderRatio = .ratio16_9,
44
+ isSurface: Bool = true,
45
+ composable: @escaping (_ scrollState: CGFloat) -> AnyView = { _ in AnyView(EmptyView()) }
46
+ ) {
47
+ self.aspectRatio = aspectRatio
48
+ self.isSurface = isSurface
49
+ self.composable = composable
50
+ }
51
+ }
52
+
53
+ // MARK: - Utils
54
+
55
+ func safeAreaTopInset() -> CGFloat {
56
+ if #available(iOS 15.0, *) {
57
+ return UIApplication.shared.connectedScenes
58
+ .compactMap { ($0 as? UIWindowScene)?.keyWindow?.safeAreaInsets.top }
59
+ .first ?? 0
60
+ } else {
61
+ return UIApplication.shared.connectedScenes
62
+ .compactMap { ($0 as? UIWindowScene)?.windows.first?.safeAreaInsets.top }
63
+ .first ?? 0
64
+ }
65
+ }
66
+
67
+ // MARK: - Header Background
68
+
69
+ public struct HeaderBackground: View {
70
+ var headerType: HeaderType = .default
71
+ var scrollState: CGFloat
72
+ var headerTransparent: Bool = false
73
+ var fullScreenContent: Bool = false
74
+
75
+ public init(
76
+ headerType: HeaderType = .default,
77
+ scrollState: CGFloat = 0,
78
+ headerTransparent: Bool = false,
79
+ fullScreenContent: Bool = false
80
+ ) {
81
+ self.headerType = headerType
82
+ self.scrollState = scrollState
83
+ self.headerTransparent = headerTransparent
84
+ self.fullScreenContent = fullScreenContent
85
+ }
86
+
87
+ public var body: some View {
88
+ let statusBarHeight = safeAreaTopInset()
89
+ let opacity = max(0, 1 - scrollState / 200)
90
+ let height = fullScreenContent ? 0 : statusBarHeight + 52
91
+ let backgroundColor = headerTransparent ? Color.clear : Colors.black01
92
+
93
+ Group {
94
+ switch headerType {
95
+ case .default:
96
+ ZStack(alignment: .bottom) {
97
+ Rectangle()
98
+ .fill(backgroundColor)
99
+ .opacity(headerTransparent ? 0 : opacity)
100
+ .frame(height: height)
101
+ .shadow(color: Colors.black20.opacity(0.2), radius: 10, x: 0, y: -2)
102
+ .background(backgroundColor)
103
+ .overlay(
104
+ headerTransparent ? AnyView(EmptyView()) :
105
+ AnyView(
106
+ Rectangle()
107
+ .fill(LinearGradient(
108
+ gradient: Gradient(colors: [
109
+ Color(red: 1, green: 0.8, blue: 0.87),
110
+ Color(red: 1, green: 0.8, blue: 0.87).opacity(0.5)
111
+ ]),
112
+ startPoint: .top,
113
+ endPoint: .bottom))
114
+ .opacity(opacity)
115
+ .frame(height: height))
116
+ )
117
+ if !headerTransparent {
118
+ Rectangle()
119
+ .fill(Color.black.opacity(0.1))
120
+ .frame(height: 1)
121
+ .frame(maxWidth: .infinity)
122
+ }
123
+ }
124
+
125
+ case .extended:
126
+ ZStack {
127
+ if !headerTransparent {
128
+ Colors.black01
129
+ LinearGradient(
130
+ gradient: Gradient(colors: [
131
+ Color(red: 1, green: 0.8, blue: 0.87),
132
+ Color(red: 1, green: 0.8, blue: 0.87).opacity(0)
133
+ ]),
134
+ startPoint: .top,
135
+ endPoint: .bottom
136
+ )
137
+ .opacity(opacity)
138
+ .frame(height: 154)
139
+ }
140
+ }
141
+
142
+ case .none:
143
+ EmptyView()
144
+ }
145
+ }
146
+ }
147
+ }
148
+
149
+ // MARK: - Bottom-tab root preference
150
+
151
+ /// Set by `BottomTab` on appear so its enclosing `StackScreen` can detect that
152
+ /// it's hosting a self-contained bottom-tab surface and skip its own bottom
153
+ /// safe-area reservation — mirrors Compose's `Navigation.markAsBottomTabRoot()`
154
+ /// (`navigation.isBottomTabRoot`, read by `StackScreen.kt`'s `MainContent`).
155
+ /// Without this, `BottomTab`'s own internal safe-area handling gets an extra,
156
+ /// unwanted inset stacked on top of it by the outer `StackScreen`, pushing the
157
+ /// tab bar up higher than the true bottom inset.
158
+ public struct IsBottomTabRootKey: PreferenceKey {
159
+ public static var defaultValue: Bool = false
160
+ public static func reduce(value: inout Bool, nextValue: () -> Bool) {
161
+ value = value || nextValue()
162
+ }
163
+ }
164
+
165
+ // MARK: - Header View
166
+
167
+ public struct Header: View {
168
+ var headerType: HeaderType = .default
169
+ var titlePosition: TitlePosition
170
+ var title: String
171
+ /// Optional rich title (mirrors Compose's `HeaderTitle`); `.user` renders an
172
+ /// avatar group instead of `title`. Defaults to nil → plain `title` text.
173
+ var headerTitle: HeaderTitle?
174
+ var headerRight: (()->any View)? = {HeaderRight()}
175
+ var goBack: (() -> Void)?
176
+ var opacity: CGFloat = 1
177
+ var animatedHeader: AnimatedHeader?
178
+ var scrollState: CGFloat = 0
179
+ var inputSearchProps: InputSearchProps?
180
+ var tintColor: Color?
181
+ /// Title opacity; used by the animated search header to fade the title out on scroll.
182
+ var titleOpacity: CGFloat = 1
183
+
184
+ public init(
185
+ headerType: HeaderType = .default,
186
+ titlePosition: TitlePosition,
187
+ title: String,
188
+ headerTitle: HeaderTitle? = nil,
189
+ headerRight: (()->any View)? = {HeaderRight()},
190
+ goBack: (() -> Void)? = nil,
191
+ opacity: CGFloat = 1,
192
+ animatedHeader: AnimatedHeader? = nil,
193
+ scrollState: CGFloat = 0,
194
+ inputSearchProps: InputSearchProps? = nil,
195
+ tintColor: Color? = nil,
196
+ titleOpacity: CGFloat = 1
197
+ ) {
198
+ self.headerType = headerType
199
+ self.titlePosition = titlePosition
200
+ self.title = title
201
+ self.headerTitle = headerTitle
202
+ self.headerRight = headerRight
203
+ self.goBack = goBack
204
+ self.opacity = opacity
205
+ self.animatedHeader = animatedHeader
206
+ self.scrollState = scrollState
207
+ self.inputSearchProps = inputSearchProps
208
+ self.tintColor = tintColor
209
+ self.titleOpacity = titleOpacity
210
+ }
211
+
212
+ public var body: some View {
213
+
214
+ let backgroundButtonColor: Color = tintColor == Colors.black01 ? Colors.black20.opacity(0.6) : Colors.black01.opacity(0.6)
215
+ let borderColor: Color = tintColor == Colors.black01 ? Colors.black01.opacity(0.2) : Colors.black20.opacity(0.2)
216
+
217
+ if headerType != .none {
218
+ VStack(spacing: 0) {
219
+ ZStack {
220
+ // MARK: - Left and Right Controls
221
+ HStack {
222
+ if let goBack = goBack {
223
+ SwiftUI.Button(action: goBack) {
224
+ Circle()
225
+ .stroke(borderColor, lineWidth: 0.2)
226
+ .background(Circle().fill(backgroundButtonColor))
227
+ .frame(width: 28, height: 28)
228
+ .overlay(
229
+ Icon(source: "arrow-back", size: 20, color: tintColor ?? Colors.black17)
230
+ )
231
+ }
232
+ }
233
+
234
+ Spacer()
235
+
236
+ if let headerRight = headerRight {
237
+ AnyView(headerRight())
238
+ }
239
+ }
240
+ .padding(.horizontal, 12)
241
+
242
+ // MARK: - Title or Search
243
+ HStack {
244
+ if titlePosition == .left && goBack != nil {
245
+ Spacer().frame(width: 38)
246
+ }
247
+
248
+ if let inputProps = inputSearchProps {
249
+ InputSearch(props: inputProps)
250
+ } else if case let .user(userData)? = headerTitle {
251
+ if #available(iOS 16.0, *) {
252
+ HeaderUserView(userData)
253
+ }
254
+ } else {
255
+ MomoText(headerTitle?.defaultTitle ?? title, typography: .headerDefaultBold, color: tintColor ?? Colors.black17, maxLines: 1)
256
+ .opacity(titleOpacity)
257
+ .frame(maxWidth: titlePosition == .center ? UIScreen.main.bounds.width - 252 : nil)
258
+ .frame(maxWidth: titlePosition == .center ? .infinity : UIScreen.main.bounds.width - 172, alignment: titlePosition == .center ? .center : .leading)
259
+ }
260
+
261
+ Spacer()
262
+ }
263
+ .padding(.horizontal)
264
+ }
265
+ .background(Color.clear)
266
+ .frame(height: 52)
267
+ }
268
+ }
269
+ }
270
+ }
@@ -0,0 +1,22 @@
1
+ import Foundation
2
+
3
+ public protocol ComposeApi {
4
+ func request(funcName: String, params: Any, _ completion: ((String) -> Void)?)
5
+ func request(funcName: String, params: Any) -> String
6
+ }
7
+
8
+ // Default implementation
9
+ public class ComposeApiImpl: ComposeApi {
10
+ public static let shared = ComposeApiImpl()
11
+
12
+ private init() {}
13
+
14
+ public func request(funcName: String, params: Any, _ completion: ((String) -> Void)?) {
15
+ // Implement your API request logic here
16
+ }
17
+
18
+ public func request(funcName: String, params: Any) -> String {
19
+ // Implement your API request logic here
20
+ return ""
21
+ }
22
+ }