@momo-kits/native-kits 0.0.1-beta.5 → 0.0.2-alpha.1-debug

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (653) hide show
  1. package/CLAUDE.md +99 -0
  2. package/PUBLISH_GUIDE.md +675 -0
  3. package/README.md +184 -5
  4. package/build.gradle.kts +11 -0
  5. package/compose/build.gradle.kts +189 -0
  6. package/compose/build.gradle.kts.backup +189 -0
  7. package/compose/compose.podspec +47 -0
  8. package/compose/src/androidMain/kotlin/vn/momo/kits/const/HostFont.android.kt +19 -0
  9. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
  10. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/BackGesture.android.kt +12 -0
  11. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/OsFontScale.android.kt +7 -0
  12. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +151 -0
  13. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +52 -0
  14. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +124 -0
  15. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +183 -0
  16. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +207 -0
  17. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +39 -0
  18. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
  19. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
  20. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
  21. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +293 -0
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +831 -0
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Localize.kt +269 -0
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +110 -0
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +378 -0
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/WidgetContainer.kt +65 -0
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +82 -0
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +338 -0
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +175 -0
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +356 -0
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +113 -0
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +89 -0
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +128 -0
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +209 -0
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +542 -0
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +49 -0
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +86 -0
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +125 -0
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +231 -0
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +189 -0
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +475 -0
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +114 -0
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +266 -0
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +240 -0
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +223 -0
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +264 -0
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +185 -0
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +343 -0
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +84 -0
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +328 -0
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +97 -0
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +310 -0
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +59 -0
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +21 -0
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +90 -0
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +323 -0
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +220 -0
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +473 -0
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +122 -0
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +199 -0
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +91 -0
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +552 -0
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +88 -0
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +125 -0
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +207 -0
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +498 -0
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +176 -0
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +182 -0
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +193 -0
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +234 -0
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +188 -0
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +325 -0
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/const/HostFont.kt +16 -0
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitDesignSystem.kt +18 -0
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/const/KitFontScale.kt +22 -0
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +194 -0
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +282 -0
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +54 -0
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +51 -0
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +41 -0
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +52 -0
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +66 -0
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +104 -0
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +48 -0
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +299 -0
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/HostBackGestureBridge.kt +58 -0
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +129 -0
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +106 -0
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +211 -0
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +398 -0
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +595 -0
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackTransition.kt +148 -0
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/SwipeBackHaptic.kt +40 -0
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +184 -0
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +225 -0
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +169 -0
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +357 -0
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +83 -0
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderJourney.kt +106 -0
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderLocation.kt +75 -0
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +326 -0
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +39 -0
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +364 -0
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +132 -0
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/ToolkitRequests.kt +33 -0
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +135 -0
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/BackGesture.kt +12 -0
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +91 -0
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/OsFontScale.kt +9 -0
  126. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +71 -0
  127. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
  128. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +55 -0
  129. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
  130. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +105 -0
  131. package/compose/src/commonTest/kotlin/vn/momo/kits/navigation/component/ToolkitRequestsTest.kt +47 -0
  132. package/compose/src/iosMain/kotlin/vn/momo/kits/const/HostFont.ios.kt +40 -0
  133. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/HostBackGesture.ios.kt +45 -0
  134. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +36 -0
  135. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/BackGesture.ios.kt +38 -0
  136. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/OsFontScale.ios.kt +66 -0
  137. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +213 -0
  138. package/gradle/libs.versions.toml +71 -0
  139. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  140. package/gradle/wrapper/gradle-wrapper.properties +8 -0
  141. package/gradle.properties +26 -0
  142. package/gradlew +252 -0
  143. package/gradlew.bat +94 -0
  144. package/ios/Application/ApplicationEnvironment.swift +71 -0
  145. package/ios/Application/Components.swift +270 -0
  146. package/ios/Application/ComposeApi.swift +22 -0
  147. package/ios/Application/FloatingButton.swift +174 -0
  148. package/ios/Application/HeaderRight.swift +306 -0
  149. package/ios/Application/LanguageSource.swift +93 -0
  150. package/ios/Application/Localize.swift +378 -0
  151. package/ios/Application/LocalizeModifier.swift +30 -0
  152. package/ios/Application/MaxApi.swift +18 -0
  153. package/ios/Application/Navigation/BottomTab/BottomTab.swift +104 -0
  154. package/ios/Application/Navigation/BottomTab/BottomTabBar.swift +215 -0
  155. package/ios/Application/Navigation/BottomTab/CurvedContainer.swift +65 -0
  156. package/ios/Application/Navigation/HeaderBackProps.swift +66 -0
  157. package/ios/Application/Navigation/HeaderTitle.swift +57 -0
  158. package/ios/Application/Navigation/HeaderUser.swift +209 -0
  159. package/ios/Application/Navigation/NavigationContainer.swift +213 -0
  160. package/ios/Application/Navigation/NavigationOptions.swift +109 -0
  161. package/ios/Application/Navigation/Navigator.swift +453 -0
  162. package/ios/Application/Navigation/NavigatorManager.swift +22 -0
  163. package/ios/Application/Navigation/Overplay/BottomSheet.swift +256 -0
  164. package/ios/Application/Navigation/Overplay/ModalScreen.swift +74 -0
  165. package/ios/Application/Navigation/Overplay/SnackBar.swift +144 -0
  166. package/ios/Application/Navigation/Tracking/ScreenTracker.swift +117 -0
  167. package/ios/Application/Navigation/component/Header.swift +178 -0
  168. package/ios/Application/Navigation/component/HeaderBackground.swift +83 -0
  169. package/ios/Application/Navigation/component/HeaderColor.swift +65 -0
  170. package/ios/Application/Navigation/component/HeaderRightWidthKey.swift +11 -0
  171. package/ios/Application/Navigation/component/NavigationFooter.swift +90 -0
  172. package/ios/Application/Navigation/component/NavigationHeaderRight.swift +196 -0
  173. package/ios/Application/Screen.swift +250 -0
  174. package/ios/Application/StackScreen.swift +492 -0
  175. package/ios/Avatar/Avatar.swift +193 -0
  176. package/ios/Badge/Badge.swift +84 -0
  177. package/ios/Badge/BadgeDot.swift +31 -0
  178. package/ios/Badge/BadgeRibbon.swift +319 -0
  179. package/ios/BaselineView/BaselineView.swift +163 -0
  180. package/ios/Button/Button.swift +232 -84
  181. package/ios/CalculatorKeyboard/CalculatorKeyboard.swift +126 -0
  182. package/ios/Carousel/Carousel.swift +196 -0
  183. package/ios/Checkbox/Checkbox.swift +59 -20
  184. package/ios/Chip/Chip.swift +120 -0
  185. package/ios/Collapse/Collapse.swift +192 -0
  186. package/ios/Colors+Radius+Spacing/Colors.swift +42 -37
  187. package/ios/Colors+Radius+Spacing/Spacing.swift +3 -1
  188. package/ios/Colors+Radius+Spacing/Theme.swift +295 -0
  189. package/ios/DateTimePicker/DateTimePicker.swift +212 -0
  190. package/ios/DateTimePicker/DateTimePickerTypes.swift +55 -0
  191. package/ios/DateTimePicker/DateTimePickerUtils.swift +167 -0
  192. package/ios/DateTimePicker/WheelPicker.swift +165 -0
  193. package/ios/Divider/Divider.swift +16 -0
  194. package/ios/Extensions/ActiveOpacityButtonStyle.swift +14 -0
  195. package/ios/Extensions/Color++.swift +32 -0
  196. package/ios/Icon/Icon.swift +69 -0
  197. package/ios/IconButton/IconButton.swift +140 -0
  198. package/ios/Image/Image.swift +36 -9
  199. package/ios/Information/Information.swift +156 -0
  200. package/ios/Input/ErrorView.swift +58 -0
  201. package/ios/Input/Input.swift +455 -121
  202. package/ios/Input/InputPhoneNumber.swift +192 -0
  203. package/ios/Input/InputSearch.swift +301 -0
  204. package/ios/Input/InputTextArea.swift +318 -0
  205. package/ios/InputDropDown/InputDropDown.swift +201 -0
  206. package/ios/InputMoney/InputMoney.swift +405 -0
  207. package/ios/InputOTP/InputOTP.swift +211 -0
  208. package/ios/Layout/GridContext.swift +30 -0
  209. package/ios/Layout/Item.swift +42 -0
  210. package/ios/Layout/Section.swift +134 -0
  211. package/ios/Loader/Loader.swift +113 -0
  212. package/ios/Lottie/LottieView.swift +86 -0
  213. package/ios/MoMoUIKits.podspec +5 -0
  214. package/ios/OTPKeyboard/KeyboardButton.swift +13 -5
  215. package/ios/Pagination/PaginationDot.swift +61 -0
  216. package/ios/Pagination/PaginationNumber.swift +35 -0
  217. package/ios/Pagination/PaginationScroll.swift +101 -0
  218. package/ios/Pagination/PaginationWhiteDot.swift +37 -0
  219. package/ios/Popup/PopupDisplay.swift +195 -94
  220. package/ios/Popup/PopupInput.swift +92 -0
  221. package/ios/Popup/PopupNotify.swift +219 -0
  222. package/ios/Popup/PopupPromotion.swift +74 -0
  223. package/ios/ProgressInfo/ProgressInfo.swift +297 -0
  224. package/ios/Radio/Radio.swift +69 -0
  225. package/ios/Rating/Rating.swift +83 -0
  226. package/{example/ios/Example/Preview Content/Preview Assets.xcassets/Contents.json → ios/Resources/MoMoUIKitsColors.xcassets/AccentColor.colorset/Contents.json} +5 -0
  227. package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Text.colorset/Contents.json +3 -3
  228. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/Contents.json +9 -0
  229. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-default.colorset/Contents.json +38 -0
  230. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-disable.colorset/Contents.json +38 -0
  231. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-pressed.colorset/Contents.json +38 -0
  232. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-selected.colorset/Contents.json +38 -0
  233. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-surface.colorset/Contents.json +38 -0
  234. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/background-tonal.colorset/Contents.json +38 -0
  235. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/border-default.colorset/Contents.json +38 -0
  236. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/border-disable.colorset/Contents.json +38 -0
  237. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/gradient.colorset/Contents.json +38 -0
  238. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/primary.colorset/Contents.json +38 -0
  239. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/secondary.colorset/Contents.json +38 -0
  240. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-container.colorset/Contents.json +38 -0
  241. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-primary.colorset/Contents.json +38 -0
  242. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/success-secondary.colorset/Contents.json +38 -0
  243. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-default.colorset/Contents.json +38 -0
  244. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-disable.colorset/Contents.json +38 -0
  245. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-hint.colorset/Contents.json +38 -0
  246. package/ios/Resources/MoMoUIKitsColors.xcassets/ThemeColors/text-secondary.colorset/Contents.json +38 -0
  247. package/ios/ScrollIndicator/ScrollIndicator.swift +110 -0
  248. package/ios/Skeleton/Skeleton.swift +99 -0
  249. package/ios/Slider/Slider.swift +237 -0
  250. package/ios/StatusBarTap/StatusBarTap.h +13 -0
  251. package/ios/StatusBarTap/StatusBarTap.m +75 -0
  252. package/ios/Stepper/Stepper.swift +221 -0
  253. package/ios/Steps/Steps.swift +467 -0
  254. package/ios/SuggestAction/SuggestAction.swift +100 -0
  255. package/ios/Swipeable/SwipeCell.swift +226 -31
  256. package/ios/Swipeable/SwipeCellModel.swift +21 -0
  257. package/ios/Switch/Switch.swift +53 -28
  258. package/ios/TabView/TabView.swift +534 -0
  259. package/ios/Tag/Tag.swift +99 -0
  260. package/ios/Template/Logo/Logo.swift +75 -0
  261. package/ios/Template/TrustBanner/TrustBanner.swift +123 -0
  262. package/ios/Title/Title.swift +270 -0
  263. package/ios/Tooltip/Tooltip.swift +486 -0
  264. package/ios/Typography/FontScale.swift +103 -0
  265. package/ios/Typography/FontScaleStore.swift +58 -0
  266. package/ios/Typography/KitDesignSystem.swift +17 -0
  267. package/ios/Typography/Text.swift +262 -0
  268. package/ios/Typography/Typography.swift +80 -23
  269. package/ios/Uploader/Uploader.swift +174 -0
  270. package/ios/native-kits.podspec +73 -15
  271. package/ios-demo/MoMoUIKitsDemo.podspec +20 -0
  272. package/ios-demo/README.md +120 -0
  273. package/ios-demo/Resources/dot_loading.json +558 -0
  274. package/ios-demo/Resources/icon.json +4052 -0
  275. package/ios-demo/Resources/lottie_circle_loader.json +1 -0
  276. package/ios-demo/Sources/MoMoUIKitsDemo/DemoScaffold.swift +48 -0
  277. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsBadgeDemoView.swift +25 -0
  278. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsButtonDemoView.swift +26 -0
  279. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsCheckboxDemoView.swift +19 -0
  280. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsChipDemoView.swift +33 -0
  281. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsInputDemoView.swift +48 -0
  282. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsPopupDemoView.swift +21 -0
  283. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsRadioDemoView.swift +17 -0
  284. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsTypographyDemoView.swift +28 -0
  285. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoContext.swift +31 -0
  286. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoFactory.swift +24 -0
  287. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AnimatedHeaderDemo.swift +110 -0
  288. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AvatarDemo.swift +107 -0
  289. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BadgeDemo.swift +75 -0
  290. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BaselineView.swift +117 -0
  291. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BottomTabDemo.swift +89 -0
  292. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ButtonDemo.swift +108 -0
  293. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CarouselDemo.swift +96 -0
  294. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CheckboxDemo.swift +60 -0
  295. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ChipDemo.swift +76 -0
  296. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CollapseDemo.swift +102 -0
  297. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +107 -0
  298. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DateTimePickerDemo.swift +100 -0
  299. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DemoScreen.swift +420 -0
  300. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DividerDemo.swift +56 -0
  301. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/HeaderUserDemo.swift +49 -0
  302. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +276 -0
  303. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconButtonDemo.swift +93 -0
  304. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconDemo.swift +81 -0
  305. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ImageDemo.swift +65 -0
  306. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InformationDemo.swift +96 -0
  307. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDemo.swift +117 -0
  308. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDropDownDemo.swift +94 -0
  309. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputMoneyDemo.swift +94 -0
  310. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputOTPDemo.swift +88 -0
  311. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputPhoneNumberDemo.swift +120 -0
  312. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputSearchDemo.swift +85 -0
  313. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputTextAreaDemo.swift +87 -0
  314. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LoaderDemo.swift +73 -0
  315. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LocalizeDemo.swift +235 -0
  316. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +241 -0
  317. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PaginationDemo.swift +68 -0
  318. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PlaygroundData.swift +76 -0
  319. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +175 -0
  320. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +95 -0
  321. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +67 -0
  322. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ProgressInfoDemo.swift +101 -0
  323. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RadioDemo.swift +64 -0
  324. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RatingDemo.swift +68 -0
  325. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SectionDemo.swift +83 -0
  326. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SkeletonDemo.swift +61 -0
  327. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SliderDemo.swift +90 -0
  328. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SnackBarDemo.swift +82 -0
  329. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepperDemo.swift +93 -0
  330. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepsDemo.swift +114 -0
  331. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SuggestActionDemo.swift +90 -0
  332. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwipeDemo.swift +107 -0
  333. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwitchDemo.swift +58 -0
  334. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TabViewDemo.swift +114 -0
  335. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TagDemo.swift +86 -0
  336. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ThemeDemo.swift +181 -0
  337. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TitleDemo.swift +104 -0
  338. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TooltipDemo.swift +118 -0
  339. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TypographyDemo.swift +87 -0
  340. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/UploaderDemo.swift +85 -0
  341. package/ios-demo/Sources/MoMoUIKitsDemo/SwiftUIDemoBrowserView.swift +53 -0
  342. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoModels.swift +15 -0
  343. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoRegistry.swift +73 -0
  344. package/package.json +6 -6
  345. package/publish.sh +554 -20
  346. package/scripts/gen-ios-color.mjs +136 -0
  347. package/settings.gradle.kts +64 -0
  348. package/CODE_OF_CONDUCT.md +0 -133
  349. package/CONTRIBUTING.md +0 -114
  350. package/LICENSE +0 -20
  351. package/android/build.gradle +0 -82
  352. package/android/gradle.properties +0 -5
  353. package/android/src/main/AndroidManifest.xml +0 -4
  354. package/android/src/main/java/com/momoplatform/nativekits/NativeKitsPackage.kt +0 -17
  355. package/android/src/main/java/com/momoplatform/nativekits/NativeKitsViewManager.kt +0 -20
  356. package/example/ios/Example/Assets.xcassets/AppIcon.appiconset/Contents.json +0 -63
  357. package/example/ios/Example/ComponentDetail.swift +0 -35
  358. package/example/ios/Example/ComponentItem.swift +0 -24
  359. package/example/ios/Example/ComponentModel.swift +0 -38
  360. package/example/ios/Example/ContentView.swift +0 -39
  361. package/example/ios/Example/Example.entitlements +0 -10
  362. package/example/ios/Example/Foundation/ButtonDemo.swift +0 -80
  363. package/example/ios/Example/Foundation/ImageDemo.swift +0 -43
  364. package/example/ios/Example/Foundation/Popup/ActionSheets.swift +0 -136
  365. package/example/ios/Example/Foundation/Popup/Floats.swift +0 -127
  366. package/example/ios/Example/Foundation/Popup/Popups.swift +0 -51
  367. package/example/ios/Example/Foundation/PopupDemo.swift +0 -389
  368. package/example/ios/Example/Foundation/TextInputDemo.swift +0 -36
  369. package/example/ios/Example/Foundation/TypographyDemo.swift +0 -53
  370. package/example/ios/Example/Foundation.swift +0 -26
  371. package/example/ios/Example/Info.plist +0 -18
  372. package/example/ios/Example/Library/CheckboxDemo.swift +0 -19
  373. package/example/ios/Example/Library/SwipeableDemo.swift +0 -105
  374. package/example/ios/Example/Library/SwitchDemo.swift +0 -19
  375. package/example/ios/Example/Library.swift +0 -26
  376. package/example/ios/Example/Main.swift +0 -27
  377. package/example/ios/Example/Overview.swift +0 -20
  378. package/example/ios/Example/Resource/SFProText-Black.ttf +0 -0
  379. package/example/ios/Example/Resource/SFProText-Bold.ttf +0 -0
  380. package/example/ios/Example/Resource/SFProText-Heavy.ttf +0 -0
  381. package/example/ios/Example/Resource/SFProText-Light.ttf +0 -0
  382. package/example/ios/Example/Resource/SFProText-Medium.ttf +0 -0
  383. package/example/ios/Example/Resource/SFProText-Regular.ttf +0 -0
  384. package/example/ios/Example/Resource/SFProText-Semibold.ttf +0 -0
  385. package/example/ios/Example/Resource/SFProText-Thin.ttf +0 -0
  386. package/example/ios/Example/Resource/SFProText-Ultralight.ttf +0 -0
  387. package/example/ios/Example/Resource/foundation.json +0 -33
  388. package/example/ios/Example/Resource/library.json +0 -18
  389. package/example/ios/Example/Utils.swift +0 -30
  390. package/example/ios/Example/ViewModifier/DarkViewModifier.swift +0 -22
  391. package/example/ios/Example.xcodeproj/project.pbxproj +0 -581
  392. package/example/ios/Example.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  393. package/example/ios/Example.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  394. package/example/ios/Example.xcodeproj/project.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  395. package/example/ios/Example.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  396. package/example/ios/Example.xcworkspace/contents.xcworkspacedata +0 -10
  397. package/example/ios/Example.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  398. package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  399. package/example/ios/Example.xcworkspace/xcuserdata/wem.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
  400. package/example/ios/Podfile +0 -7
  401. package/example/ios/Podfile.lock +0 -35
  402. package/example/ios/Pods/Local Podspecs/MoMoUIKits.podspec.json +0 -37
  403. package/example/ios/Pods/Manifest.lock +0 -35
  404. package/example/ios/Pods/Pods.xcodeproj/project.pbxproj +0 -2047
  405. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
  406. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
  407. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
  408. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
  409. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
  410. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/wem.xcuserdatad/xcschemes/xcschememanagement.plist +0 -46
  411. package/example/ios/Pods/SDWebImage/LICENSE +0 -20
  412. package/example/ios/Pods/SDWebImage/README.md +0 -352
  413. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.h +0 -340
  414. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSButton+WebCache.m +0 -172
  415. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.h +0 -63
  416. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSData+ImageContentType.m +0 -165
  417. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.h +0 -67
  418. package/example/ios/Pods/SDWebImage/SDWebImage/Core/NSImage+Compatibility.m +0 -120
  419. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.h +0 -114
  420. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImage.m +0 -392
  421. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.h +0 -112
  422. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImagePlayer.m +0 -420
  423. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.h +0 -23
  424. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageRep.m +0 -133
  425. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.h +0 -168
  426. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView+WebCache.m +0 -79
  427. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.h +0 -110
  428. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDAnimatedImageView.m +0 -540
  429. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.h +0 -145
  430. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDDiskCache.m +0 -326
  431. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.h +0 -73
  432. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDGraphicsImageRenderer.m +0 -256
  433. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.h +0 -19
  434. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAPNGCoder.m +0 -58
  435. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.h +0 -23
  436. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageAWebPCoder.m +0 -98
  437. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.h +0 -450
  438. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCache.m +0 -1030
  439. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.h +0 -153
  440. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheConfig.m +0 -68
  441. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.h +0 -156
  442. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCacheDefine.m +0 -138
  443. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.h +0 -81
  444. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCachesManager.m +0 -556
  445. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.h +0 -297
  446. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoder.m +0 -26
  447. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.h +0 -153
  448. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCoderHelper.m +0 -822
  449. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.h +0 -58
  450. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageCodersManager.m +0 -130
  451. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.h +0 -36
  452. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageFrame.m +0 -28
  453. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.h +0 -22
  454. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGIFCoder.m +0 -58
  455. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.h +0 -28
  456. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageGraphics.m +0 -127
  457. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.h +0 -25
  458. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageHEICCoder.m +0 -101
  459. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.h +0 -58
  460. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOAnimatedCoder.m +0 -807
  461. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.h +0 -30
  462. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageIOCoder.m +0 -420
  463. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.h +0 -146
  464. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoader.m +0 -170
  465. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.h +0 -40
  466. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageLoadersManager.m +0 -123
  467. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.h +0 -241
  468. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDImageTransformer.m +0 -331
  469. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.h +0 -78
  470. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDMemoryCache.m +0 -158
  471. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.h +0 -32
  472. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheKeyFilter.m +0 -39
  473. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.h +0 -36
  474. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCacheSerializer.m +0 -39
  475. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.h +0 -95
  476. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageCompat.m +0 -17
  477. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.h +0 -352
  478. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDefine.m +0 -149
  479. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.h +0 -314
  480. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloader.m +0 -658
  481. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.h +0 -113
  482. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderConfig.m +0 -60
  483. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.h +0 -49
  484. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderDecryptor.m +0 -55
  485. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.h +0 -191
  486. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderOperation.m +0 -722
  487. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.h +0 -69
  488. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderRequestModifier.m +0 -71
  489. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.h +0 -69
  490. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageDownloaderResponseModifier.m +0 -73
  491. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.h +0 -32
  492. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageError.m +0 -16
  493. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.h +0 -115
  494. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageIndicator.m +0 -275
  495. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.h +0 -290
  496. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageManager.m +0 -775
  497. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.h +0 -27
  498. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOperation.m +0 -14
  499. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.h +0 -72
  500. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageOptionsProcessor.m +0 -59
  501. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.h +0 -143
  502. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImagePrefetcher.m +0 -303
  503. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.h +0 -131
  504. package/example/ios/Pods/SDWebImage/SDWebImage/Core/SDWebImageTransition.m +0 -194
  505. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.h +0 -387
  506. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIButton+WebCache.m +0 -234
  507. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.h +0 -24
  508. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ExtendedCacheData.m +0 -23
  509. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.h +0 -46
  510. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+ForceDecode.m +0 -60
  511. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.h +0 -26
  512. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+GIF.m +0 -22
  513. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.h +0 -27
  514. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MemoryCacheCost.m +0 -47
  515. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.h +0 -89
  516. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Metadata.m +0 -221
  517. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.h +0 -80
  518. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+MultiFormat.m +0 -47
  519. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.h +0 -146
  520. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImage+Transform.m +0 -824
  521. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.h +0 -129
  522. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+HighlightedWebCache.m +0 -76
  523. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.h +0 -194
  524. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIImageView+WebCache.m +0 -67
  525. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.h +0 -110
  526. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCache.m +0 -446
  527. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.h +0 -48
  528. package/example/ios/Pods/SDWebImage/SDWebImage/Core/UIView+WebCacheOperation.m +0 -82
  529. package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.h +0 -24
  530. package/example/ios/Pods/SDWebImage/SDWebImage/Private/NSBezierPath+SDRoundedCorners.m +0 -42
  531. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.h +0 -14
  532. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAssociatedObject.m +0 -29
  533. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.h +0 -21
  534. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDAsyncBlockOperation.m +0 -92
  535. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.h +0 -18
  536. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDeviceHelper.m +0 -32
  537. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.h +0 -29
  538. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDDisplayLink.m +0 -227
  539. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.h +0 -19
  540. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDFileAttributeHelper.m +0 -127
  541. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.h +0 -23
  542. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageAssetManager.m +0 -164
  543. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.h +0 -21
  544. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageCachesManagerOperation.m +0 -83
  545. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDImageIOAnimatedCoderInternal.h +0 -39
  546. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.h +0 -122
  547. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDInternalMacros.m +0 -13
  548. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.h +0 -20
  549. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWeakProxy.m +0 -79
  550. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDWebImageTransitionInternal.h +0 -19
  551. package/example/ios/Pods/SDWebImage/SDWebImage/Private/SDmetamacros.h +0 -667
  552. package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.h +0 -18
  553. package/example/ios/Pods/SDWebImage/SDWebImage/Private/UIColor+SDHexString.m +0 -42
  554. package/example/ios/Pods/SDWebImage/WebImage/SDWebImage.h +0 -89
  555. package/example/ios/Pods/SDWebImageSwiftUI/LICENSE +0 -19
  556. package/example/ios/Pods/SDWebImageSwiftUI/README.md +0 -690
  557. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/AnimatedImage.swift +0 -870
  558. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Backport.swift +0 -59
  559. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/OnChange.swift +0 -52
  560. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/Overlay.swift +0 -124
  561. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Backports/StateObject.swift +0 -151
  562. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Image.swift +0 -78
  563. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageManager.swift +0 -132
  564. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImagePlayer.swift +0 -122
  565. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/ImageViewWrapper.swift +0 -133
  566. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ActivityIndicator.swift +0 -82
  567. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/Indicator.swift +0 -97
  568. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Indicator/ProgressIndicator.swift +0 -114
  569. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SDWebImageSwiftUI.swift +0 -64
  570. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/SwiftUICompatibility.swift +0 -92
  571. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/Transition/Transition.swift +0 -93
  572. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Classes/WebImage.swift +0 -509
  573. package/example/ios/Pods/SDWebImageSwiftUI/SDWebImageSwiftUI/Module/SDWebImageSwiftUI.h +0 -15
  574. package/example/ios/Pods/SkeletonUI/LICENSE +0 -21
  575. package/example/ios/Pods/SkeletonUI/README.md +0 -137
  576. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AngleInteractor.swift +0 -29
  577. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Angle/AnglePresenter.swift +0 -7
  578. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Animation/AnimationInteractor.swift +0 -56
  579. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearanceInteractor.swift +0 -58
  580. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Appearance/AppearancePresenter.swift +0 -5
  581. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ClosedRange+Normalize.swift +0 -16
  582. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Image+OptionalType.swift +0 -102
  583. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/ModifiedContent+SkeletonModifier.swift +0 -26
  584. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Optional+OptionalType.swift +0 -5
  585. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/SecureField+OptionalType.swift +0 -19
  586. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Text+OptionalType.swift +0 -27
  587. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/TextField+OptionalType.swift +0 -35
  588. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/Toggle+OptionalType.swift +0 -29
  589. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/UnitPoint+Angle.swift +0 -8
  590. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Extensions/View+SkeletonModifier.swift +0 -8
  591. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Modifiers/SkeletonModifier.swift +0 -52
  592. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilineInteractor.swift +0 -41
  593. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Multiline/MultilinePresenter.swift +0 -9
  594. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityInteractor.swift +0 -29
  595. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Opacity/OpacityPresenter.swift +0 -7
  596. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionInteractor.swift +0 -29
  597. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Position/PositionPresenter.swift +0 -7
  598. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Protocols/OptionalType.swift +0 -4
  599. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusInteractor.swift +0 -29
  600. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Radius/RadiusPresenter.swift +0 -7
  601. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapeInteractor.swift +0 -33
  602. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Shape/ShapePresenter.swift +0 -5
  603. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonForEach.swift +0 -20
  604. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonInteractor.swift +0 -27
  605. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonList.swift +0 -20
  606. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonPresenter.swift +0 -15
  607. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonShape.swift +0 -64
  608. package/example/ios/Pods/SkeletonUI/Sources/SkeletonUI/Skeleton/SkeletonView.swift +0 -25
  609. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-dummy.m +0 -5
  610. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-prefix.pch +0 -12
  611. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits-umbrella.h +0 -16
  612. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.debug.xcconfig +0 -15
  613. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.modulemap +0 -6
  614. package/example/ios/Pods/Target Support Files/MoMoUIKits/MoMoUIKits.release.xcconfig +0 -15
  615. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.markdown +0 -75
  616. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-acknowledgements.plist +0 -119
  617. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-dummy.m +0 -5
  618. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example-umbrella.h +0 -16
  619. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.debug.xcconfig +0 -15
  620. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.modulemap +0 -6
  621. package/example/ios/Pods/Target Support Files/Pods-Example/Pods-Example.release.xcconfig +0 -15
  622. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-dummy.m +0 -5
  623. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-prefix.pch +0 -12
  624. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage-umbrella.h +0 -75
  625. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.debug.xcconfig +0 -14
  626. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.modulemap +0 -6
  627. package/example/ios/Pods/Target Support Files/SDWebImage/SDWebImage.release.xcconfig +0 -14
  628. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-dummy.m +0 -5
  629. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-prefix.pch +0 -12
  630. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI-umbrella.h +0 -17
  631. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.debug.xcconfig +0 -17
  632. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.modulemap +0 -6
  633. package/example/ios/Pods/Target Support Files/SDWebImageSwiftUI/SDWebImageSwiftUI.release.xcconfig +0 -17
  634. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-dummy.m +0 -5
  635. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-prefix.pch +0 -12
  636. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI-umbrella.h +0 -16
  637. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.debug.xcconfig +0 -12
  638. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.modulemap +0 -6
  639. package/example/ios/Pods/Target Support Files/SkeletonUI/SkeletonUI.release.xcconfig +0 -12
  640. package/ios/Extensions/View++.swift +0 -9
  641. package/ios/Theme.md +0 -18
  642. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Background.colorset/Contents.json +0 -0
  643. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Border.colorset/Contents.json +0 -0
  644. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Card.colorset/Contents.json +0 -0
  645. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Contents.json +0 -0
  646. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Error.colorset/Contents.json +0 -0
  647. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Primary.colorset/Contents.json +0 -0
  648. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/PrimaryDark.colorset/Contents.json +0 -0
  649. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/PrimaryLight.colorset/Contents.json +0 -0
  650. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Secondary.colorset/Contents.json +0 -0
  651. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Success.colorset/Contents.json +0 -0
  652. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/TextSecondary.colorset/Contents.json +0 -0
  653. /package/{example/ios/Example/Assets.xcassets → ios/Resources/MoMoUIKitsColors.xcassets}/Warning.colorset/Contents.json +0 -0
@@ -1,824 +0,0 @@
1
- /*
2
- * This file is part of the SDWebImage package.
3
- * (c) Olivier Poitrey <rs@dailymotion.com>
4
- *
5
- * For the full copyright and license information, please view the LICENSE
6
- * file that was distributed with this source code.
7
- */
8
-
9
- #import "UIImage+Transform.h"
10
- #import "NSImage+Compatibility.h"
11
- #import "SDImageGraphics.h"
12
- #import "SDGraphicsImageRenderer.h"
13
- #import "NSBezierPath+SDRoundedCorners.h"
14
- #import <Accelerate/Accelerate.h>
15
- #if SD_UIKIT || SD_MAC
16
- #import <CoreImage/CoreImage.h>
17
- #endif
18
-
19
- static inline CGRect SDCGRectFitWithScaleMode(CGRect rect, CGSize size, SDImageScaleMode scaleMode) {
20
- rect = CGRectStandardize(rect);
21
- size.width = size.width < 0 ? -size.width : size.width;
22
- size.height = size.height < 0 ? -size.height : size.height;
23
- CGPoint center = CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect));
24
- switch (scaleMode) {
25
- case SDImageScaleModeAspectFit:
26
- case SDImageScaleModeAspectFill: {
27
- if (rect.size.width < 0.01 || rect.size.height < 0.01 ||
28
- size.width < 0.01 || size.height < 0.01) {
29
- rect.origin = center;
30
- rect.size = CGSizeZero;
31
- } else {
32
- CGFloat scale;
33
- if (scaleMode == SDImageScaleModeAspectFit) {
34
- if (size.width / size.height < rect.size.width / rect.size.height) {
35
- scale = rect.size.height / size.height;
36
- } else {
37
- scale = rect.size.width / size.width;
38
- }
39
- } else {
40
- if (size.width / size.height < rect.size.width / rect.size.height) {
41
- scale = rect.size.width / size.width;
42
- } else {
43
- scale = rect.size.height / size.height;
44
- }
45
- }
46
- size.width *= scale;
47
- size.height *= scale;
48
- rect.size = size;
49
- rect.origin = CGPointMake(center.x - size.width * 0.5, center.y - size.height * 0.5);
50
- }
51
- } break;
52
- case SDImageScaleModeFill:
53
- default: {
54
- rect = rect;
55
- }
56
- }
57
- return rect;
58
- }
59
-
60
- static inline UIColor * SDGetColorFromGrayscale(Pixel_88 pixel, CGBitmapInfo bitmapInfo) {
61
- // Get alpha info, byteOrder info
62
- CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask;
63
- CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask;
64
- CGFloat w = 0, a = 1;
65
-
66
- BOOL byteOrderNormal = NO;
67
- switch (byteOrderInfo) {
68
- case kCGBitmapByteOrderDefault: {
69
- byteOrderNormal = YES;
70
- } break;
71
- case kCGBitmapByteOrder32Little: {
72
- } break;
73
- case kCGBitmapByteOrder32Big: {
74
- byteOrderNormal = YES;
75
- } break;
76
- default: break;
77
- }
78
- switch (alphaInfo) {
79
- case kCGImageAlphaPremultipliedFirst:
80
- case kCGImageAlphaFirst: {
81
- if (byteOrderNormal) {
82
- // AW
83
- a = pixel[0] / 255.0;
84
- w = pixel[1] / 255.0;
85
- } else {
86
- // WA
87
- w = pixel[0] / 255.0;
88
- a = pixel[1] / 255.0;
89
- }
90
- }
91
- break;
92
- case kCGImageAlphaPremultipliedLast:
93
- case kCGImageAlphaLast: {
94
- if (byteOrderNormal) {
95
- // WA
96
- w = pixel[0] / 255.0;
97
- a = pixel[1] / 255.0;
98
- } else {
99
- // AW
100
- a = pixel[0] / 255.0;
101
- w = pixel[1] / 255.0;
102
- }
103
- }
104
- break;
105
- case kCGImageAlphaNone: {
106
- // W
107
- w = pixel[0] / 255.0;
108
- }
109
- break;
110
- case kCGImageAlphaNoneSkipLast: {
111
- if (byteOrderNormal) {
112
- // WX
113
- w = pixel[0] / 255.0;
114
- } else {
115
- // XW
116
- a = pixel[1] / 255.0;
117
- }
118
- }
119
- break;
120
- case kCGImageAlphaNoneSkipFirst: {
121
- if (byteOrderNormal) {
122
- // XW
123
- a = pixel[1] / 255.0;
124
- } else {
125
- // WX
126
- a = pixel[0] / 255.0;
127
- }
128
- }
129
- break;
130
- case kCGImageAlphaOnly: {
131
- // A
132
- a = pixel[0] / 255.0;
133
- }
134
- break;
135
- default:
136
- break;
137
- }
138
-
139
- return [UIColor colorWithWhite:w alpha:a];
140
- }
141
-
142
- static inline UIColor * SDGetColorFromRGBA(Pixel_8888 pixel, CGBitmapInfo bitmapInfo) {
143
- // Get alpha info, byteOrder info
144
- CGImageAlphaInfo alphaInfo = bitmapInfo & kCGBitmapAlphaInfoMask;
145
- CGBitmapInfo byteOrderInfo = bitmapInfo & kCGBitmapByteOrderMask;
146
- CGFloat r = 0, g = 0, b = 0, a = 1;
147
-
148
- BOOL byteOrderNormal = NO;
149
- switch (byteOrderInfo) {
150
- case kCGBitmapByteOrderDefault: {
151
- byteOrderNormal = YES;
152
- } break;
153
- case kCGBitmapByteOrder32Little: {
154
- } break;
155
- case kCGBitmapByteOrder32Big: {
156
- byteOrderNormal = YES;
157
- } break;
158
- default: break;
159
- }
160
- switch (alphaInfo) {
161
- case kCGImageAlphaPremultipliedFirst:
162
- case kCGImageAlphaFirst: {
163
- if (byteOrderNormal) {
164
- // ARGB8888
165
- a = pixel[0] / 255.0;
166
- r = pixel[1] / 255.0;
167
- g = pixel[2] / 255.0;
168
- b = pixel[3] / 255.0;
169
- } else {
170
- // BGRA8888
171
- b = pixel[0] / 255.0;
172
- g = pixel[1] / 255.0;
173
- r = pixel[2] / 255.0;
174
- a = pixel[3] / 255.0;
175
- }
176
- }
177
- break;
178
- case kCGImageAlphaPremultipliedLast:
179
- case kCGImageAlphaLast: {
180
- if (byteOrderNormal) {
181
- // RGBA8888
182
- r = pixel[0] / 255.0;
183
- g = pixel[1] / 255.0;
184
- b = pixel[2] / 255.0;
185
- a = pixel[3] / 255.0;
186
- } else {
187
- // ABGR8888
188
- a = pixel[0] / 255.0;
189
- b = pixel[1] / 255.0;
190
- g = pixel[2] / 255.0;
191
- r = pixel[3] / 255.0;
192
- }
193
- }
194
- break;
195
- case kCGImageAlphaNone: {
196
- if (byteOrderNormal) {
197
- // RGB
198
- r = pixel[0] / 255.0;
199
- g = pixel[1] / 255.0;
200
- b = pixel[2] / 255.0;
201
- } else {
202
- // BGR
203
- b = pixel[0] / 255.0;
204
- g = pixel[1] / 255.0;
205
- r = pixel[2] / 255.0;
206
- }
207
- }
208
- break;
209
- case kCGImageAlphaNoneSkipLast: {
210
- if (byteOrderNormal) {
211
- // RGBX
212
- r = pixel[0] / 255.0;
213
- g = pixel[1] / 255.0;
214
- b = pixel[2] / 255.0;
215
- } else {
216
- // XBGR
217
- b = pixel[1] / 255.0;
218
- g = pixel[2] / 255.0;
219
- r = pixel[3] / 255.0;
220
- }
221
- }
222
- break;
223
- case kCGImageAlphaNoneSkipFirst: {
224
- if (byteOrderNormal) {
225
- // XRGB
226
- r = pixel[1] / 255.0;
227
- g = pixel[2] / 255.0;
228
- b = pixel[3] / 255.0;
229
- } else {
230
- // BGRX
231
- b = pixel[0] / 255.0;
232
- g = pixel[1] / 255.0;
233
- r = pixel[2] / 255.0;
234
- }
235
- }
236
- break;
237
- case kCGImageAlphaOnly: {
238
- // A
239
- a = pixel[0] / 255.0;
240
- }
241
- break;
242
- default:
243
- break;
244
- }
245
-
246
- return [UIColor colorWithRed:r green:g blue:b alpha:a];
247
- }
248
-
249
- #if SD_UIKIT || SD_MAC
250
- // Create-Rule, caller should call CGImageRelease
251
- static inline CGImageRef _Nullable SDCreateCGImageFromCIImage(CIImage * _Nonnull ciImage) {
252
- CGImageRef imageRef = NULL;
253
- if (@available(iOS 10, macOS 10.12, tvOS 10, *)) {
254
- imageRef = ciImage.CGImage;
255
- }
256
- if (!imageRef) {
257
- CIContext *context = [CIContext context];
258
- imageRef = [context createCGImage:ciImage fromRect:ciImage.extent];
259
- } else {
260
- CGImageRetain(imageRef);
261
- }
262
- return imageRef;
263
- }
264
- #endif
265
-
266
- @implementation UIImage (Transform)
267
-
268
- - (void)sd_drawInRect:(CGRect)rect context:(CGContextRef)context scaleMode:(SDImageScaleMode)scaleMode clipsToBounds:(BOOL)clips {
269
- CGRect drawRect = SDCGRectFitWithScaleMode(rect, self.size, scaleMode);
270
- if (drawRect.size.width == 0 || drawRect.size.height == 0) return;
271
- if (clips) {
272
- if (context) {
273
- CGContextSaveGState(context);
274
- CGContextAddRect(context, rect);
275
- CGContextClip(context);
276
- [self drawInRect:drawRect];
277
- CGContextRestoreGState(context);
278
- }
279
- } else {
280
- [self drawInRect:drawRect];
281
- }
282
- }
283
-
284
- - (nullable UIImage *)sd_resizedImageWithSize:(CGSize)size scaleMode:(SDImageScaleMode)scaleMode {
285
- if (size.width <= 0 || size.height <= 0) return nil;
286
- SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init];
287
- format.scale = self.scale;
288
- SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:size format:format];
289
- UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) {
290
- [self sd_drawInRect:CGRectMake(0, 0, size.width, size.height) context:context scaleMode:scaleMode clipsToBounds:NO];
291
- }];
292
- return image;
293
- }
294
-
295
- - (nullable UIImage *)sd_croppedImageWithRect:(CGRect)rect {
296
- rect.origin.x *= self.scale;
297
- rect.origin.y *= self.scale;
298
- rect.size.width *= self.scale;
299
- rect.size.height *= self.scale;
300
- if (rect.size.width <= 0 || rect.size.height <= 0) return nil;
301
-
302
- #if SD_UIKIT || SD_MAC
303
- // CIImage shortcut
304
- if (self.CIImage) {
305
- CGRect croppingRect = CGRectMake(rect.origin.x, self.size.height - CGRectGetMaxY(rect), rect.size.width, rect.size.height);
306
- CIImage *ciImage = [self.CIImage imageByCroppingToRect:croppingRect];
307
- #if SD_UIKIT
308
- UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation];
309
- #else
310
- UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp];
311
- #endif
312
- return image;
313
- }
314
- #endif
315
-
316
- CGImageRef imageRef = self.CGImage;
317
- if (!imageRef) {
318
- return nil;
319
- }
320
-
321
- CGImageRef croppedImageRef = CGImageCreateWithImageInRect(imageRef, rect);
322
- if (!croppedImageRef) {
323
- return nil;
324
- }
325
- #if SD_UIKIT || SD_WATCH
326
- UIImage *image = [UIImage imageWithCGImage:croppedImageRef scale:self.scale orientation:self.imageOrientation];
327
- #else
328
- UIImage *image = [[UIImage alloc] initWithCGImage:croppedImageRef scale:self.scale orientation:kCGImagePropertyOrientationUp];
329
- #endif
330
- CGImageRelease(croppedImageRef);
331
- return image;
332
- }
333
-
334
- - (nullable UIImage *)sd_roundedCornerImageWithRadius:(CGFloat)cornerRadius corners:(SDRectCorner)corners borderWidth:(CGFloat)borderWidth borderColor:(nullable UIColor *)borderColor {
335
- SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init];
336
- format.scale = self.scale;
337
- SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:self.size format:format];
338
- UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) {
339
- CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
340
-
341
- CGFloat minSize = MIN(self.size.width, self.size.height);
342
- if (borderWidth < minSize / 2) {
343
- #if SD_UIKIT || SD_WATCH
344
- UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadii:CGSizeMake(cornerRadius, cornerRadius)];
345
- #else
346
- NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:CGRectInset(rect, borderWidth, borderWidth) byRoundingCorners:corners cornerRadius:cornerRadius];
347
- #endif
348
- [path closePath];
349
-
350
- CGContextSaveGState(context);
351
- [path addClip];
352
- [self drawInRect:rect];
353
- CGContextRestoreGState(context);
354
- }
355
-
356
- if (borderColor && borderWidth < minSize / 2 && borderWidth > 0) {
357
- CGFloat strokeInset = (floor(borderWidth * self.scale) + 0.5) / self.scale;
358
- CGRect strokeRect = CGRectInset(rect, strokeInset, strokeInset);
359
- CGFloat strokeRadius = cornerRadius > self.scale / 2 ? cornerRadius - self.scale / 2 : 0;
360
- #if SD_UIKIT || SD_WATCH
361
- UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadii:CGSizeMake(strokeRadius, strokeRadius)];
362
- #else
363
- NSBezierPath *path = [NSBezierPath sd_bezierPathWithRoundedRect:strokeRect byRoundingCorners:corners cornerRadius:strokeRadius];
364
- #endif
365
- [path closePath];
366
-
367
- path.lineWidth = borderWidth;
368
- [borderColor setStroke];
369
- [path stroke];
370
- }
371
- }];
372
- return image;
373
- }
374
-
375
- - (nullable UIImage *)sd_rotatedImageWithAngle:(CGFloat)angle fitSize:(BOOL)fitSize {
376
- size_t width = self.size.width;
377
- size_t height = self.size.height;
378
- CGRect newRect = CGRectApplyAffineTransform(CGRectMake(0, 0, width, height),
379
- fitSize ? CGAffineTransformMakeRotation(angle) : CGAffineTransformIdentity);
380
-
381
- #if SD_UIKIT || SD_MAC
382
- // CIImage shortcut
383
- if (self.CIImage) {
384
- CIImage *ciImage = self.CIImage;
385
- if (fitSize) {
386
- CGAffineTransform transform = CGAffineTransformMakeRotation(angle);
387
- ciImage = [ciImage imageByApplyingTransform:transform];
388
- } else {
389
- CIFilter *filter = [CIFilter filterWithName:@"CIStraightenFilter"];
390
- [filter setValue:ciImage forKey:kCIInputImageKey];
391
- [filter setValue:@(angle) forKey:kCIInputAngleKey];
392
- ciImage = filter.outputImage;
393
- }
394
- #if SD_UIKIT || SD_WATCH
395
- UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation];
396
- #else
397
- UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp];
398
- #endif
399
- return image;
400
- }
401
- #endif
402
-
403
- SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init];
404
- format.scale = self.scale;
405
- SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:newRect.size format:format];
406
- UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) {
407
- CGContextSetShouldAntialias(context, true);
408
- CGContextSetAllowsAntialiasing(context, true);
409
- CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
410
- CGContextTranslateCTM(context, +(newRect.size.width * 0.5), +(newRect.size.height * 0.5));
411
- #if SD_UIKIT || SD_WATCH
412
- // Use UIKit coordinate system counterclockwise (⟲)
413
- CGContextRotateCTM(context, -angle);
414
- #else
415
- CGContextRotateCTM(context, angle);
416
- #endif
417
-
418
- [self drawInRect:CGRectMake(-(width * 0.5), -(height * 0.5), width, height)];
419
- }];
420
- return image;
421
- }
422
-
423
- - (nullable UIImage *)sd_flippedImageWithHorizontal:(BOOL)horizontal vertical:(BOOL)vertical {
424
- size_t width = self.size.width;
425
- size_t height = self.size.height;
426
-
427
- #if SD_UIKIT || SD_MAC
428
- // CIImage shortcut
429
- if (self.CIImage) {
430
- CGAffineTransform transform = CGAffineTransformIdentity;
431
- // Use UIKit coordinate system
432
- if (horizontal) {
433
- CGAffineTransform flipHorizontal = CGAffineTransformMake(-1, 0, 0, 1, width, 0);
434
- transform = CGAffineTransformConcat(transform, flipHorizontal);
435
- }
436
- if (vertical) {
437
- CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, height);
438
- transform = CGAffineTransformConcat(transform, flipVertical);
439
- }
440
- CIImage *ciImage = [self.CIImage imageByApplyingTransform:transform];
441
- #if SD_UIKIT
442
- UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation];
443
- #else
444
- UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp];
445
- #endif
446
- return image;
447
- }
448
- #endif
449
-
450
- SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init];
451
- format.scale = self.scale;
452
- SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:self.size format:format];
453
- UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) {
454
- // Use UIKit coordinate system
455
- if (horizontal) {
456
- CGAffineTransform flipHorizontal = CGAffineTransformMake(-1, 0, 0, 1, width, 0);
457
- CGContextConcatCTM(context, flipHorizontal);
458
- }
459
- if (vertical) {
460
- CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, height);
461
- CGContextConcatCTM(context, flipVertical);
462
- }
463
- [self drawInRect:CGRectMake(0, 0, width, height)];
464
- }];
465
- return image;
466
- }
467
-
468
- #pragma mark - Image Blending
469
-
470
- - (nullable UIImage *)sd_tintedImageWithColor:(nonnull UIColor *)tintColor {
471
- BOOL hasTint = CGColorGetAlpha(tintColor.CGColor) > __FLT_EPSILON__;
472
- if (!hasTint) {
473
- return self;
474
- }
475
-
476
- #if SD_UIKIT || SD_MAC
477
- // CIImage shortcut
478
- if (self.CIImage) {
479
- CIImage *ciImage = self.CIImage;
480
- CIImage *colorImage = [CIImage imageWithColor:[[CIColor alloc] initWithColor:tintColor]];
481
- colorImage = [colorImage imageByCroppingToRect:ciImage.extent];
482
- CIFilter *filter = [CIFilter filterWithName:@"CISourceAtopCompositing"];
483
- [filter setValue:colorImage forKey:kCIInputImageKey];
484
- [filter setValue:ciImage forKey:kCIInputBackgroundImageKey];
485
- ciImage = filter.outputImage;
486
- #if SD_UIKIT
487
- UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation];
488
- #else
489
- UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp];
490
- #endif
491
- return image;
492
- }
493
- #endif
494
-
495
- CGSize size = self.size;
496
- CGRect rect = { CGPointZero, size };
497
- CGFloat scale = self.scale;
498
-
499
- // blend mode, see https://en.wikipedia.org/wiki/Alpha_compositing
500
- CGBlendMode blendMode = kCGBlendModeSourceAtop;
501
-
502
- SDGraphicsImageRendererFormat *format = [[SDGraphicsImageRendererFormat alloc] init];
503
- format.scale = scale;
504
- SDGraphicsImageRenderer *renderer = [[SDGraphicsImageRenderer alloc] initWithSize:size format:format];
505
- UIImage *image = [renderer imageWithActions:^(CGContextRef _Nonnull context) {
506
- [self drawInRect:rect];
507
- CGContextSetBlendMode(context, blendMode);
508
- CGContextSetFillColorWithColor(context, tintColor.CGColor);
509
- CGContextFillRect(context, rect);
510
- }];
511
- return image;
512
- }
513
-
514
- - (nullable UIColor *)sd_colorAtPoint:(CGPoint)point {
515
- CGImageRef imageRef = NULL;
516
- // CIImage compatible
517
- #if SD_UIKIT || SD_MAC
518
- if (self.CIImage) {
519
- imageRef = SDCreateCGImageFromCIImage(self.CIImage);
520
- }
521
- #endif
522
- if (!imageRef) {
523
- imageRef = self.CGImage;
524
- CGImageRetain(imageRef);
525
- }
526
- if (!imageRef) {
527
- return nil;
528
- }
529
-
530
- // Check point
531
- CGFloat width = CGImageGetWidth(imageRef);
532
- CGFloat height = CGImageGetHeight(imageRef);
533
- if (point.x < 0 || point.y < 0 || point.x >= width || point.y >= height) {
534
- CGImageRelease(imageRef);
535
- return nil;
536
- }
537
-
538
- // Get pixels
539
- CGDataProviderRef provider = CGImageGetDataProvider(imageRef);
540
- if (!provider) {
541
- CGImageRelease(imageRef);
542
- return nil;
543
- }
544
- CFDataRef data = CGDataProviderCopyData(provider);
545
- if (!data) {
546
- CGImageRelease(imageRef);
547
- return nil;
548
- }
549
-
550
- // Get pixel at point
551
- size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);
552
- size_t components = CGImageGetBitsPerPixel(imageRef) / CGImageGetBitsPerComponent(imageRef);
553
- CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
554
-
555
- CFRange range = CFRangeMake(bytesPerRow * point.y + components * point.x, components);
556
- if (CFDataGetLength(data) < range.location + range.length) {
557
- CFRelease(data);
558
- CGImageRelease(imageRef);
559
- return nil;
560
- }
561
- // greyscale
562
- if (components == 2) {
563
- Pixel_88 pixel = {0};
564
- CFDataGetBytes(data, range, pixel);
565
- CFRelease(data);
566
- CGImageRelease(imageRef);
567
- // Convert to color
568
- return SDGetColorFromGrayscale(pixel, bitmapInfo);
569
- } else if (components == 3 || components == 4) {
570
- // RGB/RGBA
571
- Pixel_8888 pixel = {0};
572
- CFDataGetBytes(data, range, pixel);
573
- CFRelease(data);
574
- CGImageRelease(imageRef);
575
- // Convert to color
576
- return SDGetColorFromRGBA(pixel, bitmapInfo);
577
- } else {
578
- NSLog(@"Unsupported components: %zu", components);
579
- CFRelease(data);
580
- CGImageRelease(imageRef);
581
- return nil;
582
- }
583
- }
584
-
585
- - (nullable NSArray<UIColor *> *)sd_colorsWithRect:(CGRect)rect {
586
- CGImageRef imageRef = NULL;
587
- // CIImage compatible
588
- #if SD_UIKIT || SD_MAC
589
- if (self.CIImage) {
590
- imageRef = SDCreateCGImageFromCIImage(self.CIImage);
591
- }
592
- #endif
593
- if (!imageRef) {
594
- imageRef = self.CGImage;
595
- CGImageRetain(imageRef);
596
- }
597
- if (!imageRef) {
598
- return nil;
599
- }
600
-
601
- // Check rect
602
- CGFloat width = CGImageGetWidth(imageRef);
603
- CGFloat height = CGImageGetHeight(imageRef);
604
- if (CGRectGetWidth(rect) <= 0 || CGRectGetHeight(rect) <= 0 || CGRectGetMinX(rect) < 0 || CGRectGetMinY(rect) < 0 || CGRectGetMaxX(rect) > width || CGRectGetMaxY(rect) > height) {
605
- CGImageRelease(imageRef);
606
- return nil;
607
- }
608
-
609
- // Get pixels
610
- CGDataProviderRef provider = CGImageGetDataProvider(imageRef);
611
- if (!provider) {
612
- CGImageRelease(imageRef);
613
- return nil;
614
- }
615
- CFDataRef data = CGDataProviderCopyData(provider);
616
- if (!data) {
617
- CGImageRelease(imageRef);
618
- return nil;
619
- }
620
-
621
- // Get pixels with rect
622
- size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);
623
- size_t components = CGImageGetBitsPerPixel(imageRef) / CGImageGetBitsPerComponent(imageRef);
624
-
625
- size_t start = bytesPerRow * CGRectGetMinY(rect) + components * CGRectGetMinX(rect);
626
- size_t end = bytesPerRow * (CGRectGetMaxY(rect) - 1) + components * CGRectGetMaxX(rect);
627
- if (CFDataGetLength(data) < (CFIndex)end) {
628
- CFRelease(data);
629
- CGImageRelease(imageRef);
630
- return nil;
631
- }
632
-
633
- const UInt8 *pixels = CFDataGetBytePtr(data);
634
- size_t row = CGRectGetMinY(rect);
635
- size_t col = CGRectGetMaxX(rect);
636
-
637
- // Convert to color
638
- CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
639
- NSMutableArray<UIColor *> *colors = [NSMutableArray arrayWithCapacity:CGRectGetWidth(rect) * CGRectGetHeight(rect)];
640
- for (size_t index = start; index < end; index += components) {
641
- if (index >= row * bytesPerRow + col * components) {
642
- // Index beyond the end of current row, go next row
643
- row++;
644
- index = row * bytesPerRow + CGRectGetMinX(rect) * components;
645
- index -= components;
646
- continue;
647
- }
648
- UIColor *color;
649
- if (components == 2) {
650
- Pixel_88 pixel = {pixels[index], pixel[index+1]};
651
- color = SDGetColorFromGrayscale(pixel, bitmapInfo);
652
- } else {
653
- if (components == 3) {
654
- Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], 0};
655
- color = SDGetColorFromRGBA(pixel, bitmapInfo);
656
- } else if (components == 4) {
657
- Pixel_8888 pixel = {pixels[index], pixels[index+1], pixels[index+2], pixels[index+3]};
658
- color = SDGetColorFromRGBA(pixel, bitmapInfo);
659
- } else {
660
- NSLog(@"Unsupported components: %zu", components);
661
- }
662
- }
663
- if (color) {
664
- [colors addObject:color];
665
- }
666
- }
667
- CFRelease(data);
668
- CGImageRelease(imageRef);
669
-
670
- return [colors copy];
671
- }
672
-
673
- #pragma mark - Image Effect
674
-
675
- // We use vImage to do box convolve for performance and support for watchOS. However, you can just use `CIFilter.CIGaussianBlur`. For other blur effect, use any filter in `CICategoryBlur`
676
- - (nullable UIImage *)sd_blurredImageWithRadius:(CGFloat)blurRadius {
677
- if (self.size.width < 1 || self.size.height < 1) {
678
- return nil;
679
- }
680
- BOOL hasBlur = blurRadius > __FLT_EPSILON__;
681
- if (!hasBlur) {
682
- return self;
683
- }
684
-
685
- CGFloat scale = self.scale;
686
- CGFloat inputRadius = blurRadius * scale;
687
- #if SD_UIKIT || SD_MAC
688
- if (self.CIImage) {
689
- CIFilter *filter = [CIFilter filterWithName:@"CIGaussianBlur"];
690
- [filter setValue:self.CIImage forKey:kCIInputImageKey];
691
- [filter setValue:@(inputRadius) forKey:kCIInputRadiusKey];
692
- CIImage *ciImage = filter.outputImage;
693
- ciImage = [ciImage imageByCroppingToRect:CGRectMake(0, 0, self.size.width, self.size.height)];
694
- #if SD_UIKIT
695
- UIImage *image = [UIImage imageWithCIImage:ciImage scale:self.scale orientation:self.imageOrientation];
696
- #else
697
- UIImage *image = [[UIImage alloc] initWithCIImage:ciImage scale:self.scale orientation:kCGImagePropertyOrientationUp];
698
- #endif
699
- return image;
700
- }
701
- #endif
702
-
703
- CGImageRef imageRef = self.CGImage;
704
-
705
- //convert to BGRA if it isn't
706
- if (CGImageGetBitsPerPixel(imageRef) != 32 ||
707
- CGImageGetBitsPerComponent(imageRef) != 8 ||
708
- !((CGImageGetBitmapInfo(imageRef) & kCGBitmapAlphaInfoMask))) {
709
- SDGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
710
- [self drawInRect:CGRectMake(0, 0, self.size.width, self.size.height)];
711
- imageRef = SDGraphicsGetImageFromCurrentImageContext().CGImage;
712
- SDGraphicsEndImageContext();
713
- }
714
-
715
- vImage_Buffer effect = {}, scratch = {};
716
- vImage_Buffer *input = NULL, *output = NULL;
717
-
718
- vImage_CGImageFormat format = {
719
- .bitsPerComponent = 8,
720
- .bitsPerPixel = 32,
721
- .colorSpace = NULL,
722
- .bitmapInfo = kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Host, //requests a BGRA buffer.
723
- .version = 0,
724
- .decode = NULL,
725
- .renderingIntent = CGImageGetRenderingIntent(imageRef)
726
- };
727
-
728
- vImage_Error err;
729
- err = vImageBuffer_InitWithCGImage(&effect, &format, NULL, imageRef, kvImageNoFlags);
730
- if (err != kvImageNoError) {
731
- NSLog(@"UIImage+Transform error: vImageBuffer_InitWithCGImage returned error code %zi for inputImage: %@", err, self);
732
- return nil;
733
- }
734
- err = vImageBuffer_Init(&scratch, effect.height, effect.width, format.bitsPerPixel, kvImageNoFlags);
735
- if (err != kvImageNoError) {
736
- NSLog(@"UIImage+Transform error: vImageBuffer_Init returned error code %zi for inputImage: %@", err, self);
737
- return nil;
738
- }
739
-
740
- input = &effect;
741
- output = &scratch;
742
-
743
- if (hasBlur) {
744
- // A description of how to compute the box kernel width from the Gaussian
745
- // radius (aka standard deviation) appears in the SVG spec:
746
- // http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement
747
- //
748
- // For larger values of 's' (s >= 2.0), an approximation can be used: Three
749
- // successive box-blurs build a piece-wise quadratic convolution kernel, which
750
- // approximates the Gaussian kernel to within roughly 3%.
751
- //
752
- // let d = floor(s * 3*sqrt(2*pi)/4 + 0.5)
753
- //
754
- // ... if d is odd, use three box-blurs of size 'd', centered on the output pixel.
755
- //
756
- if (inputRadius - 2.0 < __FLT_EPSILON__) inputRadius = 2.0;
757
- uint32_t radius = floor(inputRadius * 3.0 * sqrt(2 * M_PI) / 4 + 0.5);
758
- radius |= 1; // force radius to be odd so that the three box-blur methodology works.
759
- int iterations;
760
- if (blurRadius * scale < 0.5) iterations = 1;
761
- else if (blurRadius * scale < 1.5) iterations = 2;
762
- else iterations = 3;
763
- NSInteger tempSize = vImageBoxConvolve_ARGB8888(input, output, NULL, 0, 0, radius, radius, NULL, kvImageGetTempBufferSize | kvImageEdgeExtend);
764
- void *temp = malloc(tempSize);
765
- for (int i = 0; i < iterations; i++) {
766
- vImageBoxConvolve_ARGB8888(input, output, temp, 0, 0, radius, radius, NULL, kvImageEdgeExtend);
767
- vImage_Buffer *tmp = input;
768
- input = output;
769
- output = tmp;
770
- }
771
- free(temp);
772
- }
773
-
774
- CGImageRef effectCGImage = NULL;
775
- effectCGImage = vImageCreateCGImageFromBuffer(input, &format, NULL, NULL, kvImageNoAllocate, NULL);
776
- if (effectCGImage == NULL) {
777
- effectCGImage = vImageCreateCGImageFromBuffer(input, &format, NULL, NULL, kvImageNoFlags, NULL);
778
- free(input->data);
779
- }
780
- free(output->data);
781
- #if SD_UIKIT || SD_WATCH
782
- UIImage *outputImage = [UIImage imageWithCGImage:effectCGImage scale:self.scale orientation:self.imageOrientation];
783
- #else
784
- UIImage *outputImage = [[UIImage alloc] initWithCGImage:effectCGImage scale:self.scale orientation:kCGImagePropertyOrientationUp];
785
- #endif
786
- CGImageRelease(effectCGImage);
787
-
788
- return outputImage;
789
- }
790
-
791
- #if SD_UIKIT || SD_MAC
792
- - (nullable UIImage *)sd_filteredImageWithFilter:(nonnull CIFilter *)filter {
793
- CIImage *inputImage;
794
- if (self.CIImage) {
795
- inputImage = self.CIImage;
796
- } else {
797
- CGImageRef imageRef = self.CGImage;
798
- if (!imageRef) {
799
- return nil;
800
- }
801
- inputImage = [CIImage imageWithCGImage:imageRef];
802
- }
803
- if (!inputImage) return nil;
804
-
805
- CIContext *context = [CIContext context];
806
- [filter setValue:inputImage forKey:kCIInputImageKey];
807
- CIImage *outputImage = filter.outputImage;
808
- if (!outputImage) return nil;
809
-
810
- CGImageRef imageRef = [context createCGImage:outputImage fromRect:outputImage.extent];
811
- if (!imageRef) return nil;
812
-
813
- #if SD_UIKIT
814
- UIImage *image = [UIImage imageWithCGImage:imageRef scale:self.scale orientation:self.imageOrientation];
815
- #else
816
- UIImage *image = [[UIImage alloc] initWithCGImage:imageRef scale:self.scale orientation:kCGImagePropertyOrientationUp];
817
- #endif
818
- CGImageRelease(imageRef);
819
-
820
- return image;
821
- }
822
- #endif
823
-
824
- @end