@momo-kits/native-kits 0.162.2-beta.1 → 0.162.2-sp.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 (295) hide show
  1. package/.claude/settings.local.json +55 -0
  2. package/build.gradle.kts +11 -0
  3. package/compose/build.gradle.kts +186 -0
  4. package/compose/build.gradle.kts.backup +186 -0
  5. package/compose/compose.podspec +47 -0
  6. package/compose/src/androidMain/kotlin/vn/momo/kits/navigation/ScrollToTop.android.kt +6 -0
  7. package/compose/src/androidMain/kotlin/vn/momo/kits/platform/Platform.android.kt +123 -0
  8. package/compose/src/commonMain/composeResources/font/momosignature.otf +0 -0
  9. package/compose/src/commonMain/composeResources/font/momotrustdisplay.otf +0 -0
  10. package/compose/src/commonMain/composeResources/font/sfprotext_black.otf +0 -0
  11. package/compose/src/commonMain/composeResources/font/sfprotext_black.ttf +0 -0
  12. package/compose/src/commonMain/composeResources/font/sfprotext_bold.ttf +0 -0
  13. package/compose/src/commonMain/composeResources/font/sfprotext_heavy.ttf +0 -0
  14. package/compose/src/commonMain/composeResources/font/sfprotext_light.ttf +0 -0
  15. package/compose/src/commonMain/composeResources/font/sfprotext_medium.ttf +0 -0
  16. package/compose/src/commonMain/composeResources/font/sfprotext_regular.ttf +0 -0
  17. package/compose/src/commonMain/composeResources/font/sfprotext_semibold.ttf +0 -0
  18. package/compose/src/commonMain/composeResources/font/sfprotext_thin.otf +0 -0
  19. package/compose/src/commonMain/composeResources/font/sfprotext_thin.ttf +0 -0
  20. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.otf +0 -0
  21. package/compose/src/commonMain/composeResources/font/sfprotext_ultralight.ttf +0 -0
  22. package/compose/src/commonMain/kotlin/vn/momo/kits/application/AnimationSearchInput.kt +57 -0
  23. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Context.kt +109 -0
  24. package/compose/src/commonMain/kotlin/vn/momo/kits/application/FloatingButton.kt +201 -0
  25. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Header.kt +222 -0
  26. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderAnimated.kt +48 -0
  27. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderBackground.kt +86 -0
  28. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderDefault.kt +76 -0
  29. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderExtended.kt +76 -0
  30. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderRight.kt +305 -0
  31. package/compose/src/commonMain/kotlin/vn/momo/kits/application/HeaderTitle.kt +33 -0
  32. package/compose/src/commonMain/kotlin/vn/momo/kits/application/LiteScreen.kt +921 -0
  33. package/compose/src/commonMain/kotlin/vn/momo/kits/application/NavigationContainer.kt +121 -0
  34. package/compose/src/commonMain/kotlin/vn/momo/kits/application/Screen.kt +403 -0
  35. package/compose/src/commonMain/kotlin/vn/momo/kits/application/useHeaderSearchAnimation.kt +69 -0
  36. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Avatar.kt +157 -0
  37. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Badge.kt +85 -0
  38. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeDot.kt +32 -0
  39. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BadgeRibbon.kt +340 -0
  40. package/compose/src/commonMain/kotlin/vn/momo/kits/components/BaselineView.kt +198 -0
  41. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Button.kt +357 -0
  42. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Carousel.kt +123 -0
  43. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CheckBox.kt +94 -0
  44. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Chip.kt +136 -0
  45. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Collapse.kt +224 -0
  46. package/compose/src/commonMain/kotlin/vn/momo/kits/components/CupertinoOverscroll.kt +543 -0
  47. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Divider.kt +23 -0
  48. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Icon.kt +76 -0
  49. package/compose/src/commonMain/kotlin/vn/momo/kits/components/IconButton.kt +148 -0
  50. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Image.kt +188 -0
  51. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Information.kt +116 -0
  52. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Input.kt +452 -0
  53. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputDropDown.kt +172 -0
  54. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputMoney.kt +255 -0
  55. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputOTP.kt +235 -0
  56. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputPhoneNumber.kt +233 -0
  57. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputSearch.kt +259 -0
  58. package/compose/src/commonMain/kotlin/vn/momo/kits/components/InputTextArea.kt +241 -0
  59. package/compose/src/commonMain/kotlin/vn/momo/kits/components/LazyColumnWithBouncing.kt +364 -0
  60. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Loader.kt +108 -0
  61. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationDot.kt +56 -0
  62. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationNumber.kt +41 -0
  63. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationScroll.kt +92 -0
  64. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PaginationWhiteDot.kt +40 -0
  65. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupNotify.kt +352 -0
  66. package/compose/src/commonMain/kotlin/vn/momo/kits/components/PopupPromotion.kt +103 -0
  67. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ProgressInfo.kt +338 -0
  68. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Radio.kt +70 -0
  69. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Rating.kt +87 -0
  70. package/compose/src/commonMain/kotlin/vn/momo/kits/components/ScaleSizeScope.kt +17 -0
  71. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Skeleton.kt +96 -0
  72. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Slider.kt +348 -0
  73. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Stepper.kt +256 -0
  74. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Steps.kt +494 -0
  75. package/compose/src/commonMain/kotlin/vn/momo/kits/components/SuggestAction.kt +131 -0
  76. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Swipe.kt +215 -0
  77. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Switch.kt +96 -0
  78. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TabView.kt +531 -0
  79. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tag.kt +92 -0
  80. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Text.kt +135 -0
  81. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Title.kt +214 -0
  82. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Tooltip.kt +590 -0
  83. package/compose/src/commonMain/kotlin/vn/momo/kits/components/TrustBanner.kt +177 -0
  84. package/compose/src/commonMain/kotlin/vn/momo/kits/components/Uploader.kt +192 -0
  85. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePicker.kt +205 -0
  86. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerTypes.kt +29 -0
  87. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/DateTimePickerUtils.kt +239 -0
  88. package/compose/src/commonMain/kotlin/vn/momo/kits/components/datetimepicker/WheelPicker.kt +191 -0
  89. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Colors.kt +306 -0
  90. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Radius.kt +12 -0
  91. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Spacing.kt +16 -0
  92. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Theme.kt +188 -0
  93. package/compose/src/commonMain/kotlin/vn/momo/kits/const/Typography.kt +285 -0
  94. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Card.kt +2 -0
  95. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Item.kt +35 -0
  96. package/compose/src/commonMain/kotlin/vn/momo/kits/layout/Section.kt +2 -0
  97. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/AutomationId.kt +57 -0
  98. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Clickable.kt +68 -0
  99. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Conditional.kt +11 -0
  100. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/DeprecatedModifier.kt +14 -0
  101. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Shadow.kt +50 -0
  102. package/compose/src/commonMain/kotlin/vn/momo/kits/modifier/Size.kt +51 -0
  103. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/BottomSheet.kt +253 -0
  104. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ModalScreen.kt +133 -0
  105. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigation.kt +104 -0
  106. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/NavigationContainer.kt +145 -0
  107. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/Navigator.kt +345 -0
  108. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/ScrollToTop.kt +8 -0
  109. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/StackScreen.kt +556 -0
  110. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTab.kt +161 -0
  111. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/BottomTabBar.kt +243 -0
  112. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/bottomtab/CurvedContainer.kt +86 -0
  113. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/FloatingButton.kt +187 -0
  114. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/Header.kt +315 -0
  115. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderBackground.kt +80 -0
  116. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderRight.kt +306 -0
  117. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderTitle.kt +34 -0
  118. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/HeaderUser.kt +370 -0
  119. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/component/SnackBar.kt +131 -0
  120. package/compose/src/commonMain/kotlin/vn/momo/kits/navigation/tracking/ScreenTracker.kt +167 -0
  121. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/ComposeLottieAnimation.kt +72 -0
  122. package/compose/src/commonMain/kotlin/vn/momo/kits/platform/Platform.kt +66 -0
  123. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Icons.kt +1329 -0
  124. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Resources.kt +70 -0
  125. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Tracking.kt +15 -0
  126. package/compose/src/commonMain/kotlin/vn/momo/kits/utils/Utils.kt +105 -0
  127. package/compose/src/iosMain/kotlin/vn/momo/kits/navigation/ScrollToTop.ios.kt +33 -0
  128. package/compose/src/iosMain/kotlin/vn/momo/kits/platform/Platform.ios.kt +186 -0
  129. package/gradle/libs.versions.toml +67 -0
  130. package/gradle/wrapper/gradle-wrapper.jar +0 -0
  131. package/gradle/wrapper/gradle-wrapper.properties +8 -0
  132. package/gradle.properties +26 -0
  133. package/gradlew +252 -0
  134. package/gradlew.bat +94 -0
  135. package/ios/Application/Components.swift +34 -43
  136. package/ios/Application/FloatingButton.swift +10 -8
  137. package/ios/Application/Navigation/BottomTab/BottomTab.swift +102 -0
  138. package/ios/Application/Navigation/BottomTab/BottomTabBar.swift +215 -0
  139. package/ios/Application/Navigation/BottomTab/CurvedContainer.swift +65 -0
  140. package/ios/Application/Navigation/HeaderBackProps.swift +66 -0
  141. package/ios/Application/Navigation/HeaderTitle.swift +57 -0
  142. package/ios/Application/Navigation/HeaderUser.swift +209 -0
  143. package/ios/Application/Navigation/NavigationContainer.swift +151 -0
  144. package/ios/Application/Navigation/NavigationOptions.swift +109 -0
  145. package/ios/Application/Navigation/Navigator.swift +360 -0
  146. package/ios/Application/Navigation/Overplay/BottomSheet.swift +176 -0
  147. package/ios/Application/Navigation/Overplay/ModalScreen.swift +68 -0
  148. package/ios/Application/Navigation/Overplay/SnackBar.swift +144 -0
  149. package/ios/Application/Navigation/component/Header.swift +178 -0
  150. package/ios/Application/Navigation/component/HeaderBackground.swift +83 -0
  151. package/ios/Application/Navigation/component/HeaderColor.swift +65 -0
  152. package/ios/Application/StackScreen.swift +449 -0
  153. package/ios/Avatar/Avatar.swift +193 -0
  154. package/ios/Badge/Badge.swift +11 -13
  155. package/ios/Badge/BadgeRibbon.swift +12 -19
  156. package/ios/BaselineView/BaselineView.swift +163 -0
  157. package/ios/Button/Button.swift +62 -23
  158. package/ios/Carousel/Carousel.swift +181 -0
  159. package/ios/Checkbox/Checkbox.swift +14 -12
  160. package/ios/Chip/Chip.swift +23 -9
  161. package/ios/Collapse/Collapse.swift +182 -0
  162. package/ios/Colors+Radius+Spacing/Colors.swift +1 -1
  163. package/ios/Colors+Radius+Spacing/Theme.swift +295 -0
  164. package/ios/DateTimePicker/DateTimePicker.swift +210 -0
  165. package/ios/DateTimePicker/DateTimePickerTypes.swift +55 -0
  166. package/ios/DateTimePicker/DateTimePickerUtils.swift +167 -0
  167. package/ios/DateTimePicker/WheelPicker.swift +161 -0
  168. package/ios/Divider/Divider.swift +16 -0
  169. package/ios/Icon/Icon.swift +6 -1
  170. package/ios/IconButton/IconButton.swift +112 -0
  171. package/ios/Information/Information.swift +151 -0
  172. package/ios/Input/Input.swift +42 -25
  173. package/ios/Input/InputPhoneNumber.swift +21 -19
  174. package/ios/Input/InputSearch.swift +101 -45
  175. package/ios/Input/InputTextArea.swift +67 -40
  176. package/ios/InputDropDown/InputDropDown.swift +198 -0
  177. package/ios/InputMoney/InputMoney.swift +335 -0
  178. package/ios/InputOTP/InputOTP.swift +210 -0
  179. package/ios/Loader/Loader.swift +113 -0
  180. package/ios/MoMoUIKits.podspec +5 -0
  181. package/ios/OTPKeyboard/KeyboardButton.swift +1 -1
  182. package/ios/Pagination/PaginationDot.swift +61 -0
  183. package/ios/Pagination/PaginationNumber.swift +35 -0
  184. package/ios/Pagination/PaginationScroll.swift +101 -0
  185. package/ios/Pagination/PaginationWhiteDot.swift +37 -0
  186. package/ios/Popup/PopupDisplay.swift +10 -12
  187. package/ios/Popup/PopupInput.swift +2 -6
  188. package/ios/Popup/PopupNotify.swift +219 -0
  189. package/ios/ProgressInfo/ProgressInfo.swift +294 -0
  190. package/ios/Radio/Radio.swift +70 -0
  191. package/ios/Rating/Rating.swift +82 -0
  192. package/ios/Skeleton/Skeleton.swift +99 -0
  193. package/ios/Slider/Slider.swift +237 -0
  194. package/ios/Stepper/Stepper.swift +220 -0
  195. package/ios/Steps/Steps.swift +451 -0
  196. package/ios/SuggestAction/SuggestAction.swift +97 -0
  197. package/ios/Swipeable/SwipeCell.swift +185 -0
  198. package/ios/Swipeable/SwipeCellModel.swift +21 -0
  199. package/ios/TabView/TabView.swift +530 -0
  200. package/ios/Tag/Tag.swift +98 -0
  201. package/ios/Template/TrustBanner/TrustBanner.swift +2 -0
  202. package/ios/Title/Title.swift +269 -0
  203. package/ios/Tooltip/Tooltip.swift +482 -0
  204. package/ios/Typography/Text.swift +86 -24
  205. package/ios/Typography/Typography.swift +31 -6
  206. package/ios/Uploader/Uploader.swift +183 -0
  207. package/ios/native-kits.podspec +58 -8
  208. package/ios-demo/MoMoUIKitsDemo.podspec +18 -0
  209. package/ios-demo/README.md +120 -0
  210. package/ios-demo/Resources/dot_loading.json +558 -0
  211. package/ios-demo/Resources/icon.json +4052 -0
  212. package/ios-demo/Resources/lottie_circle_loader.json +1 -0
  213. package/ios-demo/Sources/MoMoUIKitsDemo/DemoScaffold.swift +48 -0
  214. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsBadgeDemoView.swift +25 -0
  215. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsButtonDemoView.swift +26 -0
  216. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsCheckboxDemoView.swift +19 -0
  217. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsChipDemoView.swift +33 -0
  218. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsInputDemoView.swift +48 -0
  219. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsPopupDemoView.swift +21 -0
  220. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsRadioDemoView.swift +17 -0
  221. package/ios-demo/Sources/MoMoUIKitsDemo/Demos/UIKitsTypographyDemoView.swift +28 -0
  222. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoContext.swift +31 -0
  223. package/ios-demo/Sources/MoMoUIKitsDemo/MoMoUIKitsDemoFactory.swift +72 -0
  224. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AnimatedHeaderDemo.swift +110 -0
  225. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/AvatarDemo.swift +93 -0
  226. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BadgeDemo.swift +269 -0
  227. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BaselineView.swift +117 -0
  228. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/BottomTabDemo.swift +89 -0
  229. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ButtonDemo.swift +100 -0
  230. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CarouselDemo.swift +126 -0
  231. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CheckboxDemo.swift +63 -0
  232. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ChipDemo.swift +20 -0
  233. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/CollapseDemo.swift +93 -0
  234. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ContentView.swift +107 -0
  235. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DateTimePickerDemo.swift +124 -0
  236. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/DividerDemo.swift +14 -0
  237. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/HeaderUserDemo.swift +49 -0
  238. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/Home.swift +261 -0
  239. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/IconButtonDemo.swift +58 -0
  240. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ImageDemo.swift +78 -0
  241. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InformationDemo.swift +138 -0
  242. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDemo.swift +111 -0
  243. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputDropDownDemo.swift +136 -0
  244. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputMoneyDemo.swift +107 -0
  245. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputOTPDemo.swift +73 -0
  246. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputPhoneNumberDemo.swift +100 -0
  247. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputSearchDemo.swift +32 -0
  248. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/InputTextAreaDemo.swift +57 -0
  249. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/LoaderDemo.swift +70 -0
  250. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/NavigationDemo.swift +227 -0
  251. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PaginationDemo.swift +72 -0
  252. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupDisplayDemo.swift +175 -0
  253. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupNotifyDemo.swift +121 -0
  254. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/PopupPromotionDemo.swift +76 -0
  255. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ProgressInfoDemo.swift +89 -0
  256. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RadioDemo.swift +32 -0
  257. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/RatingDemo.swift +56 -0
  258. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SkeletonDemo.swift +32 -0
  259. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SliderDemo.swift +150 -0
  260. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SnackBarDemo.swift +138 -0
  261. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepperDemo.swift +103 -0
  262. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/StepsDemo.swift +94 -0
  263. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SuggestActionDemo.swift +79 -0
  264. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwipeDemo.swift +152 -0
  265. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/SwitchDemo.swift +33 -0
  266. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TabViewDemo.swift +190 -0
  267. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TagDemo.swift +34 -0
  268. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/ThemeDemo.swift +182 -0
  269. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TitleDemo.swift +109 -0
  270. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TooltipDemo.swift +187 -0
  271. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/TypographyDemo.swift +87 -0
  272. package/ios-demo/Sources/MoMoUIKitsDemo/SampleDemos/UploaderDemo.swift +131 -0
  273. package/ios-demo/Sources/MoMoUIKitsDemo/SwiftUIDemoBrowserView.swift +50 -0
  274. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoModels.swift +15 -0
  275. package/ios-demo/Sources/MoMoUIKitsDemo/UIKitsDemoRegistry.swift +73 -0
  276. package/local.properties +8 -0
  277. package/package.json +1 -1
  278. package/publish.sh +50 -0
  279. package/scripts/gen-ios-color.mjs +136 -0
  280. package/settings.gradle.kts +64 -0
  281. package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Example.xcscheme +0 -32
  282. package/example/ios/Example.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  283. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  284. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/WorkspaceSettings.xcsettings +0 -16
  285. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +0 -6
  286. package/example/ios/Example.xcworkspace/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +0 -5
  287. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/MoMoUIKits.xcscheme +0 -58
  288. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/Pods-Example.xcscheme +0 -58
  289. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImage.xcscheme +0 -58
  290. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SDWebImageSwiftUI.xcscheme +0 -58
  291. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/SkeletonUI.xcscheme +0 -58
  292. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios-LottiePrivacyInfo.xcscheme +0 -58
  293. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/lottie-ios.xcscheme +0 -58
  294. package/example/ios/Pods/Pods.xcodeproj/xcuserdata/sonnguyen.xcuserdatad/xcschemes/xcschememanagement.plist +0 -60
  295. package/ios/Typography/MomoFontScale.swift +0 -36
@@ -2,6 +2,7 @@ import Foundation
2
2
  import SwiftUI
3
3
 
4
4
  public struct Checkbox: View{
5
+ @Environment(\.appTheme) private var theme
5
6
  @Binding var checked: Bool
6
7
  var disabled: Bool
7
8
  var onChange: ((Bool)->Void)?
@@ -37,11 +38,11 @@ public struct Checkbox: View{
37
38
  )
38
39
 
39
40
  if checked {
40
- Image(systemName: indeterminate ? "minus.square.fill" : "checkmark.square.fill")
41
+ Image(systemName: indeterminate ? "minus" : "checkmark")
41
42
  .resizable()
42
- .foregroundColor(backgroundColor)
43
- .background(Colors.black01)
44
- .frame(width: 20, height: 20)
43
+ .scaledToFit()
44
+ .foregroundColor(Colors.black01)
45
+ .frame(width: 12, height: 12)
45
46
  }
46
47
  }
47
48
 
@@ -53,27 +54,28 @@ public struct Checkbox: View{
53
54
 
54
55
  // Title
55
56
  if !title.isEmpty {
56
- Text(title)
57
- .font(.description1)
57
+ MomoText(title, typography: .descriptionDefaultRegular)
58
58
  }
59
59
  }
60
60
  }
61
61
 
62
62
  private var borderColor: Color {
63
- if disabled {
64
- return Colors.black03
63
+ if disabled && checked {
64
+ return theme.colors.background.tonal
65
+ } else if disabled {
66
+ return theme.colors.border.disable
65
67
  } else if checked {
66
- return Colors.primary
68
+ return theme.colors.primary
67
69
  } else {
68
- return Colors.text
70
+ return theme.colors.text.default
69
71
  }
70
72
  }
71
73
 
72
74
  private var backgroundColor: Color {
73
75
  if disabled && checked {
74
- return Colors.pink08
76
+ return theme.colors.background.tonal
75
77
  } else if checked {
76
- return Colors.primary
78
+ return theme.colors.primary
77
79
  } else {
78
80
  return Color.clear
79
81
  }
@@ -2,17 +2,18 @@ import SwiftUI
2
2
  import Foundation
3
3
 
4
4
  public struct Chip: View {
5
+ @Environment(\.appTheme) private var theme
5
6
  public enum ChipSize { case small, large }
6
7
 
7
8
  public struct Dimensions {
9
+ let height: CGFloat
8
10
  let horizontal: CGFloat
9
- let vertical: CGFloat
10
11
  let iconSize: CGFloat
11
12
  let iconSpacing: CGFloat
12
13
  }
13
14
 
14
- public static let Large = Dimensions(horizontal: 12, vertical: 8, iconSize: 20, iconSpacing: 8)
15
- public static let Small = Dimensions(horizontal: 10, vertical: 6, iconSize: 16, iconSpacing: 6)
15
+ public static let Large = Dimensions(height: 32, horizontal: 12, iconSize: 20, iconSpacing: 4)
16
+ public static let Small = Dimensions(height: 24, horizontal: 10, iconSize: 16, iconSpacing: 4)
16
17
 
17
18
  private let label: String?
18
19
  private let iconLeft: String?
@@ -53,14 +54,14 @@ public struct Chip: View {
53
54
  let dims = (size == .small) ? Self.Small : Self.Large
54
55
 
55
56
  let bg: Color = {
56
- if selected { return Colors.pink10 }
57
+ if selected { return theme.colors.background.selected }
57
58
  if let explicit = backgroundColor { return explicit }
58
59
  return Colors.black03
59
60
  }()
60
61
 
61
- let textColor: Color = selected ? Colors.primary : Colors.text
62
- let leftTint: Color = selected ? Colors.primary : iconLeftTint ?? Colors.text
63
- let rightTint: Color = selected ? Colors.primary : iconRightTint ?? Colors.text
62
+ let textColor: Color = selected ? theme.colors.primary : theme.colors.text.default
63
+ let leftTint: Color = selected ? theme.colors.primary : iconLeftTint ?? theme.colors.text.default
64
+ let rightTint: Color = selected ? theme.colors.primary : iconRightTint ?? theme.colors.text.default
64
65
 
65
66
  HStack(spacing: dims.iconSpacing) {
66
67
  if let iconLeft {
@@ -77,7 +78,7 @@ public struct Chip: View {
77
78
  }
78
79
  }
79
80
  .padding(.horizontal, dims.horizontal)
80
- .padding(.vertical, dims.vertical)
81
+ .frame(height: dims.height)
81
82
  .background(
82
83
  RoundedRectangle(cornerRadius: Radius.L, style: .continuous)
83
84
  .fill(bg)
@@ -86,11 +87,24 @@ public struct Chip: View {
86
87
  Group {
87
88
  if selected {
88
89
  RoundedRectangle(cornerRadius: Radius.L, style: .continuous)
89
- .stroke(Colors.primary, lineWidth: 2)
90
+ .stroke(theme.colors.secondary, lineWidth: 2)
90
91
  }
91
92
  }
92
93
  )
93
94
  .contentShape(RoundedRectangle(cornerRadius: Radius.L, style: .continuous))
94
95
  .onTapGesture(perform: onClick)
96
+ .modifier(ChipAccessibilityModifier(accessibilityLabel: accessibilityLabel))
97
+ }
98
+ }
99
+
100
+ private struct ChipAccessibilityModifier: ViewModifier {
101
+ let accessibilityLabel: String?
102
+
103
+ func body(content: Content) -> some View {
104
+ if let id = accessibilityLabel {
105
+ content.accessibilityIdentifier(id)
106
+ } else {
107
+ content
108
+ }
95
109
  }
96
110
  }
@@ -0,0 +1,182 @@
1
+ import SwiftUI
2
+
3
+ public enum CollapseTitleSize {
4
+ case small
5
+ case medium
6
+ case large
7
+
8
+ var typography: TypographyStyle {
9
+ switch self {
10
+ case .small: return .headerSSemibold
11
+ case .medium: return .headerDefaultBold
12
+ case .large: return .headerMBold
13
+ }
14
+ }
15
+ }
16
+
17
+ public struct Collapse<Content: View>: View {
18
+ @Environment(\.appTheme) private var theme
19
+
20
+ private let title: String
21
+ private let description: String?
22
+ private let image: String?
23
+ private let imageSize: CGFloat
24
+ private let subTitle: String?
25
+ private let tagLabel: String?
26
+ private let tagColor: Tag.TagColor
27
+ private let showBorder: Bool
28
+ private let expandDefault: Bool
29
+ private let titleSize: CollapseTitleSize
30
+ private let useBackgroundCollapseButton: Bool
31
+ private let backgroundColor: Color?
32
+ private let titleColor: Color?
33
+ private let onPress: ((Bool) -> Void)?
34
+ private let content: (() -> Content)?
35
+
36
+ @State private var expanded: Bool
37
+
38
+ public init(
39
+ title: String,
40
+ description: String? = nil,
41
+ image: String? = nil,
42
+ imageSize: CGFloat = 24,
43
+ subTitle: String? = nil,
44
+ tagLabel: String? = nil,
45
+ tagColor: Tag.TagColor = .default,
46
+ showBorder: Bool = false,
47
+ expandDefault: Bool = false,
48
+ titleSize: CollapseTitleSize = .medium,
49
+ useBackgroundCollapseButton: Bool = false,
50
+ backgroundColor: Color? = nil,
51
+ titleColor: Color? = nil,
52
+ onPress: ((Bool) -> Void)? = nil,
53
+ @ViewBuilder content: @escaping () -> Content
54
+ ) {
55
+ self.title = title
56
+ self.description = description
57
+ self.image = image
58
+ self.imageSize = imageSize
59
+ self.subTitle = subTitle
60
+ self.tagLabel = tagLabel
61
+ self.tagColor = tagColor
62
+ self.showBorder = showBorder
63
+ self.expandDefault = expandDefault
64
+ self.titleSize = titleSize
65
+ self.useBackgroundCollapseButton = useBackgroundCollapseButton
66
+ self.backgroundColor = backgroundColor
67
+ self.titleColor = titleColor
68
+ self.onPress = onPress
69
+ self.content = content
70
+ _expanded = State(initialValue: expandDefault)
71
+ }
72
+
73
+ private var resolvedBackgroundColor: Color {
74
+ backgroundColor ?? theme.colors.background.surface
75
+ }
76
+
77
+ public var body: some View {
78
+ VStack(spacing: 0) {
79
+ header
80
+
81
+ if let content {
82
+ if expanded {
83
+ VStack(spacing: 0) {
84
+ content()
85
+ }
86
+ .frame(maxWidth: .infinity)
87
+ .overlay(
88
+ showBorder
89
+ ? RoundedRectangle(cornerRadius: 0)
90
+ .stroke(theme.colors.border.default, lineWidth: 1)
91
+ : nil
92
+ )
93
+ .transition(.move(edge: .top).combined(with: .opacity))
94
+ }
95
+ }
96
+ }
97
+ .frame(maxWidth: .infinity)
98
+ .background(resolvedBackgroundColor)
99
+ .clipShape(RoundedRectangle(cornerRadius: Radius.S, style: .continuous))
100
+ .overlay(
101
+ showBorder
102
+ ? RoundedRectangle(cornerRadius: Radius.S, style: .continuous)
103
+ .stroke(theme.colors.border.default, lineWidth: 1)
104
+ : nil
105
+ )
106
+ }
107
+
108
+ private var header: some View {
109
+ SwiftUI.Button(action: {
110
+ onPress?(expanded)
111
+ withAnimation(.easeInOut(duration: 0.3)) {
112
+ expanded.toggle()
113
+ }
114
+ }) {
115
+ HStack(alignment: .top, spacing: 0) {
116
+ if let image {
117
+ ImageView(image, contentMode: .fill)
118
+ .frame(width: imageSize, height: imageSize)
119
+ .clipShape(RoundedRectangle(cornerRadius: Radius.XS, style: .continuous))
120
+ Spacer().frame(width: Spacing.S)
121
+ }
122
+
123
+ VStack(alignment: .leading, spacing: 0) {
124
+ MomoText(
125
+ title,
126
+ typography: titleSize.typography,
127
+ color: titleColor ?? theme.colors.text.default
128
+ )
129
+ if let description {
130
+ MomoText(
131
+ description,
132
+ typography: .bodyDefaultRegular,
133
+ color: theme.colors.text.secondary
134
+ )
135
+ .lineLimit(2)
136
+ }
137
+ }
138
+ .frame(maxWidth: .infinity, alignment: .leading)
139
+
140
+ if subTitle != nil || tagLabel != nil {
141
+ Spacer().frame(width: Spacing.S)
142
+ if let subTitle {
143
+ MomoText(
144
+ subTitle,
145
+ typography: .bodyDefaultRegular,
146
+ color: theme.colors.text.secondary
147
+ )
148
+ .lineLimit(1)
149
+ } else if let tagLabel {
150
+ Tag(label: tagLabel, color: tagColor)
151
+ }
152
+ }
153
+
154
+ Spacer().frame(width: Spacing.S)
155
+ chevron
156
+ }
157
+ .padding(.horizontal, Spacing.M)
158
+ .padding(.vertical, Spacing.S)
159
+ .frame(maxWidth: .infinity)
160
+ .contentShape(Rectangle())
161
+ }
162
+ .buttonStyle(.plain)
163
+ }
164
+
165
+ private var chevron: some View {
166
+ Group {
167
+ if useBackgroundCollapseButton {
168
+ Icon(source: "arrow_chevron_down_small", size: 16, color: theme.colors.primary)
169
+ .rotationEffect(.degrees(expanded ? 180 : 0))
170
+ .frame(width: 24, height: 24)
171
+ .background(
172
+ RoundedRectangle(cornerRadius: Radius.M, style: .continuous)
173
+ .fill(theme.colors.background.tonal)
174
+ )
175
+ } else {
176
+ Icon(source: "arrow_chevron_down_small", size: 24, color: theme.colors.text.default)
177
+ .rotationEffect(.degrees(expanded ? 180 : 0))
178
+ }
179
+ }
180
+ .animation(.easeInOut(duration: 0.3), value: expanded)
181
+ }
182
+ }
@@ -9,7 +9,7 @@ public enum Colors {
9
9
  public static let secondary = Color("Secondary")
10
10
  public static let background = Color("Background")
11
11
  public static let border = Color("Border")
12
- public static let text = Color("Text")
12
+ public static let text = Color("ThemeColors/text-default")
13
13
  public static let textSecondary = Color("TextSecondary")
14
14
  public static let card = Color("Card")
15
15
  public static let error = Color("Error")
@@ -0,0 +1,295 @@
1
+ //
2
+ // Theme.swift
3
+ // MoMoUIKits
4
+ //
5
+ // Created by sophia on 25/2/26.
6
+ //
7
+
8
+ import Foundation
9
+ import SwiftUI
10
+
11
+ // MARK: - Background
12
+
13
+ public struct Background {
14
+ public let `default`: Color
15
+ public let surface: Color
16
+ public let tonal: Color
17
+ public let pressed: Color
18
+ public let selected: Color
19
+ public let disable: Color
20
+
21
+ public init(
22
+ default defaultColor: Color,
23
+ surface: Color,
24
+ tonal: Color,
25
+ pressed: Color,
26
+ selected: Color,
27
+ disable: Color
28
+ ) {
29
+ self.default = defaultColor
30
+ self.surface = surface
31
+ self.tonal = tonal
32
+ self.pressed = pressed
33
+ self.selected = selected
34
+ self.disable = disable
35
+ }
36
+ }
37
+
38
+ // MARK: - TextColors
39
+
40
+ public struct TextColors {
41
+ public let `default`: Color
42
+ public let secondary: Color
43
+ public let hint: Color
44
+ public let disable: Color
45
+
46
+ public init(
47
+ default defaultColor: Color,
48
+ secondary: Color,
49
+ hint: Color,
50
+ disable: Color
51
+ ) {
52
+ self.default = defaultColor
53
+ self.secondary = secondary
54
+ self.hint = hint
55
+ self.disable = disable
56
+ }
57
+ }
58
+
59
+ // MARK: - BorderColors
60
+
61
+ public struct BorderColors {
62
+ public let `default`: Color
63
+ public let disable: Color
64
+
65
+ public init(default defaultColor: Color, disable: Color) {
66
+ self.default = defaultColor
67
+ self.disable = disable
68
+ }
69
+ }
70
+
71
+ // MARK: - ColorSet
72
+
73
+ public struct ColorSet {
74
+ public let primary: Color
75
+ public let secondary: Color
76
+ public let container: Color
77
+
78
+ public init(primary: Color, secondary: Color, container: Color) {
79
+ self.primary = primary
80
+ self.secondary = secondary
81
+ self.container = container
82
+ }
83
+ }
84
+
85
+ // MARK: - ColorScheme
86
+
87
+ public struct ColorScheme {
88
+ public let primary: Color
89
+ public let secondary: Color
90
+ public let gradient: Color
91
+ public let background: Background
92
+ public let text: TextColors
93
+ public let border: BorderColors
94
+ public let success: ColorSet
95
+ public let warning: ColorSet
96
+ public let error: ColorSet
97
+ public let highlight: ColorSet
98
+ public let interactive: ColorSet
99
+
100
+ public init(
101
+ primary: Color,
102
+ secondary: Color,
103
+ gradient: Color,
104
+ background: Background,
105
+ text: TextColors,
106
+ border: BorderColors,
107
+ success: ColorSet,
108
+ warning: ColorSet,
109
+ error: ColorSet,
110
+ highlight: ColorSet,
111
+ interactive: ColorSet
112
+ ) {
113
+ self.primary = primary
114
+ self.secondary = secondary
115
+ self.gradient = gradient
116
+ self.background = background
117
+ self.text = text
118
+ self.border = border
119
+ self.success = success
120
+ self.warning = warning
121
+ self.error = error
122
+ self.highlight = highlight
123
+ self.interactive = interactive
124
+ }
125
+ }
126
+
127
+ // MARK: - ThemeAssets
128
+
129
+ public struct ThemeAssets {
130
+ public let headerBackground: String?
131
+
132
+ public init(headerBackground: String? = nil) {
133
+ self.headerBackground = headerBackground
134
+ }
135
+
136
+ public var isHeaderImage: Bool {
137
+ guard let url = headerBackground else { return false }
138
+ return !url.isEmpty
139
+ }
140
+ }
141
+
142
+ // MARK: - Theme
143
+
144
+ public struct Theme {
145
+ public let dark: Bool
146
+ public let colors: ColorScheme
147
+ public let font: String
148
+ public let assets: ThemeAssets
149
+
150
+ public init(dark: Bool, colors: ColorScheme, font: String, assets: ThemeAssets) {
151
+ self.dark = dark
152
+ self.colors = colors
153
+ self.font = font
154
+ self.assets = assets
155
+ }
156
+
157
+ public func copy(
158
+ dark: Bool? = nil,
159
+ colors: ColorScheme? = nil,
160
+ font: String? = nil,
161
+ assets: ThemeAssets? = nil
162
+ ) -> Theme {
163
+ Theme(
164
+ dark: dark ?? self.dark,
165
+ colors: colors ?? self.colors,
166
+ font: font ?? self.font,
167
+ assets: assets ?? self.assets
168
+ )
169
+ }
170
+ }
171
+
172
+ // MARK: - Default Theme (Light)
173
+
174
+ public let defaultTheme = Theme(
175
+ dark: false,
176
+ colors: ColorScheme(
177
+ primary: Color("ThemeColors/primary"),
178
+ secondary: Color("ThemeColors/secondary"),
179
+ gradient: Color("ThemeColors/gradient"),
180
+ background: Background(
181
+ default: Color("ThemeColors/background-default"),
182
+ surface: Color("ThemeColors/background-surface"),
183
+ tonal: Color("ThemeColors/background-tonal"),
184
+ pressed: Color("ThemeColors/background-pressed"),
185
+ selected: Color("ThemeColors/background-selected"),
186
+ disable: Color("ThemeColors/background-disable")
187
+ ),
188
+ text: TextColors(
189
+ default: Color("ThemeColors/text-default"),
190
+ secondary: Color("ThemeColors/text-secondary"),
191
+ hint: Color("ThemeColors/text-hint"),
192
+ disable: Color("ThemeColors/text-disable")
193
+ ),
194
+ border: BorderColors(
195
+ default: Color("ThemeColors/border-default"),
196
+ disable: Color("ThemeColors/border-disable")
197
+ ),
198
+ success: ColorSet(
199
+ primary: Colors.green03,
200
+ secondary: Colors.green07,
201
+ container: Colors.green08
202
+ ),
203
+ warning: ColorSet(
204
+ primary: Colors.orange03,
205
+ secondary: Colors.orange07,
206
+ container: Colors.orange08
207
+ ),
208
+ error: ColorSet(
209
+ primary: Colors.red03,
210
+ secondary: Colors.red07,
211
+ container: Colors.red08
212
+ ),
213
+ highlight: ColorSet(
214
+ primary: Colors.mint03,
215
+ secondary: Colors.mint07,
216
+ container: Colors.mint08
217
+ ),
218
+ interactive: ColorSet(
219
+ primary: Colors.blue03,
220
+ secondary: Colors.blue07,
221
+ container: Colors.blue08
222
+ )
223
+ ),
224
+ font: "SFProText",
225
+ assets: ThemeAssets(headerBackground: nil)
226
+ )
227
+
228
+ // MARK: - Dark Theme
229
+
230
+ public let darkTheme = Theme(
231
+ dark: true,
232
+ colors: ColorScheme(
233
+ primary: Colors.pink04,
234
+ secondary: Colors.pink08,
235
+ gradient: Color(hex: "FDCADE"),
236
+ background: Background(
237
+ default: Color(hex: "121212"),
238
+ surface: Color(hex: "1E1E1E"),
239
+ tonal: Colors.pink10,
240
+ pressed: Color(hex: "1A1A1A"),
241
+ selected: Colors.pink11,
242
+ disable: Color(hex: "303030")
243
+ ),
244
+ text: TextColors(
245
+ default: Color.white,
246
+ secondary: Color(hex: "B0B0B0"),
247
+ hint: Color(hex: "727272"),
248
+ disable: Color(hex: "505050")
249
+ ),
250
+ border: BorderColors(
251
+ default: Color(hex: "2A2A2A"),
252
+ disable: Color(hex: "242424")
253
+ ),
254
+ success: ColorSet(
255
+ primary: Colors.green03,
256
+ secondary: Colors.green07,
257
+ container: Colors.green08
258
+ ),
259
+ warning: ColorSet(
260
+ primary: Colors.orange03,
261
+ secondary: Colors.orange07,
262
+ container: Colors.orange08
263
+ ),
264
+ error: ColorSet(
265
+ primary: Colors.red03,
266
+ secondary: Colors.red07,
267
+ container: Colors.red08
268
+ ),
269
+ highlight: ColorSet(
270
+ primary: Colors.mint03,
271
+ secondary: Colors.mint07,
272
+ container: Colors.mint08
273
+ ),
274
+ interactive: ColorSet(
275
+ primary: Colors.blue03,
276
+ secondary: Colors.blue07,
277
+ container: Colors.blue08
278
+ )
279
+ ),
280
+ font: "SFProText",
281
+ assets: ThemeAssets(headerBackground: nil)
282
+ )
283
+
284
+ // MARK: - AppTheme Environment Key
285
+
286
+ private struct AppThemeKey: EnvironmentKey {
287
+ static let defaultValue: Theme = defaultTheme
288
+ }
289
+
290
+ public extension EnvironmentValues {
291
+ var appTheme: Theme {
292
+ get { self[AppThemeKey.self] }
293
+ set { self[AppThemeKey.self] = newValue }
294
+ }
295
+ }