@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
@@ -0,0 +1,831 @@
1
+ package vn.momo.kits.application
2
+
3
+ import androidx.annotation.FloatRange
4
+ import androidx.compose.animation.animateContentSize
5
+ import androidx.compose.foundation.*
6
+ import androidx.compose.foundation.gestures.detectTapGestures
7
+ import androidx.compose.foundation.interaction.FocusInteraction
8
+ import androidx.compose.foundation.interaction.MutableInteractionSource
9
+ import androidx.compose.foundation.layout.*
10
+ import androidx.compose.foundation.shape.CircleShape
11
+ import androidx.compose.foundation.text.BasicTextField
12
+ import androidx.compose.foundation.text.KeyboardActions
13
+ import androidx.compose.foundation.text.KeyboardOptions
14
+ import androidx.compose.runtime.*
15
+ import androidx.compose.ui.Alignment
16
+ import androidx.compose.ui.Modifier
17
+ import androidx.compose.ui.composed
18
+ import androidx.compose.ui.draw.clip
19
+ import androidx.compose.ui.draw.drawBehind
20
+ import androidx.compose.ui.draw.drawWithContent
21
+ import androidx.compose.ui.geometry.Offset
22
+ import androidx.compose.ui.geometry.Rect
23
+ import androidx.compose.ui.graphics.Brush
24
+ import androidx.compose.ui.graphics.Color
25
+ import androidx.compose.ui.graphics.SolidColor
26
+ import androidx.compose.ui.graphics.graphicsLayer
27
+ import androidx.compose.ui.input.pointer.pointerInput
28
+ import androidx.compose.ui.layout.*
29
+ import androidx.compose.ui.platform.LocalDensity
30
+ import androidx.compose.ui.platform.LocalFocusManager
31
+ import androidx.compose.ui.platform.LocalSoftwareKeyboardController
32
+ import androidx.compose.ui.text.TextStyle
33
+ import androidx.compose.ui.text.style.TextOverflow
34
+ import androidx.compose.ui.unit.*
35
+ import kotlinx.coroutines.flow.collectLatest
36
+ import kotlinx.coroutines.flow.mapNotNull
37
+ import vn.momo.kits.components.Icon
38
+ import vn.momo.kits.components.Text
39
+ import vn.momo.kits.const.AppTheme
40
+ import vn.momo.kits.const.Colors
41
+ import vn.momo.kits.const.Spacing
42
+ import vn.momo.kits.const.Typography
43
+ import vn.momo.kits.const.getFontFamily
44
+ import vn.momo.kits.modifier.kitsAutomationId
45
+ import vn.momo.kits.modifier.noFeedbackClickable
46
+ import vn.momo.kits.modifier.setAutomationId
47
+ import vn.momo.kits.navigation.component.headerFontFamily
48
+ import vn.momo.kits.navigation.component.HEADER_HEIGHT
49
+ import vn.momo.kits.utils.getAppStatusBarHeight
50
+ import kotlin.math.max
51
+ import kotlin.math.roundToInt
52
+
53
+
54
+ data class AnimationOption(
55
+ val targetBounds: Rect,
56
+ val progress: State<Float>,
57
+ @param:FloatRange(from = 0.0, to = 1.0)
58
+ val opacityLimitFraction: Float = 0f,
59
+ ) {
60
+ val opacityCap: Float
61
+ get() = 1f - opacityLimitFraction
62
+
63
+ val animateOpacity: Float
64
+ get() {
65
+ if (progress.value < opacityLimitFraction) return 0f
66
+ return androidx.compose.ui.util.lerp(
67
+ 0f,
68
+ 1f,
69
+ (progress.value - opacityLimitFraction) / (opacityCap),
70
+ )
71
+ }
72
+ }
73
+
74
+ val LocalAnimationOption = staticCompositionLocalOf<AnimationOption?> { null }
75
+
76
+ @Composable
77
+ fun LiteScreen(
78
+ scrollable: Boolean = true,
79
+ scrollState: ScrollState? = null,
80
+ headerType: HeaderType = HeaderType.DEFAULT,
81
+ verticalArrangement: Arrangement.Vertical = Arrangement.Top,
82
+ horizontalAlignment: Alignment.Horizontal = Alignment.Start,
83
+ backgroundColor: Color = AppTheme.current.colors.background.default,
84
+ /* Begin of header props */
85
+ title: String? = null,
86
+ inputSearchProps: LiteInputSearchProps? = null,
87
+ goBack: (() -> Unit)? = null,
88
+ headerRight: @Composable (() -> Unit)? = null,
89
+ useAnimationSearch: Boolean = true,
90
+ titlePosition: TitlePosition = TitlePosition.LEFT,
91
+ headerRightData: HeaderRightData? = null,
92
+ headerTintColor: Color? = null,
93
+ headerBackgroundColor: Color? = null,
94
+ headerSpaceBetween: Dp? = null,
95
+ /* End of header props */
96
+
97
+ screenContent: @Composable () -> Unit,
98
+ ) {
99
+ val content by rememberUpdatedState(screenContent)
100
+
101
+ val finalScrollState = scrollState ?: rememberScrollState()
102
+
103
+ val contentModifier = remember(
104
+ key1 = scrollable,
105
+ key2 = finalScrollState,
106
+ ) {
107
+ var res: Modifier = Modifier
108
+ .background(color = backgroundColor)
109
+ if (scrollable) {
110
+ res = res.verticalScroll(finalScrollState)
111
+ }
112
+ res
113
+ }
114
+
115
+ LiteScreenLayout(
116
+ scrollState = finalScrollState,
117
+ modifier = Modifier
118
+ .fillMaxSize()
119
+ .hideKeyboardOnTap(),
120
+ contentModifier = contentModifier,
121
+ verticalArrangement = verticalArrangement,
122
+ horizontalAlignment = horizontalAlignment,
123
+ title = title,
124
+ headerRight = headerRight,
125
+ headerType = headerType,
126
+ onGoBack = goBack,
127
+ inputSearchProps = inputSearchProps,
128
+ titlePosition = titlePosition,
129
+ useAnimationSearch = useAnimationSearch,
130
+ headerRightData = headerRightData,
131
+ tintColor = headerTintColor,
132
+ headerBackgroundColor = headerBackgroundColor,
133
+ headerSpaceBetween = headerSpaceBetween,
134
+ ) {
135
+ content()
136
+ }
137
+ }
138
+
139
+ private object HeaderId {
140
+ private const val PACKAGE_NAME = "vn.momo.compose.kits"
141
+ const val CONTENT_ID = "${PACKAGE_NAME}.content"
142
+ const val BACKGROUND_ID = "${PACKAGE_NAME}.background"
143
+ const val BACK_ID = "${PACKAGE_NAME}.back"
144
+ const val HEADER_RIGHT_ID = "${PACKAGE_NAME}.headerRight"
145
+ const val INPUT_SEARCH_ID = "${PACKAGE_NAME}.inputSearch"
146
+ const val TITLE_ID = "${PACKAGE_NAME}.title"
147
+
148
+ val EXTENDED_HEADER_HEIGHT = 154.dp
149
+ }
150
+
151
+ @Composable
152
+ private fun LiteScreenLayout(
153
+ scrollState: ScrollState?,
154
+ modifier: Modifier = Modifier,
155
+ contentModifier: Modifier = Modifier,
156
+ verticalArrangement: Arrangement.Vertical = Arrangement.Top,
157
+ horizontalAlignment: Alignment.Horizontal = Alignment.Start,
158
+ title: String? = null,
159
+ tintColor: Color? = null,
160
+ headerRightData: HeaderRightData? = null,
161
+ headerType: HeaderType = HeaderType.DEFAULT,
162
+ titlePosition: TitlePosition = TitlePosition.LEFT,
163
+ useAnimationSearch: Boolean = true,
164
+ onGoBack: (() -> Unit)? = null,
165
+ headerBackgroundColor: Color? = null,
166
+ headerSpaceBetween: Dp? = null,
167
+ inputSearchProps: LiteInputSearchProps? = null,
168
+ headerRight: @Composable (() -> Unit)? = null,
169
+ content: @Composable () -> Unit,
170
+ ) {
171
+ val statusBarHeight = getAppStatusBarHeight()
172
+ val isHeaderNone = remember(headerType) {
173
+ headerType == HeaderType.NONE
174
+ }
175
+ val theme = AppTheme.current
176
+ val density = LocalDensity.current
177
+
178
+ val isHeaderExtend = remember(headerType) {
179
+ headerType == HeaderType.EXTENDED
180
+ }
181
+ val backgroundHeight = remember(isHeaderNone, isHeaderExtend, statusBarHeight) {
182
+ when {
183
+ isHeaderNone -> statusBarHeight
184
+ !isHeaderExtend -> statusBarHeight + HEADER_HEIGHT.dp
185
+ else -> HeaderId.EXTENDED_HEADER_HEIGHT
186
+ }
187
+ }
188
+ val listGradientColors = remember {
189
+ listOf(
190
+ Color(0xFFFDCADE),
191
+ Color(0x00FDCADE),
192
+ )
193
+ }
194
+
195
+ val headerColor = remember(tintColor, theme) {
196
+ if (tintColor == Colors.black_01) HeaderColor(
197
+ tintIconColor = tintColor,
198
+ backgroundButton = Colors.black_20.copy(alpha = 0.6f),
199
+ borderColor = Colors.black_01.copy(alpha = 0.2f)
200
+ )
201
+ else HeaderColor(
202
+ tintIconColor = tintColor ?: theme.colors.text.default,
203
+ backgroundButton = Colors.black_01.copy(alpha = 0.6f),
204
+ borderColor = Colors.black_20.copy(alpha = 0.2f)
205
+ )
206
+ }
207
+
208
+ val scrollPercentage = produceState(
209
+ initialValue = 0f,
210
+ key1 = useAnimationSearch,
211
+ key2 = scrollState,
212
+ key3 = backgroundHeight,
213
+ ) {
214
+ if (!useAnimationSearch) return@produceState
215
+ scrollState ?: return@produceState
216
+ val rangePx = with(density) { backgroundHeight.toPx() }
217
+ snapshotFlow { scrollState.value }.collectLatest {
218
+ value = (it / rangePx).coerceIn(0f, 1f)
219
+ }
220
+ }
221
+
222
+ val titleStyle = remember {
223
+ Typography.actionSBold.copy(
224
+ fontSize = 15.sp,
225
+ lineHeight = 22.sp,
226
+ )
227
+ }
228
+
229
+ val animationOption = LocalAnimationOption.current
230
+ val animationOpacityModifier = Modifier.graphicsLayer {
231
+ alpha = animationOption?.animateOpacity ?: 1f
232
+ }
233
+ val titleModifier = Modifier
234
+ .kitsAutomationId("title_navigation_header")
235
+ .layoutId(HeaderId.TITLE_ID)
236
+ .graphicsLayer {
237
+ val titleAlpha = if (isHeaderExtend && inputSearchProps != null && useAnimationSearch)
238
+ (1 - scrollPercentage.value * 2).coerceIn(0f, 1f)
239
+ else 1f
240
+ alpha = titleAlpha * (animationOption?.progress?.value ?: 1f)
241
+ }
242
+
243
+ val policy = remember(
244
+ useAnimationSearch,
245
+ isHeaderNone,
246
+ isHeaderExtend,
247
+ statusBarHeight,
248
+ titlePosition,
249
+ scrollPercentage,
250
+ headerSpaceBetween,
251
+ animationOption,
252
+ verticalArrangement,
253
+ horizontalAlignment,
254
+ ) {
255
+ LiteScreenLayoutPolicy(
256
+ useAnimationSearch = useAnimationSearch,
257
+ isHeaderNone = isHeaderNone,
258
+ isHeaderExtend = isHeaderExtend,
259
+ statusBarHeight = statusBarHeight,
260
+ titlePosition = titlePosition,
261
+ scrollPercentage = scrollPercentage,
262
+ headerSpaceBetween = headerSpaceBetween,
263
+ animationOption = animationOption,
264
+ verticalArrangement = verticalArrangement,
265
+ horizontalAlignment = horizontalAlignment,
266
+ )
267
+ }
268
+
269
+ Layout(
270
+ modifier = modifier
271
+ .animateContentSize(),
272
+ content = {
273
+ Box(
274
+ modifier = animationOpacityModifier
275
+ .layoutId(HeaderId.CONTENT_ID)
276
+ .then(contentModifier),
277
+ contentAlignment = Alignment.TopCenter,
278
+ ) {
279
+ content()
280
+ }
281
+
282
+ if (!isHeaderNone) {
283
+ Box(
284
+ modifier = Modifier
285
+ .layoutId(HeaderId.BACKGROUND_ID)
286
+ .then(animationOpacityModifier)
287
+ .drawBehind {
288
+ val headerHeight = max(
289
+ HeaderId.EXTENDED_HEADER_HEIGHT.toPx(),
290
+ size.height,
291
+ )
292
+ headerBackgroundColor?.let {
293
+ drawRect(color = it)
294
+ } ?: run {
295
+ drawRect(color = Colors.black_01)
296
+ drawRect(
297
+ brush = Brush.linearGradient(
298
+ colors = listGradientColors,
299
+ start = Offset.Zero,
300
+ end = Offset(
301
+ x = 0f,
302
+ y = headerHeight * (1 - scrollPercentage.value),
303
+ ),
304
+ )
305
+ )
306
+ }
307
+ },
308
+ )
309
+ }
310
+
311
+ if (!isHeaderNone && onGoBack != null) {
312
+ val coreModifier = Modifier
313
+ .layoutId(HeaderId.BACK_ID)
314
+ .then(animationOpacityModifier)
315
+ .clip(CircleShape)
316
+ .noFeedbackClickable(onClick = onGoBack)
317
+ .setAutomationId("btn_navigation_back")
318
+ inputSearchProps?.customBackIcon?.invoke(coreModifier) ?: Box(
319
+ modifier = coreModifier
320
+ .size(28.dp)
321
+ .border(
322
+ width = 0.2.dp,
323
+ color = headerColor.borderColor,
324
+ shape = CircleShape,
325
+ )
326
+ .background(color = headerColor.backgroundButton)
327
+ .padding(Spacing.XS),
328
+ ) {
329
+ Icon(
330
+ source = "arrow-back",
331
+ color = headerColor.tintIconColor,
332
+ size = 20.dp,
333
+ )
334
+ }
335
+ }
336
+
337
+ if (!isHeaderNone) {
338
+ Box(
339
+ modifier = Modifier
340
+ .layoutId(HeaderId.HEADER_RIGHT_ID)
341
+ .then(animationOpacityModifier)
342
+ ) {
343
+ if (headerRight != null) {
344
+ headerRight()
345
+ } else {
346
+ HeaderRight(
347
+ headerRight = headerRightData,
348
+ tintColor = tintColor,
349
+ )
350
+ }
351
+ }
352
+ }
353
+
354
+ if (!isHeaderNone && inputSearchProps != null) {
355
+ LiteInputSearch(
356
+ modifier = Modifier.layoutId(HeaderId.INPUT_SEARCH_ID),
357
+ inputSearchProps = inputSearchProps,
358
+ )
359
+ }
360
+ if (!isHeaderNone && title != null && (inputSearchProps == null || isHeaderExtend)) {
361
+ Text(
362
+ text = title,
363
+ color = headerColor.tintIconColor,
364
+ style = titleStyle,
365
+ fontFamily = headerFontFamily,
366
+ modifier = titleModifier,
367
+ maxLines = 1,
368
+ overflow = TextOverflow.Ellipsis
369
+ )
370
+ }
371
+ },
372
+ measurePolicy = policy,
373
+ )
374
+ }
375
+
376
+ private class LiteScreenLayoutPolicy(
377
+ private val useAnimationSearch: Boolean,
378
+ private val isHeaderNone: Boolean,
379
+ private val isHeaderExtend: Boolean,
380
+ private val statusBarHeight: Dp,
381
+ private val scrollPercentage: State<Float>,
382
+ private val titlePosition: TitlePosition,
383
+ private val headerSpaceBetween: Dp? = null,
384
+ private val animationOption: AnimationOption?,
385
+ private val verticalArrangement: Arrangement.Vertical,
386
+ private val horizontalAlignment: Alignment.Horizontal,
387
+ ) : MeasurePolicy {
388
+
389
+ val searchStartPosition: IntOffset by lazy {
390
+ if (animationOption == null) return@lazy IntOffset.Zero
391
+ val offset = animationOption.targetBounds.topLeft
392
+ IntOffset(
393
+ x = offset.x.roundToInt(),
394
+ y = offset.y.roundToInt(),
395
+ )
396
+ }
397
+
398
+ override fun MeasureScope.measure(
399
+ measurables: List<Measurable>,
400
+ constraints: Constraints
401
+ ): MeasureResult {
402
+ val spacing12 = Spacing.M.roundToPx()
403
+ val spaceBetween = headerSpaceBetween?.roundToPx() ?: spacing12
404
+ val statusBarPx = statusBarHeight.roundToPx()
405
+ val headerRowDefault = HEADER_HEIGHT.dp.roundToPx()
406
+ val scrollPercent = scrollPercentage.value
407
+
408
+ val contentMeasurable = measurables.find { it.layoutId == HeaderId.CONTENT_ID }
409
+
410
+ val realConstraints = constraints.copy(
411
+ minWidth = 0,
412
+ minHeight = 0,
413
+ maxWidth = (constraints.maxWidth - spacing12 * 2)
414
+ .coerceAtLeast(0),
415
+ )
416
+ val backIconPlaceable =
417
+ measurables.find { it.layoutId == HeaderId.BACK_ID }?.measure(realConstraints)
418
+ val headerRightPlaceable =
419
+ measurables.find { it.layoutId == HeaderId.HEADER_RIGHT_ID }?.measure(
420
+ realConstraints.copy(
421
+ maxWidth = realConstraints.maxWidth / 2,
422
+ )
423
+ )
424
+ val baseInputSearchConstraints = if (isHeaderExtend) {
425
+ val minWidth =
426
+ if (useAnimationSearch) realConstraints.maxWidth - backIconPlaceable.safeWidth - headerRightPlaceable.safeWidth - spaceBetween * 2
427
+ else realConstraints.maxWidth
428
+ realConstraints.copy(
429
+ maxWidth = (realConstraints.maxWidth * (1 - scrollPercent)).toInt()
430
+ .coerceAtLeast(minWidth)
431
+ )
432
+ } else {
433
+ var spaceConsumed = 0
434
+ if (backIconPlaceable.safeWidth != 0) spaceConsumed += backIconPlaceable.safeWidth + spaceBetween
435
+ if (headerRightPlaceable.safeWidth != 0) spaceConsumed += headerRightPlaceable.safeWidth + spaceBetween
436
+ realConstraints.copy(
437
+ maxWidth = realConstraints.maxWidth - spaceConsumed
438
+ )
439
+ }
440
+ val inputSearchConstraints = baseInputSearchConstraints.withAnimationTargetBounds()
441
+ val inputSearchPlaceable = measurables.find { it.layoutId == HeaderId.INPUT_SEARCH_ID }
442
+ ?.measure(inputSearchConstraints)
443
+ val titlePlaceable = measurables.find { it.layoutId == HeaderId.TITLE_ID }?.measure(
444
+ constraints = realConstraints.copy(
445
+ maxWidth = realConstraints.maxWidth - backIconPlaceable.safeWidth - headerRightPlaceable.safeWidth - spaceBetween * 2
446
+ )
447
+ )
448
+
449
+ /**
450
+ * replicate logic from [vn.momo.kits.navigation.component.HeaderBackground]
451
+ * */
452
+ var defaultHeight = statusBarPx + headerRowDefault
453
+ if (isHeaderExtend) {
454
+ defaultHeight = 154.dp.roundToPx()
455
+ }
456
+ val headerHeight = when {
457
+ isHeaderNone -> statusBarPx
458
+ !useAnimationSearch && !isHeaderExtend -> defaultHeight
459
+ else -> {
460
+ val collapsableSpace = defaultHeight - statusBarPx - headerRowDefault
461
+ (defaultHeight - scrollPercent * collapsableSpace).toInt()
462
+ }
463
+ }
464
+
465
+ val layoutWidth = constraints.maxWidth
466
+ val layoutHeight = constraints.maxHeight
467
+ val contentHeight = (layoutHeight - headerHeight).coerceAtLeast(0)
468
+ val contentPlaceable = contentMeasurable?.measure(
469
+ constraints.copy(
470
+ minWidth = 0,
471
+ minHeight = contentHeight,
472
+ maxHeight = contentHeight,
473
+ )
474
+ )
475
+ val backgroundPlaceable = measurables.find { it.layoutId == HeaderId.BACKGROUND_ID }
476
+ ?.measure(
477
+ Constraints.fixed(
478
+ width = layoutWidth,
479
+ height = headerHeight,
480
+ )
481
+ )
482
+ val childrenHeights = intArrayOf(
483
+ headerHeight,
484
+ contentPlaceable.safeHeight,
485
+ )
486
+ val childrenY = IntArray(childrenHeights.size)
487
+ with(verticalArrangement) {
488
+ arrange(
489
+ totalSize = layoutHeight,
490
+ sizes = childrenHeights,
491
+ outPositions = childrenY,
492
+ )
493
+ }
494
+ val headerY = childrenY[0]
495
+ val contentY = childrenY[1]
496
+
497
+ return layout(
498
+ width = layoutWidth,
499
+ height = layoutHeight,
500
+ ) {
501
+ val progress = animationOption?.progress?.value ?: 1f
502
+
503
+ val startX = spacing12
504
+ val startY = headerY + statusBarPx
505
+ var curX = startX
506
+ var curY = startY
507
+
508
+ contentPlaceable?.place(
509
+ x = horizontalAlignment.align(
510
+ size = contentPlaceable.width,
511
+ space = layoutWidth,
512
+ layoutDirection = layoutDirection,
513
+ ),
514
+ y = contentY,
515
+ )
516
+
517
+ backgroundPlaceable?.place(
518
+ x = 0,
519
+ y = headerY,
520
+ )
521
+
522
+ if (backIconPlaceable != null) {
523
+ backIconPlaceable.place(
524
+ x = startX,
525
+ y = startY + backIconPlaceable.verticalCenterOffset(headerRowDefault),
526
+ )
527
+ curX += backIconPlaceable.safeWidth + spaceBetween
528
+ }
529
+
530
+ headerRightPlaceable?.place(
531
+ x = layoutWidth - spacing12 - headerRightPlaceable.safeWidth,
532
+ y = startY + headerRightPlaceable.verticalCenterOffset(headerRowDefault),
533
+ )
534
+
535
+ val titleOffset = IntOffset(
536
+ x = if (titlePosition == TitlePosition.LEFT) curX
537
+ else titlePlaceable.horizontalCenterOffset(
538
+ space = layoutWidth,
539
+ layoutDirection = layoutDirection,
540
+ ),
541
+ y = startY + titlePlaceable.verticalCenterOffset(headerRowDefault),
542
+ )
543
+
544
+ titlePlaceable?.place(titleOffset)
545
+
546
+ if (backIconPlaceable != null || headerRightPlaceable != null || titlePlaceable != null) {
547
+ curY += headerRowDefault
548
+ }
549
+
550
+ val inputSearchOffset = if (isHeaderExtend) {
551
+ val baseY = curY + inputSearchPlaceable.verticalCenterOffset(headerRowDefault)
552
+ val y = (baseY * (1 - scrollPercent)).toInt().coerceAtLeast(
553
+ startY + inputSearchPlaceable.verticalCenterOffset(headerRowDefault)
554
+ )
555
+ IntOffset(
556
+ x = startX + ((backIconPlaceable.safeWidth + spaceBetween) * (scrollPercent * 2f).coerceIn(
557
+ 0f, 1f
558
+ )).toInt(),
559
+ y = y,
560
+ )
561
+ } else {
562
+ IntOffset(
563
+ x = curX,
564
+ y = startY + inputSearchPlaceable.verticalCenterOffset(headerRowDefault),
565
+ )
566
+ }
567
+ val finalPosition = lerp(
568
+ searchStartPosition,
569
+ inputSearchOffset,
570
+ progress,
571
+ )
572
+
573
+ inputSearchPlaceable?.place(
574
+ finalPosition
575
+ )
576
+ }
577
+ }
578
+
579
+ private val Placeable?.safeHeight
580
+ get() = this?.height ?: 0
581
+ private val Placeable?.safeWidth
582
+ get() = this?.width ?: 0
583
+
584
+ private fun Constraints.withAnimationTargetBounds(): Constraints {
585
+ val option = animationOption ?: return this
586
+ val progress = option.progress.value
587
+ if (progress >= 1f) return this
588
+
589
+ val targetWidth = option.targetBounds.width.roundToInt().coerceAtLeast(0)
590
+ val targetHeight = option.targetBounds.height.roundToInt().coerceAtLeast(0)
591
+ val animatedMinWidth = lerpPx(targetWidth, minWidth, progress)
592
+ .coerceInBounds(maxWidth)
593
+ val animatedMaxWidth = lerpMaxPx(targetWidth, maxWidth, progress)
594
+ .coerceAtLeast(animatedMinWidth)
595
+ val animatedMinHeight = lerpPx(targetHeight, minHeight, progress)
596
+ .coerceInBounds(maxHeight)
597
+ val animatedMaxHeight = lerpMaxPx(targetHeight, maxHeight, progress)
598
+ .coerceAtLeast(animatedMinHeight)
599
+
600
+ return copy(
601
+ minWidth = animatedMinWidth,
602
+ maxWidth = animatedMaxWidth,
603
+ minHeight = animatedMinHeight,
604
+ maxHeight = animatedMaxHeight,
605
+ )
606
+ }
607
+
608
+ private fun lerpPx(
609
+ start: Int,
610
+ stop: Int,
611
+ fraction: Float,
612
+ ): Int = androidx.compose.ui.util.lerp(
613
+ start.toFloat(),
614
+ stop.toFloat(),
615
+ fraction,
616
+ ).roundToInt()
617
+
618
+ private fun lerpMaxPx(
619
+ start: Int,
620
+ stop: Int,
621
+ fraction: Float,
622
+ ): Int {
623
+ if (stop == Constraints.Infinity) return Constraints.Infinity
624
+ return lerpPx(start, stop, fraction)
625
+ }
626
+
627
+ private fun Int.coerceInBounds(max: Int): Int {
628
+ if (max == Constraints.Infinity) return coerceAtLeast(0)
629
+ return coerceIn(0, max)
630
+ }
631
+
632
+ private fun Placeable?.verticalCenterOffset(space: Int): Int {
633
+ if (this == null) return 0
634
+ return Alignment.CenterVertically.align(safeHeight, space)
635
+ }
636
+
637
+ private fun Placeable?.horizontalCenterOffset(
638
+ space: Int,
639
+ layoutDirection: LayoutDirection
640
+ ): Int {
641
+ if (this == null) return 0
642
+ return Alignment.CenterHorizontally.align(safeWidth, space, layoutDirection)
643
+ }
644
+ }
645
+
646
+ private val EMPTY_FUNC = {}
647
+
648
+ @Stable
649
+ data class LiteInputSearchProps(
650
+ val textFieldState: MutableState<String>,
651
+ val onValueChange: (String) -> Unit,
652
+ val onClear: () -> Unit = EMPTY_FUNC,
653
+ val clearCondition: (() -> Boolean)? = null,
654
+ val modifier: Modifier = Modifier,
655
+ val onFocused: (() -> Unit) = EMPTY_FUNC,
656
+ val keyboardOptions: KeyboardOptions = KeyboardOptions.Default,
657
+ val keyboardActions: KeyboardActions = KeyboardActions.Default,
658
+ val onKeyboardAction: (() -> Unit) = EMPTY_FUNC,
659
+
660
+ val btnText: String? = null,
661
+ val isShowBtnText: Boolean = !btnText.isNullOrEmpty(),
662
+ val onPressBtnText: (() -> Unit) = EMPTY_FUNC,
663
+
664
+ val disabled: Boolean = false,
665
+
666
+ val placeHolder: String? = null,
667
+
668
+ val cursorBrush: Brush? = null,
669
+ val customBackIcon: @Composable ((Modifier) -> Unit)? = null,
670
+ val customSearchIcon: @Composable (() -> Unit)? = null,
671
+ val customPlaceHolder: @Composable (() -> Unit)? = null,
672
+ val customTextStyle: TextStyle? = null,
673
+ val customIconClear: @Composable (() -> Unit)? = null,
674
+ val iconRightTextField: @Composable ((Modifier) -> Unit)? = null,
675
+ )
676
+
677
+ @Composable
678
+ private fun LiteInputSearch(
679
+ modifier: Modifier = Modifier,
680
+ inputSearchProps: LiteInputSearchProps? = null,
681
+ ) {
682
+ inputSearchProps ?: return
683
+ val theme = AppTheme.current
684
+
685
+ val isFocused = remember { mutableStateOf(false) }
686
+ val interactionSource = remember { MutableInteractionSource() }
687
+ val textState by remember { inputSearchProps.textFieldState }
688
+
689
+ val isShowBtnText by remember(inputSearchProps.isShowBtnText, inputSearchProps.btnText) {
690
+ derivedStateOf {
691
+ inputSearchProps.isShowBtnText && !inputSearchProps.btnText.isNullOrEmpty()
692
+ }
693
+ }
694
+ val inputFieldFontFamily = getFontFamily(theme.font, Typography.bodyDefaultRegular.fontWeight)
695
+ val inputFieldStyle = remember(theme, inputFieldFontFamily) {
696
+ Typography.bodyDefaultRegular.copy(
697
+ color = theme.colors.text.default,
698
+ fontFamily = inputFieldFontFamily,
699
+ )
700
+ }
701
+
702
+ LaunchedEffect(inputSearchProps.onFocused) {
703
+ interactionSource.interactions.mapNotNull { it as? FocusInteraction }.collectLatest {
704
+ val isFocus = it is FocusInteraction.Focus
705
+ isFocused.value = isFocus
706
+ if (isFocus) inputSearchProps.onFocused()
707
+ }
708
+ }
709
+
710
+ Row(
711
+ modifier = modifier,
712
+ verticalAlignment = Alignment.CenterVertically,
713
+ ) {
714
+ val textFieldModifier = remember(inputSearchProps.modifier) {
715
+ inputSearchProps.modifier
716
+ .weight(1f)
717
+ }
718
+ BasicTextField(
719
+ value = textState,
720
+ onValueChange = inputSearchProps.onValueChange,
721
+ enabled = !inputSearchProps.disabled,
722
+ keyboardOptions = inputSearchProps.keyboardOptions,
723
+ keyboardActions = inputSearchProps.keyboardActions,
724
+ modifier = textFieldModifier,
725
+ textStyle = inputSearchProps.customTextStyle ?: inputFieldStyle,
726
+ singleLine = true,
727
+ cursorBrush = inputSearchProps.cursorBrush ?: SolidColor(Color.Black),
728
+ interactionSource = interactionSource,
729
+ decorationBox = { innerTextField ->
730
+ val isShowClear by remember(inputSearchProps.clearCondition, isFocused.value) {
731
+ derivedStateOf {
732
+ inputSearchProps.clearCondition?.invoke() == true || (isFocused.value && textState.isNotEmpty())
733
+ }
734
+ }
735
+ val placeHolder by produceState<String?>(null, inputSearchProps.placeHolder) {
736
+ if (inputSearchProps.placeHolder.isNullOrEmpty()) return@produceState
737
+ snapshotFlow { textState }.collectLatest {
738
+ value = if (it.isEmpty()) inputSearchProps.placeHolder else null
739
+ }
740
+ }
741
+ val iconRightModifier = remember {
742
+ Modifier
743
+ .padding(start = Spacing.L)
744
+ .drawWithContent {
745
+ val offsetX = -Spacing.S.toPx()
746
+ drawLine(
747
+ start = Offset(
748
+ x = offsetX,
749
+ y = 0f,
750
+ ),
751
+ end = Offset(
752
+ x = offsetX,
753
+ y = size.height,
754
+ ),
755
+ color = theme.colors.primary,
756
+ strokeWidth = 1.dp.toPx(),
757
+ )
758
+ drawContent()
759
+ }
760
+ }
761
+
762
+ Row(
763
+ modifier = Modifier
764
+ .padding(
765
+ horizontal = Spacing.M,
766
+ vertical = Spacing.S,
767
+ ),
768
+ horizontalArrangement = Arrangement.Start,
769
+ verticalAlignment = Alignment.CenterVertically,
770
+ ) {
771
+ inputSearchProps.customSearchIcon?.invoke() ?: Icon(
772
+ source = "navigation_search",
773
+ modifier = Modifier.padding(end = Spacing.XS),
774
+ size = 24.dp,
775
+ color = theme.colors.text.hint
776
+ )
777
+ Box(
778
+ modifier = Modifier.weight(1f),
779
+ contentAlignment = Alignment.CenterStart,
780
+ ) {
781
+ if (!placeHolder.isNullOrEmpty()) {
782
+ inputSearchProps.customPlaceHolder?.invoke() ?: Text(
783
+ text = placeHolder ?: "",
784
+ style = inputSearchProps.customTextStyle
785
+ ?: Typography.bodyDefaultRegular,
786
+ maxLines = 1,
787
+ color = theme.colors.text.hint,
788
+ overflow = TextOverflow.Ellipsis
789
+ )
790
+ }
791
+ innerTextField()
792
+ }
793
+
794
+ if (isShowClear) {
795
+ inputSearchProps.customIconClear?.invoke() ?: Icon(
796
+ source = "24_navigation_close_circle_full",
797
+ size = 16.dp,
798
+ color = theme.colors.text.hint,
799
+ modifier = Modifier.padding(start = Spacing.XS)
800
+ .noFeedbackClickable(onClick = inputSearchProps.onClear),
801
+ )
802
+ }
803
+
804
+ inputSearchProps.iconRightTextField?.invoke(iconRightModifier)
805
+ }
806
+ }
807
+ )
808
+
809
+ if (isShowBtnText) {
810
+ Text(
811
+ text = inputSearchProps.btnText ?: "",
812
+ style = Typography.actionDefaultBold,
813
+ color = theme.colors.text.default,
814
+ modifier = Modifier.padding(start = Spacing.L)
815
+ .noFeedbackClickable(onClick = inputSearchProps.onPressBtnText)
816
+ )
817
+ }
818
+ }
819
+ }
820
+
821
+ fun Modifier.hideKeyboardOnTap() = composed {
822
+ val focusManager = LocalFocusManager.current
823
+ val keyboardManager = LocalSoftwareKeyboardController.current
824
+
825
+ pointerInput(Unit) {
826
+ detectTapGestures {
827
+ keyboardManager?.hide()
828
+ focusManager.clearFocus()
829
+ }
830
+ }
831
+ }