@oxyhq/services 10.5.0 → 11.1.0

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 (427) hide show
  1. package/lib/commonjs/index.js.map +1 -1
  2. package/lib/commonjs/ui/components/AccountMenu.js +9 -5
  3. package/lib/commonjs/ui/components/AccountMenu.js.map +1 -1
  4. package/lib/commonjs/ui/components/AnotherDeviceQR.js +51 -56
  5. package/lib/commonjs/ui/components/AnotherDeviceQR.js.map +1 -1
  6. package/lib/commonjs/ui/components/BottomSheetRouter.js +1 -0
  7. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  8. package/lib/commonjs/ui/components/FollowButton.js +18 -5
  9. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  10. package/lib/commonjs/ui/components/OxyProvider.js +23 -7
  11. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  12. package/lib/commonjs/ui/components/SignInModal.js +20 -1
  13. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  14. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +19 -9
  15. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  16. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +4 -2
  17. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  18. package/lib/commonjs/ui/context/OxyContext.js +153 -19
  19. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  20. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +6 -17
  21. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  22. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
  23. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  24. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +38 -38
  25. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  26. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +2 -2
  27. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  28. package/lib/commonjs/ui/hooks/queries/queryKeys.js +3 -3
  29. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  30. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +1 -1
  31. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  32. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +16 -12
  33. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  34. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +10 -6
  35. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  36. package/lib/commonjs/ui/hooks/queryClient.js +6 -5
  37. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  38. package/lib/commonjs/ui/hooks/useOxyAuthSession.js +40 -2
  39. package/lib/commonjs/ui/hooks/useOxyAuthSession.js.map +1 -1
  40. package/lib/commonjs/ui/hooks/useProfileEditing.js +21 -0
  41. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  42. package/lib/commonjs/ui/hooks/useSessionManagement.js +3 -3
  43. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  44. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +100 -108
  45. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/AppInfoScreen.js +227 -273
  47. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  48. package/lib/commonjs/ui/screens/AvatarCropScreen.js +10 -4
  49. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  50. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +20 -37
  51. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  52. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js +89 -201
  53. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +80 -208
  55. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  56. package/lib/commonjs/ui/screens/FAQScreen.js +56 -208
  57. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  58. package/lib/commonjs/ui/screens/FeedbackScreen.js +303 -352
  59. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  60. package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
  61. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  62. package/lib/commonjs/ui/screens/HelpSupportScreen.js +77 -89
  63. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/HistoryViewScreen.js +43 -58
  65. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +67 -90
  67. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +77 -177
  69. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  70. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +113 -107
  71. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  72. package/lib/commonjs/ui/screens/ManageAccountScreen.js +55 -114
  73. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  74. package/lib/commonjs/ui/screens/NotificationsScreen.js +67 -85
  75. package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
  76. package/lib/commonjs/ui/screens/OxyAuthScreen.js +71 -135
  77. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +15 -9
  79. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/PreferencesScreen.js +65 -83
  81. package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +378 -1023
  83. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +294 -242
  85. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/ProfileScreen.js +192 -305
  87. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  88. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +57 -97
  89. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  90. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +41 -41
  91. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  92. package/lib/commonjs/ui/screens/UserLinksScreen.js +17 -24
  93. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  94. package/lib/commonjs/ui/screens/UserListScreen.js +83 -214
  95. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +115 -77
  97. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +70 -57
  99. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +136 -332
  101. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +47 -137
  103. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +182 -115
  105. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +138 -214
  107. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  108. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +54 -92
  109. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  110. package/lib/commonjs/ui/utils/activeAuthuser.js +15 -9
  111. package/lib/commonjs/ui/utils/activeAuthuser.js.map +1 -1
  112. package/lib/commonjs/ui/utils/avatarUtils.js +1 -1
  113. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  114. package/lib/module/index.js.map +1 -1
  115. package/lib/module/ui/components/AccountMenu.js +10 -6
  116. package/lib/module/ui/components/AccountMenu.js.map +1 -1
  117. package/lib/module/ui/components/AnotherDeviceQR.js +50 -56
  118. package/lib/module/ui/components/AnotherDeviceQR.js.map +1 -1
  119. package/lib/module/ui/components/BottomSheetRouter.js +2 -1
  120. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  121. package/lib/module/ui/components/FollowButton.js +18 -5
  122. package/lib/module/ui/components/FollowButton.js.map +1 -1
  123. package/lib/module/ui/components/OxyProvider.js +23 -7
  124. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  125. package/lib/module/ui/components/SignInModal.js +20 -1
  126. package/lib/module/ui/components/SignInModal.js.map +1 -1
  127. package/lib/module/ui/components/fileManagement/FileViewer.js +19 -9
  128. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  129. package/lib/module/ui/components/fileManagement/UploadPreview.js +4 -2
  130. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  131. package/lib/module/ui/context/OxyContext.js +154 -20
  132. package/lib/module/ui/context/OxyContext.js.map +1 -1
  133. package/lib/module/ui/context/hooks/useAuthOperations.js +6 -17
  134. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  135. package/lib/module/ui/hooks/mutations/mutationFactory.js +5 -5
  136. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  137. package/lib/module/ui/hooks/mutations/useAccountMutations.js +38 -38
  138. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  139. package/lib/module/ui/hooks/mutations/useServicesMutations.js +2 -2
  140. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  141. package/lib/module/ui/hooks/queries/queryKeys.js +3 -3
  142. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  143. package/lib/module/ui/hooks/queries/useAccountQueries.js +1 -1
  144. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  145. package/lib/module/ui/hooks/queries/usePaymentQueries.js +16 -12
  146. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  147. package/lib/module/ui/hooks/queries/useServicesQueries.js +9 -6
  148. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  149. package/lib/module/ui/hooks/queryClient.js +6 -5
  150. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  151. package/lib/module/ui/hooks/useOxyAuthSession.js +40 -2
  152. package/lib/module/ui/hooks/useOxyAuthSession.js.map +1 -1
  153. package/lib/module/ui/hooks/useProfileEditing.js +21 -0
  154. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  155. package/lib/module/ui/hooks/useSessionManagement.js +4 -3
  156. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  157. package/lib/module/ui/screens/AccountVerificationScreen.js +101 -109
  158. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  159. package/lib/module/ui/screens/AppInfoScreen.js +228 -275
  160. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  161. package/lib/module/ui/screens/AvatarCropScreen.js +10 -4
  162. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  163. package/lib/module/ui/screens/ConnectedAppsScreen.js +19 -39
  164. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  165. package/lib/module/ui/screens/CreateManagedAccountScreen.js +90 -202
  166. package/lib/module/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  167. package/lib/module/ui/screens/EditProfileFieldScreen.js +77 -205
  168. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  169. package/lib/module/ui/screens/FAQScreen.js +55 -207
  170. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  171. package/lib/module/ui/screens/FeedbackScreen.js +301 -350
  172. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  173. package/lib/module/ui/screens/FileManagementScreen.js +20 -20
  174. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  175. package/lib/module/ui/screens/HelpSupportScreen.js +78 -90
  176. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  177. package/lib/module/ui/screens/HistoryViewScreen.js +44 -59
  178. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  179. package/lib/module/ui/screens/LanguageSelectorScreen.js +68 -91
  180. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  181. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +75 -177
  182. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  183. package/lib/module/ui/screens/LegalDocumentsScreen.js +116 -108
  184. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  185. package/lib/module/ui/screens/ManageAccountScreen.js +52 -112
  186. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  187. package/lib/module/ui/screens/NotificationsScreen.js +68 -86
  188. package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
  189. package/lib/module/ui/screens/OxyAuthScreen.js +69 -134
  190. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  191. package/lib/module/ui/screens/PaymentGatewayScreen.js +16 -10
  192. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  193. package/lib/module/ui/screens/PreferencesScreen.js +66 -84
  194. package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
  195. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +366 -1012
  196. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  197. package/lib/module/ui/screens/PrivacySettingsScreen.js +295 -243
  198. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  199. package/lib/module/ui/screens/ProfileScreen.js +189 -302
  200. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  201. package/lib/module/ui/screens/SavesCollectionsScreen.js +58 -98
  202. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  203. package/lib/module/ui/screens/SearchSettingsScreen.js +42 -42
  204. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  205. package/lib/module/ui/screens/UserLinksScreen.js +18 -25
  206. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  207. package/lib/module/ui/screens/UserListScreen.js +81 -212
  208. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  209. package/lib/module/ui/screens/WelcomeNewUserScreen.js +114 -76
  210. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  211. package/lib/module/ui/screens/trust/TrustAboutScreen.js +69 -57
  212. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  213. package/lib/module/ui/screens/trust/TrustCenterScreen.js +135 -332
  214. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  215. package/lib/module/ui/screens/trust/TrustFAQScreen.js +48 -138
  216. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  217. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +184 -117
  218. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  219. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +132 -208
  220. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  221. package/lib/module/ui/screens/trust/TrustRulesScreen.js +58 -94
  222. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  223. package/lib/module/ui/utils/activeAuthuser.js +15 -9
  224. package/lib/module/ui/utils/activeAuthuser.js.map +1 -1
  225. package/lib/module/ui/utils/avatarUtils.js +1 -1
  226. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  227. package/lib/typescript/commonjs/index.d.ts +1 -0
  228. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts +2 -0
  230. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts.map +1 -1
  231. package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts +12 -2
  232. package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +1 -1
  234. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  235. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +3 -2
  236. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  237. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  238. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
  239. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
  240. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +34 -0
  241. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  242. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
  244. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  245. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +3 -3
  246. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  247. package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  248. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  249. package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts +22 -0
  250. package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
  251. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts +3 -0
  252. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
  253. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts +2 -1
  254. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  255. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  256. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  258. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  259. package/lib/typescript/commonjs/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  260. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  261. package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
  262. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  263. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  264. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  265. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  267. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  268. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  269. package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
  270. package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  272. package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
  273. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  274. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  275. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  276. package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  278. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  280. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  282. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  283. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  284. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  285. package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  286. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  287. package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts.map +1 -1
  288. package/lib/typescript/module/index.d.ts +1 -0
  289. package/lib/typescript/module/index.d.ts.map +1 -1
  290. package/lib/typescript/module/ui/components/AccountMenu.d.ts +2 -0
  291. package/lib/typescript/module/ui/components/AccountMenu.d.ts.map +1 -1
  292. package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts +12 -2
  293. package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts.map +1 -1
  294. package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +1 -1
  295. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  296. package/lib/typescript/module/ui/components/OxyProvider.d.ts +3 -2
  297. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  298. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  299. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
  300. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
  301. package/lib/typescript/module/ui/context/OxyContext.d.ts +34 -0
  302. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  303. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  304. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
  305. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  306. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +3 -3
  307. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  308. package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  309. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  310. package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts +22 -0
  311. package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
  312. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts +3 -0
  313. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
  314. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts +2 -1
  315. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  316. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  317. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  318. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  319. package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  320. package/lib/typescript/module/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  321. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  322. package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
  323. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  324. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  325. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  326. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  327. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  328. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  329. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  330. package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
  331. package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  332. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  333. package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
  334. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  335. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  336. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  337. package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  338. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  339. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  340. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  341. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  342. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  343. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  344. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  345. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  346. package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  347. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  348. package/lib/typescript/module/ui/utils/activeAuthuser.d.ts.map +1 -1
  349. package/lib/typescript/types/expo-haptics.d.ts +42 -0
  350. package/package.json +24 -31
  351. package/src/index.ts +1 -0
  352. package/src/types/expo-haptics.d.ts +42 -0
  353. package/src/ui/components/AccountMenu.tsx +11 -5
  354. package/src/ui/components/AnotherDeviceQR.tsx +53 -45
  355. package/src/ui/components/BottomSheetRouter.tsx +2 -1
  356. package/src/ui/components/FollowButton.tsx +24 -5
  357. package/src/ui/components/OxyProvider.tsx +22 -8
  358. package/src/ui/components/SignInModal.tsx +21 -2
  359. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +1 -1
  360. package/src/ui/components/fileManagement/FileViewer.tsx +9 -9
  361. package/src/ui/components/fileManagement/UploadPreview.tsx +2 -2
  362. package/src/ui/context/OxyContext.tsx +178 -21
  363. package/src/ui/context/hooks/useAuthOperations.ts +6 -17
  364. package/src/ui/hooks/mutations/mutationFactory.ts +5 -5
  365. package/src/ui/hooks/mutations/useAccountMutations.ts +38 -38
  366. package/src/ui/hooks/mutations/useServicesMutations.ts +2 -2
  367. package/src/ui/hooks/queries/queryKeys.ts +6 -3
  368. package/src/ui/hooks/queries/useAccountQueries.ts +1 -1
  369. package/src/ui/hooks/queries/usePaymentQueries.ts +12 -12
  370. package/src/ui/hooks/queries/useServicesQueries.ts +9 -6
  371. package/src/ui/hooks/queryClient.ts +5 -5
  372. package/src/ui/hooks/useOxyAuthSession.ts +76 -2
  373. package/src/ui/hooks/useProfileEditing.ts +24 -0
  374. package/src/ui/hooks/useSessionManagement.ts +9 -6
  375. package/src/ui/screens/AccountVerificationScreen.tsx +101 -113
  376. package/src/ui/screens/AppInfoScreen.tsx +200 -238
  377. package/src/ui/screens/AvatarCropScreen.tsx +17 -4
  378. package/src/ui/screens/ConnectedAppsScreen.tsx +16 -34
  379. package/src/ui/screens/CreateManagedAccountScreen.tsx +94 -170
  380. package/src/ui/screens/EditProfileFieldScreen.tsx +77 -190
  381. package/src/ui/screens/FAQScreen.tsx +77 -208
  382. package/src/ui/screens/FeedbackScreen.tsx +330 -239
  383. package/src/ui/screens/FileManagementScreen.tsx +20 -20
  384. package/src/ui/screens/HelpSupportScreen.tsx +67 -82
  385. package/src/ui/screens/HistoryViewScreen.tsx +32 -38
  386. package/src/ui/screens/LanguageSelectorScreen.tsx +79 -93
  387. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +81 -164
  388. package/src/ui/screens/LegalDocumentsScreen.tsx +184 -123
  389. package/src/ui/screens/ManageAccountScreen.tsx +48 -114
  390. package/src/ui/screens/NotificationsScreen.tsx +107 -106
  391. package/src/ui/screens/OxyAuthScreen.tsx +76 -109
  392. package/src/ui/screens/PaymentGatewayScreen.tsx +16 -7
  393. package/src/ui/screens/PreferencesScreen.tsx +96 -116
  394. package/src/ui/screens/PremiumSubscriptionScreen.tsx +419 -872
  395. package/src/ui/screens/PrivacySettingsScreen.tsx +203 -185
  396. package/src/ui/screens/ProfileScreen.tsx +158 -200
  397. package/src/ui/screens/SavesCollectionsScreen.tsx +78 -125
  398. package/src/ui/screens/SearchSettingsScreen.tsx +52 -41
  399. package/src/ui/screens/UserLinksScreen.tsx +18 -25
  400. package/src/ui/screens/UserListScreen.tsx +95 -188
  401. package/src/ui/screens/WelcomeNewUserScreen.tsx +109 -36
  402. package/src/ui/screens/trust/TrustAboutScreen.tsx +52 -41
  403. package/src/ui/screens/trust/TrustCenterScreen.tsx +184 -222
  404. package/src/ui/screens/trust/TrustFAQScreen.tsx +64 -124
  405. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +190 -67
  406. package/src/ui/screens/trust/TrustRewardsScreen.tsx +147 -182
  407. package/src/ui/screens/trust/TrustRulesScreen.tsx +77 -50
  408. package/src/ui/utils/activeAuthuser.ts +15 -9
  409. package/src/ui/utils/avatarUtils.ts +1 -1
  410. package/lib/commonjs/ui/components/feedback/FormInput.js +0 -72
  411. package/lib/commonjs/ui/components/feedback/FormInput.js.map +0 -1
  412. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +0 -261
  413. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +0 -1
  414. package/lib/module/ui/components/feedback/FormInput.js +0 -67
  415. package/lib/module/ui/components/feedback/FormInput.js.map +0 -1
  416. package/lib/module/ui/components/feedback/feedbackStyles.js +0 -256
  417. package/lib/module/ui/components/feedback/feedbackStyles.js.map +0 -1
  418. package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts +0 -20
  419. package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts.map +0 -1
  420. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts +0 -279
  421. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
  422. package/lib/typescript/module/ui/components/feedback/FormInput.d.ts +0 -20
  423. package/lib/typescript/module/ui/components/feedback/FormInput.d.ts.map +0 -1
  424. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts +0 -279
  425. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
  426. package/src/ui/components/feedback/FormInput.tsx +0 -84
  427. package/src/ui/components/feedback/feedbackStyles.ts +0 -246
@@ -7,21 +7,39 @@ exports.default = void 0;
7
7
  var _react = require("react");
8
8
  var _reactNative = require("react-native");
9
9
  var _bloom = require("@oxyhq/bloom");
10
+ var _theme = require("@oxyhq/bloom/theme");
11
+ var _button = require("@oxyhq/bloom/button");
12
+ var _chip = require("@oxyhq/bloom/chip");
13
+ var _typography = require("@oxyhq/bloom/typography");
14
+ var _benefitList = require("@oxyhq/bloom/benefit-list");
15
+ var _segmentedControl = require("@oxyhq/bloom/segmented-control");
10
16
  var _vectorIcons = require("@expo/vector-icons");
17
+ var _Header = _interopRequireDefault(require("../components/Header.js"));
11
18
  var _useI18n = require("../hooks/useI18n.js");
12
- var _theme = require("@oxyhq/bloom/theme");
13
19
  var _OxyContext = require("../context/OxyContext.js");
14
20
  var _jsxRuntime = require("react/jsx-runtime");
21
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
+ const TAB_PLANS = 'plans';
23
+ const TAB_FEATURES = 'features';
24
+ const BILLING_MONTH = 'month';
25
+ const BILLING_YEAR = 'year';
26
+ /** Yearly billing discount applied when extrapolating a monthly price. */
27
+ const YEARLY_DISCOUNT = 0.8;
28
+ const MONTHS_PER_YEAR = 12;
29
+ /** Simulated payment latency for the mocked subscribe/feature flows (ms). */
30
+ const SUBSCRIBE_DELAY_MS = 2000;
31
+ const FEATURE_DELAY_MS = 1500;
32
+ /** One subscription period for the mocked renewal date (30 days, in ms). */
33
+ const PERIOD_MS = 30 * 24 * 60 * 60 * 1000;
34
+ const FEATURE_CATEGORIES = ['analytics', 'customization', 'content', 'networking', 'productivity'];
15
35
  const PremiumSubscriptionScreen = ({
16
36
  onClose,
17
- theme,
18
37
  navigate,
19
38
  goBack
20
39
  }) => {
21
40
  // Use useOxy() hook for OxyContext values
22
41
  const {
23
- user,
24
- oxyServices
42
+ user
25
43
  } = (0, _OxyContext.useOxy)();
26
44
  const [loading, setLoading] = (0, _react.useState)(true);
27
45
  const [subscription, setSubscription] = (0, _react.useState)(null);
@@ -29,30 +47,20 @@ const PremiumSubscriptionScreen = ({
29
47
  const [individualFeatures, setIndividualFeatures] = (0, _react.useState)([]);
30
48
  const [selectedPlan, setSelectedPlan] = (0, _react.useState)(null);
31
49
  const [processingPayment, setProcessingPayment] = (0, _react.useState)(false);
32
- const [billingInterval, setBillingInterval] = (0, _react.useState)('month');
33
- const [activeTab, setActiveTab] = (0, _react.useState)('plans');
50
+ const [billingInterval, setBillingInterval] = (0, _react.useState)(BILLING_MONTH);
51
+ const [activeTab, setActiveTab] = (0, _react.useState)(TAB_PLANS);
34
52
  const [currentAppPackage, setCurrentAppPackage] = (0, _react.useState)('mention'); // Default to mention for demo
35
53
  const [pendingUnsubscribeFeatureId, setPendingUnsubscribeFeatureId] = (0, _react.useState)(null);
36
54
  const {
37
55
  t
38
56
  } = (0, _useI18n.useI18n)();
39
57
  const bloomTheme = (0, _theme.useTheme)();
58
+ const colors = bloomTheme.colors;
40
59
 
41
60
  // Prompt controls
42
61
  const cancelSubscriptionDialog = (0, _bloom.useDialogControl)();
43
62
  const unsubscribeFeatureDialog = (0, _bloom.useDialogControl)();
44
63
 
45
- // Extract commonly used colors for readability
46
- const textColor = bloomTheme.colors.text;
47
- const backgroundColor = bloomTheme.colors.background;
48
- const secondaryBackgroundColor = bloomTheme.colors.backgroundSecondary;
49
- const borderColor = bloomTheme.colors.border;
50
- const primaryColor = bloomTheme.colors.primary;
51
- const successColor = bloomTheme.colors.success;
52
- const dangerColor = bloomTheme.colors.error;
53
- const isDarkTheme = bloomTheme.isDark;
54
- const warningColor = bloomTheme.colors.warning;
55
-
56
64
  // Oxy+ subscription plans
57
65
  const mockPlans = [{
58
66
  id: 'mention-plus',
@@ -237,7 +245,7 @@ const PremiumSubscriptionScreen = ({
237
245
  planId: 'oxy-insider',
238
246
  status: 'active',
239
247
  currentPeriodStart: new Date().toISOString(),
240
- currentPeriodEnd: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),
248
+ currentPeriodEnd: new Date(Date.now() + PERIOD_MS).toISOString(),
241
249
  cancelAtPeriodEnd: false
242
250
  };
243
251
  setSubscription(currentSubscription);
@@ -261,13 +269,10 @@ const PremiumSubscriptionScreen = ({
261
269
  setLoading(false);
262
270
  }
263
271
  };
264
- const handlePlanSelection = planId => {
265
- setSelectedPlan(planId);
266
- };
267
272
  const handleSubscribe = async planId => {
268
273
  try {
269
- const selectedPlan = mockPlans.find(plan => plan.id === planId);
270
- if (!selectedPlan?.applicableApps.includes(currentAppPackage)) {
274
+ const planToSubscribe = mockPlans.find(plan => plan.id === planId);
275
+ if (!planToSubscribe?.applicableApps.includes(currentAppPackage)) {
271
276
  _bloom.toast.error(t('premium.toasts.planUnavailable', {
272
277
  app: currentAppPackage
273
278
  }) || `This plan is not available for the current app (${currentAppPackage})`);
@@ -277,15 +282,16 @@ const PremiumSubscriptionScreen = ({
277
282
  _bloom.toast.error(t('premium.toasts.mentionOnly') || 'Mention+ is only available in the Mention app');
278
283
  return;
279
284
  }
285
+ setSelectedPlan(planId);
280
286
  setProcessingPayment(true);
281
- await new Promise(resolve => setTimeout(resolve, 2000));
287
+ await new Promise(resolve => setTimeout(resolve, SUBSCRIBE_DELAY_MS));
282
288
  _bloom.toast.success(t('premium.toasts.activated') || 'Subscription activated successfully!');
283
289
  setSubscription({
284
290
  id: `sub_${Date.now()}`,
285
291
  planId,
286
292
  status: 'active',
287
293
  currentPeriodStart: new Date().toISOString(),
288
- currentPeriodEnd: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString(),
294
+ currentPeriodEnd: new Date(Date.now() + PERIOD_MS).toISOString(),
289
295
  cancelAtPeriodEnd: false
290
296
  });
291
297
  loadSubscriptionData();
@@ -312,7 +318,7 @@ const PremiumSubscriptionScreen = ({
312
318
  _bloom.toast.error(t('premium.toasts.cancelFailed') || 'Failed to cancel subscription');
313
319
  }
314
320
  }, [t]);
315
- const handleReactivateSubscription = async () => {
321
+ const handleReactivateSubscription = (0, _react.useCallback)(async () => {
316
322
  try {
317
323
  setSubscription(prev => prev ? {
318
324
  ...prev,
@@ -322,9 +328,9 @@ const PremiumSubscriptionScreen = ({
322
328
  } catch (error) {
323
329
  _bloom.toast.error(t('premium.toasts.reactivateFailed') || 'Failed to reactivate subscription');
324
330
  }
325
- };
326
- const formatPrice = (price, currency, interval) => {
327
- const yearlyPrice = interval === 'year' ? price : price * 12 * 0.8;
331
+ }, [t]);
332
+ const formatPrice = (price, interval) => {
333
+ const yearlyPrice = interval === 'year' ? price : price * MONTHS_PER_YEAR * YEARLY_DISCOUNT;
328
334
  const displayPrice = billingInterval === 'year' ? yearlyPrice : price;
329
335
  return {
330
336
  price: displayPrice,
@@ -338,21 +344,21 @@ const PremiumSubscriptionScreen = ({
338
344
  };
339
345
  const handleFeatureSubscribe = async featureId => {
340
346
  try {
341
- const selectedFeature = mockIndividualFeatures.find(feature => feature.id === featureId);
342
- if (!selectedFeature?.applicableApps.includes(currentAppPackage)) {
347
+ const featureToSubscribe = mockIndividualFeatures.find(feature => feature.id === featureId);
348
+ if (!featureToSubscribe?.applicableApps.includes(currentAppPackage)) {
343
349
  _bloom.toast.error(`This feature is not available for the current app (${currentAppPackage})`);
344
350
  return;
345
351
  }
346
- if (selectedFeature.appScope === 'specific') {
347
- const hasExactMatch = selectedFeature.applicableApps.length === 1 && selectedFeature.applicableApps[0] === currentAppPackage;
348
- if (!hasExactMatch && selectedFeature.applicableApps.length === 1) {
349
- const requiredApp = selectedFeature.applicableApps[0];
350
- _bloom.toast.error(`${selectedFeature.name} is only available in the ${requiredApp} app`);
352
+ if (featureToSubscribe.appScope === 'specific') {
353
+ const hasExactMatch = featureToSubscribe.applicableApps.length === 1 && featureToSubscribe.applicableApps[0] === currentAppPackage;
354
+ if (!hasExactMatch && featureToSubscribe.applicableApps.length === 1) {
355
+ const requiredApp = featureToSubscribe.applicableApps[0];
356
+ _bloom.toast.error(`${featureToSubscribe.name} is only available in the ${requiredApp} app`);
351
357
  return;
352
358
  }
353
359
  }
354
360
  setProcessingPayment(true);
355
- await new Promise(resolve => setTimeout(resolve, 1500));
361
+ await new Promise(resolve => setTimeout(resolve, FEATURE_DELAY_MS));
356
362
  setIndividualFeatures(prev => prev.map(feature => feature.id === featureId ? {
357
363
  ...feature,
358
364
  isSubscribed: true
@@ -392,188 +398,114 @@ const PremiumSubscriptionScreen = ({
392
398
  }
393
399
  }, [pendingUnsubscribeFeatureId, individualFeatures, t]);
394
400
  const pendingUnsubscribeFeature = (0, _react.useMemo)(() => individualFeatures.find(f => f.id === pendingUnsubscribeFeatureId), [individualFeatures, pendingUnsubscribeFeatureId]);
395
- const renderHeader = () => {
396
- const getAppDisplayName = packageName => {
397
- const appNames = {
398
- 'mention': 'Mention',
399
- 'oxy-social': 'Oxy Social',
400
- 'oxy-workspace': 'Oxy Workspace',
401
- 'oxy-creator': 'Oxy Creator',
402
- 'oxy-analytics': 'Oxy Analytics',
403
- 'oxy-studio': 'Oxy Studio'
404
- };
405
- return appNames[packageName] || packageName;
401
+ const getAppDisplayName = packageName => {
402
+ const appNames = {
403
+ 'mention': 'Mention',
404
+ 'oxy-social': 'Oxy Social',
405
+ 'oxy-workspace': 'Oxy Workspace',
406
+ 'oxy-creator': 'Oxy Creator',
407
+ 'oxy-analytics': 'Oxy Analytics',
408
+ 'oxy-studio': 'Oxy Studio'
406
409
  };
407
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
408
- style: [styles.header, {
409
- borderBottomColor: borderColor
410
- }],
411
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
412
- style: styles.backButton,
413
- onPress: goBack,
414
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
415
- name: "arrow-back",
416
- size: 24,
417
- color: textColor
418
- })
419
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
420
- style: styles.headerTitleContainer,
421
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
422
- style: [styles.headerTitle, {
423
- color: textColor
424
- }],
425
- children: t('premium.title') || 'Oxy+ Subscriptions'
426
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
427
- style: [styles.currentAppText, {
428
- color: bloomTheme.colors.textSecondary
429
- }],
430
- children: t('premium.forApp', {
431
- app: getAppDisplayName(currentAppPackage)
432
- }) || `for ${getAppDisplayName(currentAppPackage)}`
433
- })]
434
- }), onClose && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
435
- style: styles.closeButton,
436
- onPress: onClose,
437
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
438
- name: "close",
439
- size: 24,
440
- color: textColor
441
- })
442
- })]
443
- });
410
+ return appNames[packageName] || packageName;
444
411
  };
445
412
  const renderCurrentSubscription = () => {
446
413
  if (!subscription) return null;
447
414
  const currentPlan = getCurrentPlan();
448
415
  if (!currentPlan) return null;
449
- const statusColor = subscription.status === 'active' ? successColor : subscription.status === 'trialing' ? warningColor : dangerColor;
416
+ const statusChipColor = subscription.status === 'active' ? 'success' : subscription.status === 'trialing' ? 'warning' : 'error';
450
417
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
451
- style: styles.section,
452
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
453
- style: [styles.sectionTitle, {
454
- color: textColor
455
- }],
418
+ className: "mb-space-24",
419
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H5, {
420
+ className: "text-text mb-space-12",
456
421
  children: t('premium.current.title') || 'Current Subscription'
457
422
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
458
- style: [styles.currentSubscriptionCard, {
459
- backgroundColor: secondaryBackgroundColor,
460
- borderColor
461
- }],
423
+ className: "bg-fill border border-border-image rounded-radius-20 p-space-20 shadow-s",
462
424
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
463
- style: styles.subscriptionHeader,
425
+ className: "flex-row justify-between items-start mb-space-12",
464
426
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
465
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
466
- style: [styles.planName, {
467
- color: textColor
468
- }],
427
+ className: "flex-1 pr-space-12",
428
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H4, {
429
+ className: "text-text",
430
+ numberOfLines: 1,
469
431
  children: currentPlan.name
470
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
471
- style: [styles.planPrice, {
472
- color: primaryColor
473
- }],
474
- children: ["$", currentPlan.price, "/month"]
432
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
433
+ className: "text-text-secondary text-sm mt-space-2",
434
+ children: `$${currentPlan.price}/month`
475
435
  })]
476
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
477
- style: [styles.statusBadge, {
478
- backgroundColor: statusColor
479
- }],
480
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
481
- style: styles.statusText,
482
- children: subscription.status.toUpperCase()
483
- })
436
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_chip.Chip, {
437
+ variant: "soft",
438
+ color: statusChipColor,
439
+ size: "small",
440
+ children: subscription.status.toUpperCase()
484
441
  })]
485
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
486
- style: [styles.subscriptionDetail, {
487
- color: bloomTheme.colors.textSecondary
488
- }],
442
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
443
+ className: "text-text-secondary text-sm mb-space-16",
489
444
  children: t('premium.current.renewsOn', {
490
445
  date: new Date(subscription.currentPeriodEnd).toLocaleDateString()
491
446
  }) || `Renews on ${new Date(subscription.currentPeriodEnd).toLocaleDateString()}`
492
447
  }), subscription.cancelAtPeriodEnd && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
493
- style: styles.cancelNotice,
448
+ className: "flex-row items-center bg-fill-secondary rounded-radius-12 p-space-12 mb-space-16",
494
449
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
495
450
  name: "warning",
496
451
  size: 16,
497
- color: warningColor
498
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
499
- style: [styles.cancelText, {
500
- color: warningColor
501
- }],
452
+ color: colors.warning
453
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
454
+ className: "text-text-secondary text-sm ml-space-8 flex-1",
502
455
  children: t('premium.current.willCancelOn', {
503
456
  date: new Date(subscription.currentPeriodEnd).toLocaleDateString()
504
457
  }) || `Subscription will cancel on ${new Date(subscription.currentPeriodEnd).toLocaleDateString()}`
505
458
  })]
506
459
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
507
- style: styles.subscriptionActions,
508
- children: [subscription.cancelAtPeriodEnd ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
509
- style: [styles.actionButton, {
510
- backgroundColor: successColor
511
- }],
460
+ className: "flex-row gap-space-12",
461
+ children: [subscription.cancelAtPeriodEnd ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
462
+ variant: "primary",
512
463
  onPress: handleReactivateSubscription,
513
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
514
- style: styles.actionButtonText,
515
- children: t('premium.actions.reactivate') || 'Reactivate'
516
- })
517
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
518
- style: [styles.actionButton, {
519
- backgroundColor: dangerColor
520
- }],
464
+ className: "flex-1",
465
+ accessibilityLabel: t('premium.actions.reactivate') || 'Reactivate',
466
+ children: t('premium.actions.reactivate') || 'Reactivate'
467
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
468
+ variant: "destructive",
521
469
  onPress: confirmCancelSubscription,
522
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
523
- style: styles.actionButtonText,
524
- children: t('premium.actions.cancelSubBtn') || 'Cancel Subscription'
525
- })
526
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
527
- style: [styles.actionButton, styles.secondaryButton, {
528
- borderColor
529
- }],
530
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
531
- style: [styles.actionButtonText, {
532
- color: textColor
533
- }],
534
- children: t('premium.actions.manageBilling') || 'Manage Billing'
535
- })
470
+ className: "flex-1",
471
+ accessibilityLabel: t('premium.actions.cancelSubBtn') || 'Cancel Subscription',
472
+ children: t('premium.actions.cancelSubBtn') || 'Cancel Subscription'
473
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
474
+ variant: "outline",
475
+ onPress: () => navigate?.('PaymentGateway'),
476
+ className: "flex-1",
477
+ accessibilityLabel: t('premium.actions.manageBilling') || 'Manage Billing',
478
+ children: t('premium.actions.manageBilling') || 'Manage Billing'
536
479
  })]
537
480
  })]
538
481
  })]
539
482
  });
540
483
  };
541
484
  const renderBillingToggle = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
542
- style: styles.section,
543
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
544
- style: styles.billingToggle,
545
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
546
- style: [styles.billingOption, billingInterval === 'month' && {
547
- backgroundColor: primaryColor
548
- }],
549
- onPress: () => setBillingInterval('month'),
550
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
551
- style: [styles.billingOptionText, {
552
- color: billingInterval === 'month' ? bloomTheme.colors.negativeForeground : textColor
553
- }],
485
+ className: "mb-space-24",
486
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_segmentedControl.SegmentedControl, {
487
+ label: t('premium.billing.label') || 'Billing period',
488
+ type: "tabs",
489
+ value: billingInterval,
490
+ onChange: setBillingInterval,
491
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItem, {
492
+ value: BILLING_MONTH,
493
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItemText, {
554
494
  children: t('premium.billing.monthly') || 'Monthly'
555
495
  })
556
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
557
- style: [styles.billingOption, billingInterval === 'year' && {
558
- backgroundColor: primaryColor
559
- }],
560
- onPress: () => setBillingInterval('year'),
561
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
562
- style: [styles.billingOptionText, {
563
- color: billingInterval === 'year' ? bloomTheme.colors.negativeForeground : textColor
564
- }],
496
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItem, {
497
+ value: BILLING_YEAR,
498
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItemText, {
565
499
  children: t('premium.billing.yearly') || 'Yearly'
566
500
  })
567
501
  })]
568
- }), billingInterval === 'year' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
569
- style: [styles.savingsText, {
570
- color: successColor
571
- }],
572
- children: t('premium.billing.saveYearly') || '💰 Save 20% with yearly billing'
502
+ }), billingInterval === 'year' && /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
503
+ className: "text-text-secondary text-sm text-center mt-space-12 font-medium",
504
+ children: t('premium.billing.saveYearly') || 'Save 20% with yearly billing'
573
505
  })]
574
506
  });
575
507
  const renderPlanCard = plan => {
576
- const pricing = formatPrice(plan.price, plan.currency, plan.interval);
508
+ const pricing = formatPrice(plan.price, plan.interval);
577
509
  const isSelected = selectedPlan === plan.id;
578
510
  const isCurrentPlan = subscription?.planId === plan.id;
579
511
  const isAppSpecific = plan.appScope === 'specific' && plan.applicableApps.length === 1;
@@ -609,174 +541,134 @@ const PremiumSubscriptionScreen = ({
609
541
  };
610
542
  const availability = getAvailabilityStatus();
611
543
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
612
- style: [styles.planCard, {
613
- backgroundColor: secondaryBackgroundColor,
614
- borderColor
615
- }, isSelected && {
616
- borderColor: primaryColor,
544
+ className: `bg-fill border border-border-image rounded-radius-20 p-space-20 mb-space-16 shadow-s ${!availability.available ? 'opacity-60' : ''}`,
545
+ style: isSelected || plan.isPopular ? {
546
+ borderColor: colors.primary,
617
547
  borderWidth: 2
618
- }, plan.isPopular && styles.popularPlan, !availability.available && {
619
- opacity: 0.6
620
- }],
621
- children: [plan.isPopular && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
622
- style: [styles.popularBadge, {
623
- backgroundColor: primaryColor
624
- }],
625
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
626
- style: styles.popularText,
627
- children: "MOST POPULAR"
628
- })
629
- }), isAppSpecific && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
630
- style: [styles.appSpecificBadge, {
631
- backgroundColor: isAvailableForCurrentApp ? successColor : warningColor
632
- }],
633
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
634
- style: styles.appSpecificText,
548
+ } : undefined,
549
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
550
+ className: "flex-row flex-wrap gap-space-8 mb-space-12",
551
+ children: [plan.isPopular && /*#__PURE__*/(0, _jsxRuntime.jsx)(_chip.Chip, {
552
+ variant: "solid",
553
+ color: "primary",
554
+ size: "small",
555
+ children: t('premium.plan.badge.mostPopular') || 'Most Popular'
556
+ }), isAppSpecific && /*#__PURE__*/(0, _jsxRuntime.jsx)(_chip.Chip, {
557
+ variant: "soft",
558
+ color: isAvailableForCurrentApp ? 'success' : 'warning',
559
+ size: "small",
635
560
  children: isAvailableForCurrentApp ? t('premium.plan.badge.appExclusive') || 'App Exclusive' : t('premium.plan.badge.notAvailable') || 'Not Available'
636
- })
561
+ })]
637
562
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
638
- style: styles.planHeader,
639
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
640
- style: [styles.planName, {
641
- color: textColor
642
- }],
563
+ className: "mb-space-16",
564
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H4, {
565
+ className: "text-text mb-space-4",
643
566
  children: plan.name
644
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
645
- style: [styles.planDescription, {
646
- color: bloomTheme.colors.textSecondary
647
- }],
567
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
568
+ className: "text-text-secondary text-sm",
648
569
  children: plan.description
649
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
650
- style: [styles.planAppScope, {
651
- color: bloomTheme.colors.textTertiary
652
- }],
570
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
571
+ className: "text-text-tertiary text-xs mt-space-4 italic",
653
572
  children: getAppScopeText()
654
- }), !availability.available && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
655
- style: [styles.planRestrictionText, {
656
- color: dangerColor
657
- }],
573
+ }), !availability.available && /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
574
+ className: "text-xs mt-space-4 font-medium",
575
+ style: {
576
+ color: colors.error
577
+ },
658
578
  children: availability.reason
659
579
  })]
660
580
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
661
- style: styles.planPricing,
662
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
663
- style: [styles.planPrice, {
664
- color: textColor
665
- }],
581
+ className: "flex-row items-baseline mb-space-20",
582
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H2, {
583
+ className: "text-text",
666
584
  children: pricing.formatted
667
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
668
- style: [styles.planInterval, {
669
- color: bloomTheme.colors.textSecondary
670
- }],
585
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
586
+ className: "text-text-secondary text-sm ml-space-4",
671
587
  children: t('premium.plan.perInterval', {
672
588
  interval: pricing.interval
673
589
  }) || `per ${pricing.interval}`
674
590
  })]
675
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
676
- style: styles.planFeatures,
677
- children: plan.features.map((feature, index) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
678
- style: styles.featureItem,
679
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
591
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_benefitList.BenefitList, {
592
+ className: "mb-space-24",
593
+ children: plan.features.map((feature, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(_benefitList.BenefitRow, {
594
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
680
595
  name: "checkmark",
681
- size: 16,
682
- color: successColor
683
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
684
- style: [styles.featureText, {
685
- color: textColor
686
- }],
687
- children: feature
688
- })]
596
+ size: 18,
597
+ color: colors.success
598
+ }),
599
+ label: feature
689
600
  }, index))
690
- }), isCurrentPlan ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
691
- style: [styles.currentPlanButton, {
692
- backgroundColor: successColor
693
- }],
694
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
695
- style: styles.currentPlanText,
696
- children: t('premium.plan.current') || 'Current Plan'
697
- })
698
- }) : !availability.available ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
699
- style: [styles.unavailablePlanButton, {
700
- backgroundColor: bloomTheme.colors.border
701
- }],
702
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
703
- style: [styles.unavailablePlanText, {
704
- color: bloomTheme.colors.textTertiary
705
- }],
706
- children: t('premium.plan.notAvailableInApp') || 'Not Available in Current App'
707
- })
708
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
709
- style: [styles.selectPlanButton, {
710
- backgroundColor: plan.isPopular ? primaryColor : borderColor
711
- }],
601
+ }), isCurrentPlan ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
602
+ variant: "secondary",
603
+ disabled: true,
604
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
605
+ name: "checkmark-circle",
606
+ size: 18,
607
+ color: colors.success
608
+ }),
609
+ accessibilityLabel: t('premium.plan.current') || 'Current Plan',
610
+ className: "w-full",
611
+ children: t('premium.plan.current') || 'Current Plan'
612
+ }) : !availability.available ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
613
+ variant: "secondary",
614
+ disabled: true,
615
+ accessibilityLabel: t('premium.plan.notAvailableInApp') || 'Not Available in Current App',
616
+ className: "w-full",
617
+ children: t('premium.plan.notAvailableInApp') || 'Not Available in Current App'
618
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
619
+ variant: plan.isPopular ? 'primary' : 'secondary',
712
620
  onPress: () => handleSubscribe(plan.id),
713
621
  disabled: processingPayment,
714
- children: processingPayment ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
715
- color: bloomTheme.colors.negativeForeground,
716
- size: "small"
717
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
718
- style: [styles.selectPlanText, {
719
- color: plan.isPopular ? bloomTheme.colors.negativeForeground : textColor
720
- }],
721
- children: t('premium.actions.subscribeTo', {
722
- name: plan.name
723
- }) || `Subscribe to ${plan.name}`
724
- })
622
+ loading: processingPayment && isSelected,
623
+ accessibilityLabel: t('premium.actions.subscribeTo', {
624
+ name: plan.name
625
+ }) || `Subscribe to ${plan.name}`,
626
+ className: "w-full",
627
+ children: t('premium.actions.subscribeTo', {
628
+ name: plan.name
629
+ }) || `Subscribe to ${plan.name}`
725
630
  })]
726
631
  }, plan.id);
727
632
  };
728
633
  const renderTabNavigation = () => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
729
- style: styles.section,
730
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
731
- style: [styles.tabContainer, {
732
- borderBottomColor: borderColor
733
- }],
734
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
735
- style: [styles.tab, activeTab === 'plans' && {
736
- borderBottomColor: primaryColor,
737
- borderBottomWidth: 2
738
- }],
739
- onPress: () => setActiveTab('plans'),
740
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
741
- style: [styles.tabText, {
742
- color: activeTab === 'plans' ? primaryColor : textColor
743
- }],
634
+ className: "mb-space-24",
635
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_segmentedControl.SegmentedControl, {
636
+ label: t('premium.tabs.label') || 'Subscription type',
637
+ type: "tabs",
638
+ value: activeTab,
639
+ onChange: setActiveTab,
640
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItem, {
641
+ value: TAB_PLANS,
642
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItemText, {
744
643
  children: t('premium.tabs.plans') || 'Full Plans'
745
644
  })
746
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
747
- style: [styles.tab, activeTab === 'features' && {
748
- borderBottomColor: primaryColor,
749
- borderBottomWidth: 2
750
- }],
751
- onPress: () => setActiveTab('features'),
752
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
753
- style: [styles.tabText, {
754
- color: activeTab === 'features' ? primaryColor : textColor
755
- }],
645
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItem, {
646
+ value: TAB_FEATURES,
647
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_segmentedControl.SegmentedControlItemText, {
756
648
  children: t('premium.tabs.features') || 'Individual Features'
757
649
  })
758
650
  })]
759
651
  })
760
652
  });
761
653
  const renderFeatureCard = feature => {
762
- const pricing = formatPrice(feature.price, feature.currency, feature.interval);
654
+ const pricing = formatPrice(feature.price, feature.interval);
763
655
  const isSubscribed = feature.isSubscribed;
764
656
  const isIncludedInCurrentPlan = feature.isIncludedInCurrentPlan;
765
657
  const canPurchase = feature.canBePurchasedSeparately && !isIncludedInCurrentPlan;
766
658
  const getCategoryColor = category => {
767
659
  switch (category) {
768
660
  case 'analytics':
769
- return bloomTheme.colors.warning;
661
+ return colors.warning;
770
662
  case 'customization':
771
- return bloomTheme.colors.secondary;
663
+ return colors.secondary;
772
664
  case 'content':
773
- return bloomTheme.colors.success;
665
+ return colors.success;
774
666
  case 'networking':
775
- return bloomTheme.colors.info;
667
+ return colors.info;
776
668
  case 'productivity':
777
- return bloomTheme.colors.error;
669
+ return colors.error;
778
670
  default:
779
- return primaryColor;
671
+ return colors.primary;
780
672
  }
781
673
  };
782
674
  const getCategoryIcon = category => {
@@ -804,199 +696,149 @@ const PremiumSubscriptionScreen = ({
804
696
  }) || `Available in: ${feature.applicableApps.join(', ')}`;
805
697
  };
806
698
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
807
- style: [styles.featureCard, {
808
- backgroundColor: secondaryBackgroundColor,
809
- borderColor
810
- }, isSubscribed && {
811
- borderColor: successColor,
699
+ className: "bg-fill border border-border-image rounded-radius-12 p-space-16 mb-space-12 shadow-s",
700
+ style: isIncludedInCurrentPlan ? {
701
+ borderColor: colors.primary,
812
702
  borderWidth: 2
813
- }, isIncludedInCurrentPlan && {
814
- borderColor: primaryColor,
703
+ } : isSubscribed ? {
704
+ borderColor: colors.success,
815
705
  borderWidth: 2
816
- }],
706
+ } : undefined,
817
707
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
818
- style: styles.featureHeader,
708
+ className: "flex-row items-start mb-space-12",
819
709
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
820
- style: styles.featureIconContainer,
710
+ className: "bg-fill-secondary rounded-radius-max items-center justify-center mr-space-12",
711
+ style: {
712
+ width: 40,
713
+ height: 40
714
+ },
821
715
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
822
716
  name: getCategoryIcon(feature.category),
823
717
  size: 24,
824
718
  color: getCategoryColor(feature.category)
825
719
  })
826
720
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
827
- style: styles.featureInfo,
721
+ className: "flex-1",
828
722
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
829
- style: styles.featureNameRow,
830
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
831
- style: [styles.featureName, {
832
- color: textColor
833
- }],
723
+ className: "flex-row items-center justify-between mb-space-4",
724
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H5, {
725
+ className: "text-text flex-1 pr-space-8",
726
+ numberOfLines: 1,
834
727
  children: feature.name
835
- }), isIncludedInCurrentPlan && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
836
- style: [styles.includedBadge, {
837
- backgroundColor: primaryColor
838
- }],
839
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
840
- style: styles.includedBadgeText,
841
- children: "Included"
842
- })
728
+ }), isIncludedInCurrentPlan && /*#__PURE__*/(0, _jsxRuntime.jsx)(_chip.Chip, {
729
+ variant: "solid",
730
+ color: "primary",
731
+ size: "small",
732
+ children: t('premium.feature.included') || 'Included'
843
733
  })]
844
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
845
- style: [styles.featureDescription, {
846
- color: bloomTheme.colors.textSecondary
847
- }],
734
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
735
+ className: "text-text-secondary text-sm",
848
736
  children: feature.description
849
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
850
- style: [styles.appScopeText, {
851
- color: bloomTheme.colors.textTertiary
852
- }],
737
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
738
+ className: "text-text-tertiary text-xs mt-space-4 italic",
853
739
  children: getAppScopeText()
854
740
  })]
855
741
  })]
856
742
  }), !isIncludedInCurrentPlan && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
857
- style: styles.featurePricing,
858
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
859
- style: [styles.featurePrice, {
860
- color: textColor
861
- }],
743
+ className: "items-center mb-space-16",
744
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H4, {
745
+ className: "text-text",
862
746
  children: pricing.formatted
863
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
864
- style: [styles.featureInterval, {
865
- color: bloomTheme.colors.textSecondary
866
- }],
747
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
748
+ className: "text-text-secondary text-sm mt-space-2",
867
749
  children: t('premium.plan.perInterval', {
868
750
  interval: pricing.interval
869
751
  }) || `per ${pricing.interval}`
870
752
  })]
871
- }), isIncludedInCurrentPlan ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
872
- style: [styles.includedInPlanButton, {
873
- backgroundColor: primaryColor
874
- }],
875
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
753
+ }), isIncludedInCurrentPlan ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
754
+ variant: "primary",
755
+ disabled: true,
756
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
876
757
  name: "checkmark-circle",
877
758
  size: 16,
878
- color: bloomTheme.colors.negativeForeground
879
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
880
- style: styles.includedInPlanText,
881
- children: t('premium.feature.includedInPlan') || 'Included in your plan'
882
- })]
759
+ color: colors.primaryForeground
760
+ }),
761
+ accessibilityLabel: t('premium.feature.includedInPlan') || 'Included in your plan',
762
+ className: "w-full",
763
+ children: t('premium.feature.includedInPlan') || 'Included in your plan'
883
764
  }) : isSubscribed ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
884
- style: styles.featureActions,
885
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
886
- style: [styles.subscribedButton, {
887
- backgroundColor: successColor
888
- }],
889
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
765
+ className: "flex-row gap-space-8",
766
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
767
+ variant: "secondary",
768
+ disabled: true,
769
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
890
770
  name: "checkmark",
891
771
  size: 16,
892
- color: bloomTheme.colors.negativeForeground
893
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
894
- style: styles.subscribedText,
895
- children: t('premium.feature.subscribed') || 'Subscribed'
896
- })]
897
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
898
- style: [styles.unsubscribeButton, {
899
- borderColor: dangerColor
900
- }],
772
+ color: colors.success
773
+ }),
774
+ accessibilityLabel: t('premium.feature.subscribed') || 'Subscribed',
775
+ className: "flex-1",
776
+ children: t('premium.feature.subscribed') || 'Subscribed'
777
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
778
+ variant: "outline",
901
779
  onPress: () => confirmFeatureUnsubscribe(feature.id),
902
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
903
- style: [styles.unsubscribeText, {
904
- color: dangerColor
905
- }],
906
- children: t('premium.actions.unsubscribe') || 'Unsubscribe'
907
- })
780
+ accessibilityLabel: t('premium.actions.unsubscribe') || 'Unsubscribe',
781
+ className: "flex-1",
782
+ children: t('premium.actions.unsubscribe') || 'Unsubscribe'
908
783
  })]
909
- }) : canPurchase ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
910
- style: [styles.subscribeFeatureButton, {
911
- backgroundColor: primaryColor
912
- }],
784
+ }) : canPurchase ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
785
+ variant: "primary",
913
786
  onPress: () => handleFeatureSubscribe(feature.id),
914
787
  disabled: processingPayment,
915
- children: processingPayment ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
916
- color: bloomTheme.colors.negativeForeground,
917
- size: "small"
918
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
919
- style: styles.subscribeFeatureText,
920
- children: t('premium.actions.subscribe') || 'Subscribe'
921
- })
922
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
923
- style: [styles.unavailableButton, {
924
- backgroundColor: bloomTheme.colors.border
925
- }],
926
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
927
- style: [styles.unavailableText, {
928
- color: bloomTheme.colors.textTertiary
929
- }],
930
- children: "Only available in subscription plans"
931
- })
788
+ loading: processingPayment,
789
+ accessibilityLabel: t('premium.actions.subscribe') || 'Subscribe',
790
+ className: "w-full",
791
+ children: t('premium.actions.subscribe') || 'Subscribe'
792
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
793
+ variant: "secondary",
794
+ disabled: true,
795
+ accessibilityLabel: t('premium.feature.plansOnly') || 'Only available in subscription plans',
796
+ className: "w-full",
797
+ children: t('premium.feature.plansOnly') || 'Only available in subscription plans'
932
798
  })]
933
799
  }, feature.id);
934
800
  };
935
- const renderIndividualFeatures = () => {
936
- const categories = ['analytics', 'customization', 'content', 'networking', 'productivity'];
937
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
938
- style: styles.section,
939
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
940
- style: [styles.sectionTitle, {
941
- color: textColor
942
- }],
943
- children: "Individual Features"
944
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
945
- style: [styles.sectionSubtitle, {
946
- color: bloomTheme.colors.textSecondary
947
- }],
948
- children: "Subscribe to specific features you need. Some features are included in subscription plans."
949
- }), categories.map(category => {
950
- const categoryFeatures = individualFeatures.filter(f => f.category === category);
951
- if (categoryFeatures.length === 0) return null;
952
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
953
- style: styles.categorySection,
954
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
955
- style: [styles.categoryTitle, {
956
- color: textColor
957
- }],
958
- children: category.charAt(0).toUpperCase() + category.slice(1)
959
- }), categoryFeatures.map(renderFeatureCard)]
960
- }, category);
961
- })]
962
- });
963
- };
964
-
965
- // Add this for testing different app contexts (remove in production)
966
- const [showAppSwitcher, setShowAppSwitcher] = (0, _react.useState)(__DEV__); // Only show in development
801
+ const renderIndividualFeatures = () => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
802
+ className: "mb-space-24",
803
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H4, {
804
+ className: "text-text mb-space-8",
805
+ children: t('premium.features.title') || 'Individual Features'
806
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
807
+ className: "text-text-secondary text-base mb-space-16",
808
+ children: t('premium.features.subtitle') || 'Subscribe to specific features you need. Some features are included in subscription plans.'
809
+ }), FEATURE_CATEGORIES.map(category => {
810
+ const categoryFeatures = individualFeatures.filter(f => f.category === category);
811
+ if (categoryFeatures.length === 0) return null;
812
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
813
+ className: "mb-space-24",
814
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H5, {
815
+ className: "text-text mb-space-12",
816
+ children: category.charAt(0).toUpperCase() + category.slice(1)
817
+ }), categoryFeatures.map(renderFeatureCard)]
818
+ }, category);
819
+ })]
820
+ });
967
821
 
822
+ // Show different app contexts for testing (development only).
823
+ const [showAppSwitcher] = (0, _react.useState)(__DEV__);
968
824
  const renderAppSwitcher = () => {
969
825
  if (!showAppSwitcher) return null;
970
826
  const testApps = ['mention', 'oxy-social', 'oxy-workspace', 'oxy-creator'];
971
827
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
972
- style: [styles.appSwitcher, {
973
- backgroundColor: bloomTheme.colors.backgroundSecondary,
974
- borderColor
975
- }],
976
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
977
- style: [styles.appSwitcherTitle, {
978
- color: textColor
979
- }],
980
- children: "\uD83E\uDDEA Test App Context (Dev Only)"
828
+ className: "bg-fill-secondary border border-border-image rounded-radius-12 p-space-16 mb-space-24",
829
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
830
+ className: "text-text-secondary text-sm font-medium mb-space-12",
831
+ children: t('premium.dev.appContext') || 'Test App Context (Dev Only)'
981
832
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
982
833
  horizontal: true,
983
834
  showsHorizontalScrollIndicator: false,
984
835
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
985
- style: styles.appSwitcherButtons,
986
- children: testApps.map(app => /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
987
- style: [styles.appSwitcherButton, {
988
- backgroundColor: currentAppPackage === app ? primaryColor : 'transparent',
989
- borderColor: primaryColor
990
- }],
991
- onPress: () => {
992
- setCurrentAppPackage(app);
993
- },
994
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
995
- style: [styles.appSwitcherButtonText, {
996
- color: currentAppPackage === app ? bloomTheme.colors.negativeForeground : textColor
997
- }],
998
- children: app
999
- })
836
+ className: "flex-row gap-space-8",
837
+ children: testApps.map(app => /*#__PURE__*/(0, _jsxRuntime.jsx)(_chip.Chip, {
838
+ variant: currentAppPackage === app ? 'solid' : 'outlined',
839
+ color: "primary",
840
+ onPress: () => setCurrentAppPackage(app),
841
+ children: app
1000
842
  }, app))
1001
843
  })
1002
844
  })]
@@ -1004,126 +846,96 @@ const PremiumSubscriptionScreen = ({
1004
846
  };
1005
847
  if (loading) {
1006
848
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1007
- style: [styles.container, {
1008
- backgroundColor,
1009
- justifyContent: 'center'
1010
- }],
1011
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
1012
- size: "large",
1013
- color: primaryColor
1014
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1015
- style: [styles.loadingText, {
1016
- color: textColor
1017
- }],
1018
- children: t('premium.loading') || 'Loading subscription plans...'
849
+ className: "flex-1 bg-bg",
850
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header.default, {
851
+ title: t('premium.title') || 'Oxy+ Subscriptions',
852
+ subtitle: t('premium.forApp', {
853
+ app: getAppDisplayName(currentAppPackage)
854
+ }) || `for ${getAppDisplayName(currentAppPackage)}`,
855
+ onBack: goBack || onClose,
856
+ onClose: onClose,
857
+ showCloseButton: !!onClose,
858
+ elevation: "subtle"
859
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
860
+ className: "flex-1 items-center justify-center px-screen-margin",
861
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
862
+ size: "large",
863
+ color: colors.primary
864
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
865
+ className: "text-text-secondary text-base text-center mt-space-16",
866
+ children: t('premium.loading') || 'Loading subscription plans...'
867
+ })]
1019
868
  })]
1020
869
  });
1021
870
  }
1022
871
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1023
- style: [styles.container, {
1024
- backgroundColor
1025
- }],
1026
- children: [renderHeader(), renderAppSwitcher(), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
1027
- style: styles.content,
872
+ className: "flex-1 bg-bg",
873
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Header.default, {
874
+ title: t('premium.title') || 'Oxy+ Subscriptions',
875
+ subtitle: t('premium.forApp', {
876
+ app: getAppDisplayName(currentAppPackage)
877
+ }) || `for ${getAppDisplayName(currentAppPackage)}`,
878
+ onBack: goBack || onClose,
879
+ onClose: onClose,
880
+ showCloseButton: !!onClose,
881
+ elevation: "subtle"
882
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
883
+ className: "flex-1",
884
+ contentContainerClassName: "px-screen-margin pb-space-32",
1028
885
  showsVerticalScrollIndicator: false,
1029
- children: [subscription && renderCurrentSubscription(), !subscription && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1030
- style: styles.section,
1031
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1032
- style: [styles.sectionTitle, {
1033
- color: textColor
1034
- }],
1035
- children: t('premium.choosePlan') || 'Choose Your Plan'
1036
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1037
- style: [styles.sectionSubtitle, {
1038
- color: bloomTheme.colors.textSecondary
1039
- }],
1040
- children: t('premium.choosePlanSubtitle') || 'Unlock premium features and take your experience to the next level'
1041
- })]
1042
- }), !subscription && renderTabNavigation(), !subscription && activeTab === 'plans' && renderBillingToggle(), activeTab === 'plans' ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1043
- style: styles.section,
1044
- children: [!subscription && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1045
- style: [styles.sectionTitle, {
1046
- color: textColor
1047
- }],
1048
- children: t('premium.availablePlans') || 'Available Plans'
1049
- }), plans.map(renderPlanCard)]
1050
- }) : renderIndividualFeatures(), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1051
- style: styles.section,
1052
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1053
- style: [styles.sectionTitle, {
1054
- color: textColor
1055
- }],
1056
- children: t('premium.why') || 'Why Go Premium?'
1057
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1058
- style: [styles.benefitsCard, {
1059
- backgroundColor: secondaryBackgroundColor,
1060
- borderColor
1061
- }],
1062
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1063
- style: styles.benefitItem,
1064
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1065
- name: "flash",
1066
- size: 24,
1067
- color: primaryColor
1068
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1069
- style: styles.benefitContent,
1070
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1071
- style: [styles.benefitTitle, {
1072
- color: textColor
1073
- }],
1074
- children: t('premium.benefits.performance.title') || 'Enhanced Performance'
1075
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1076
- style: [styles.benefitDescription, {
1077
- color: bloomTheme.colors.textSecondary
1078
- }],
1079
- children: t('premium.benefits.performance.desc') || 'Faster processing and priority access to our servers'
1080
- })]
1081
- })]
1082
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1083
- style: styles.benefitItem,
1084
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1085
- name: "shield-checkmark",
1086
- size: 24,
1087
- color: successColor
1088
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1089
- style: styles.benefitContent,
1090
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1091
- style: [styles.benefitTitle, {
1092
- color: textColor
1093
- }],
1094
- children: t('premium.benefits.security.title') || 'Advanced Security'
1095
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1096
- style: [styles.benefitDescription, {
1097
- color: bloomTheme.colors.textSecondary
1098
- }],
1099
- children: t('premium.benefits.security.desc') || 'Enhanced encryption and security features'
1100
- })]
1101
- })]
1102
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1103
- style: styles.benefitItem,
1104
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1105
- name: "headset",
1106
- size: 24,
1107
- color: warningColor
1108
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1109
- style: styles.benefitContent,
1110
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1111
- style: [styles.benefitTitle, {
1112
- color: textColor
1113
- }],
1114
- children: t('premium.benefits.support.title') || 'Priority Support'
1115
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1116
- style: [styles.benefitDescription, {
1117
- color: bloomTheme.colors.textSecondary
1118
- }],
1119
- children: t('premium.benefits.support.desc') || 'Get help faster with our premium support team'
1120
- })]
1121
- })]
886
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
887
+ className: "pt-space-20",
888
+ children: [renderAppSwitcher(), subscription && renderCurrentSubscription(), !subscription && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
889
+ className: "mb-space-24",
890
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H2, {
891
+ className: "text-text mb-space-8",
892
+ children: t('premium.choosePlan') || 'Choose Your Plan'
893
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
894
+ className: "text-text-secondary text-base",
895
+ children: t('premium.choosePlanSubtitle') || 'Unlock premium features and take your experience to the next level'
896
+ })]
897
+ }), !subscription && renderTabNavigation(), !subscription && activeTab === TAB_PLANS && renderBillingToggle(), activeTab === TAB_PLANS ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
898
+ className: "mb-space-24",
899
+ children: [!subscription && /*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H4, {
900
+ className: "text-text mb-space-12",
901
+ children: t('premium.availablePlans') || 'Available Plans'
902
+ }), plans.map(renderPlanCard)]
903
+ }) : renderIndividualFeatures(), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
904
+ className: "mb-space-24",
905
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.H4, {
906
+ className: "text-text mb-space-12",
907
+ children: t('premium.why') || 'Why Go Premium?'
908
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_benefitList.BenefitList, {
909
+ children: [{
910
+ icon: 'flash',
911
+ color: colors.primary,
912
+ title: t('premium.benefits.performance.title') || 'Enhanced Performance',
913
+ desc: t('premium.benefits.performance.desc') || 'Faster processing and priority access to our servers'
914
+ }, {
915
+ icon: 'shield-checkmark',
916
+ color: colors.success,
917
+ title: t('premium.benefits.security.title') || 'Advanced Security',
918
+ desc: t('premium.benefits.security.desc') || 'Enhanced encryption and security features'
919
+ }, {
920
+ icon: 'headset',
921
+ color: colors.warning,
922
+ title: t('premium.benefits.support.title') || 'Priority Support',
923
+ desc: t('premium.benefits.support.desc') || 'Get help faster with our premium support team'
924
+ }].map(benefit => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_benefitList.BenefitRow, {
925
+ icon: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
926
+ name: benefit.icon,
927
+ size: 18,
928
+ color: benefit.color
929
+ }),
930
+ accessibilityLabel: `${benefit.title}. ${benefit.desc}`,
931
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_typography.Text, {
932
+ className: "text-text font-medium text-sm",
933
+ children: benefit.title
934
+ }), `\n${benefit.desc}`]
935
+ }, benefit.title))
1122
936
  })]
1123
937
  })]
1124
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1125
- style: styles.bottomSpacing
1126
- })]
938
+ })
1127
939
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_bloom.Dialog, {
1128
940
  control: cancelSubscriptionDialog,
1129
941
  title: t('premium.confirms.cancelSubTitle') || 'Cancel Subscription',
@@ -1153,462 +965,5 @@ const PremiumSubscriptionScreen = ({
1153
965
  })]
1154
966
  });
1155
967
  };
1156
- const styles = _reactNative.StyleSheet.create({
1157
- container: {
1158
- flex: 1
1159
- },
1160
- header: {
1161
- flexDirection: 'row',
1162
- alignItems: 'center',
1163
- justifyContent: 'space-between',
1164
- paddingHorizontal: 20,
1165
- paddingTop: 20,
1166
- paddingBottom: 16,
1167
- borderBottomWidth: 1
1168
- },
1169
- backButton: {
1170
- padding: 8
1171
- },
1172
- headerTitle: {
1173
- fontSize: 20,
1174
- fontWeight: '600'
1175
- },
1176
- headerTitleContainer: {
1177
- flex: 1,
1178
- alignItems: 'center'
1179
- },
1180
- currentAppText: {
1181
- fontSize: 14,
1182
- marginTop: 2,
1183
- fontStyle: 'italic'
1184
- },
1185
- closeButton: {
1186
- padding: 8
1187
- },
1188
- content: {
1189
- flex: 1
1190
- },
1191
- section: {
1192
- padding: 20
1193
- },
1194
- sectionTitle: {
1195
- fontSize: 24,
1196
- fontWeight: 'bold',
1197
- marginBottom: 8
1198
- },
1199
- sectionSubtitle: {
1200
- fontSize: 16,
1201
- lineHeight: 22
1202
- },
1203
- loadingText: {
1204
- fontSize: 16,
1205
- textAlign: 'center',
1206
- marginTop: 16
1207
- },
1208
- currentSubscriptionCard: {
1209
- borderRadius: 16,
1210
- padding: 20,
1211
- borderWidth: 1
1212
- },
1213
- subscriptionHeader: {
1214
- flexDirection: 'row',
1215
- justifyContent: 'space-between',
1216
- alignItems: 'flex-start',
1217
- marginBottom: 12
1218
- },
1219
- planName: {
1220
- fontSize: 20,
1221
- fontWeight: 'bold',
1222
- marginBottom: 4
1223
- },
1224
- planPrice: {
1225
- fontSize: 16,
1226
- fontWeight: '600'
1227
- },
1228
- statusBadge: {
1229
- paddingHorizontal: 12,
1230
- paddingVertical: 4,
1231
- borderRadius: 12
1232
- },
1233
- statusText: {
1234
- color: '#FFFFFF',
1235
- fontSize: 12,
1236
- fontWeight: '600'
1237
- },
1238
- subscriptionDetail: {
1239
- fontSize: 14,
1240
- marginBottom: 16
1241
- },
1242
- cancelNotice: {
1243
- flexDirection: 'row',
1244
- alignItems: 'center',
1245
- padding: 12,
1246
- backgroundColor: 'rgba(255, 149, 0, 0.1)',
1247
- borderRadius: 8,
1248
- marginBottom: 16
1249
- },
1250
- cancelText: {
1251
- fontSize: 14,
1252
- marginLeft: 8,
1253
- flex: 1
1254
- },
1255
- subscriptionActions: {
1256
- flexDirection: 'row',
1257
- gap: 12
1258
- },
1259
- actionButton: {
1260
- flex: 1,
1261
- paddingVertical: 12,
1262
- paddingHorizontal: 16,
1263
- borderRadius: 8,
1264
- alignItems: 'center'
1265
- },
1266
- secondaryButton: {
1267
- backgroundColor: 'transparent',
1268
- borderWidth: 1
1269
- },
1270
- actionButtonText: {
1271
- color: '#FFFFFF',
1272
- fontSize: 14,
1273
- fontWeight: '600'
1274
- },
1275
- billingToggle: {
1276
- flexDirection: 'row',
1277
- backgroundColor: 'rgba(0, 0, 0, 0.05)',
1278
- borderRadius: 8,
1279
- padding: 4,
1280
- marginBottom: 12
1281
- },
1282
- billingOption: {
1283
- flex: 1,
1284
- paddingVertical: 12,
1285
- borderRadius: 6,
1286
- alignItems: 'center'
1287
- },
1288
- billingOptionText: {
1289
- fontSize: 16,
1290
- fontWeight: '600'
1291
- },
1292
- savingsText: {
1293
- fontSize: 14,
1294
- textAlign: 'center',
1295
- fontWeight: '600'
1296
- },
1297
- planCard: {
1298
- borderRadius: 16,
1299
- padding: 20,
1300
- marginBottom: 16,
1301
- borderWidth: 1,
1302
- position: 'relative'
1303
- },
1304
- popularPlan: {
1305
- borderWidth: 2
1306
- },
1307
- popularBadge: {
1308
- position: 'absolute',
1309
- top: -1,
1310
- left: 20,
1311
- right: 20,
1312
- paddingVertical: 8,
1313
- borderTopLeftRadius: 16,
1314
- borderTopRightRadius: 16,
1315
- alignItems: 'center'
1316
- },
1317
- popularText: {
1318
- color: '#FFFFFF',
1319
- fontSize: 12,
1320
- fontWeight: 'bold'
1321
- },
1322
- planHeader: {
1323
- marginBottom: 16,
1324
- marginTop: 16
1325
- },
1326
- planDescription: {
1327
- fontSize: 14,
1328
- lineHeight: 20
1329
- },
1330
- planAppScope: {
1331
- fontSize: 12,
1332
- fontStyle: 'italic',
1333
- marginTop: 4
1334
- },
1335
- planPricing: {
1336
- flexDirection: 'row',
1337
- alignItems: 'baseline',
1338
- marginBottom: 20
1339
- },
1340
- planInterval: {
1341
- fontSize: 14,
1342
- marginLeft: 4
1343
- },
1344
- planFeatures: {
1345
- marginBottom: 24
1346
- },
1347
- featureItem: {
1348
- flexDirection: 'row',
1349
- alignItems: 'center',
1350
- marginBottom: 8
1351
- },
1352
- featureText: {
1353
- fontSize: 14,
1354
- marginLeft: 8,
1355
- flex: 1
1356
- },
1357
- selectPlanButton: {
1358
- paddingVertical: 16,
1359
- borderRadius: 12,
1360
- alignItems: 'center'
1361
- },
1362
- selectPlanText: {
1363
- fontSize: 16,
1364
- fontWeight: '600'
1365
- },
1366
- currentPlanButton: {
1367
- paddingVertical: 16,
1368
- borderRadius: 12,
1369
- alignItems: 'center'
1370
- },
1371
- currentPlanText: {
1372
- color: '#FFFFFF',
1373
- fontSize: 16,
1374
- fontWeight: '600'
1375
- },
1376
- benefitsCard: {
1377
- borderRadius: 16,
1378
- padding: 20,
1379
- borderWidth: 1
1380
- },
1381
- benefitItem: {
1382
- flexDirection: 'row',
1383
- alignItems: 'flex-start',
1384
- marginBottom: 20
1385
- },
1386
- benefitContent: {
1387
- marginLeft: 16,
1388
- flex: 1
1389
- },
1390
- benefitTitle: {
1391
- fontSize: 16,
1392
- fontWeight: '600',
1393
- marginBottom: 4
1394
- },
1395
- benefitDescription: {
1396
- fontSize: 14,
1397
- lineHeight: 20
1398
- },
1399
- bottomSpacing: {
1400
- height: 40
1401
- },
1402
- tabContainer: {
1403
- flexDirection: 'row',
1404
- borderBottomWidth: 1,
1405
- marginBottom: 20
1406
- },
1407
- tab: {
1408
- flex: 1,
1409
- paddingVertical: 12,
1410
- paddingHorizontal: 16,
1411
- alignItems: 'center'
1412
- },
1413
- tabText: {
1414
- fontSize: 16,
1415
- fontWeight: '600'
1416
- },
1417
- featureCard: {
1418
- borderRadius: 12,
1419
- borderWidth: 1,
1420
- padding: 16,
1421
- marginBottom: 12
1422
- },
1423
- featureHeader: {
1424
- flexDirection: 'row',
1425
- alignItems: 'flex-start',
1426
- marginBottom: 12
1427
- },
1428
- featureIconContainer: {
1429
- width: 40,
1430
- height: 40,
1431
- borderRadius: 20,
1432
- backgroundColor: 'rgba(0, 122, 255, 0.1)',
1433
- justifyContent: 'center',
1434
- alignItems: 'center',
1435
- marginRight: 12
1436
- },
1437
- featureInfo: {
1438
- flex: 1
1439
- },
1440
- featureName: {
1441
- fontSize: 16,
1442
- fontWeight: '600',
1443
- marginBottom: 4
1444
- },
1445
- featureDescription: {
1446
- fontSize: 14,
1447
- lineHeight: 20
1448
- },
1449
- featurePricing: {
1450
- alignItems: 'center',
1451
- marginBottom: 16
1452
- },
1453
- featurePrice: {
1454
- fontSize: 20,
1455
- fontWeight: 'bold'
1456
- },
1457
- featureInterval: {
1458
- fontSize: 14,
1459
- marginTop: 2
1460
- },
1461
- featureActions: {
1462
- flexDirection: 'row',
1463
- gap: 8
1464
- },
1465
- subscribedButton: {
1466
- flex: 1,
1467
- flexDirection: 'row',
1468
- justifyContent: 'center',
1469
- alignItems: 'center',
1470
- paddingVertical: 12,
1471
- borderRadius: 8,
1472
- gap: 6
1473
- },
1474
- subscribedText: {
1475
- color: '#FFFFFF',
1476
- fontSize: 16,
1477
- fontWeight: '600'
1478
- },
1479
- unsubscribeButton: {
1480
- flex: 1,
1481
- justifyContent: 'center',
1482
- alignItems: 'center',
1483
- paddingVertical: 12,
1484
- borderRadius: 8,
1485
- borderWidth: 1
1486
- },
1487
- unsubscribeText: {
1488
- fontSize: 16,
1489
- fontWeight: '600'
1490
- },
1491
- subscribeFeatureButton: {
1492
- justifyContent: 'center',
1493
- alignItems: 'center',
1494
- paddingVertical: 12,
1495
- borderRadius: 8
1496
- },
1497
- subscribeFeatureText: {
1498
- color: '#FFFFFF',
1499
- fontSize: 16,
1500
- fontWeight: '600'
1501
- },
1502
- categorySection: {
1503
- marginBottom: 24
1504
- },
1505
- categoryTitle: {
1506
- fontSize: 18,
1507
- fontWeight: '600',
1508
- marginBottom: 12
1509
- },
1510
- featureNameRow: {
1511
- flexDirection: 'row',
1512
- alignItems: 'center',
1513
- justifyContent: 'space-between',
1514
- marginBottom: 4
1515
- },
1516
- includedBadge: {
1517
- paddingHorizontal: 8,
1518
- paddingVertical: 2,
1519
- borderRadius: 12,
1520
- marginLeft: 8
1521
- },
1522
- includedBadgeText: {
1523
- color: '#FFFFFF',
1524
- fontSize: 10,
1525
- fontWeight: '600',
1526
- textTransform: 'uppercase'
1527
- },
1528
- appScopeText: {
1529
- fontSize: 12,
1530
- marginTop: 4,
1531
- fontStyle: 'italic'
1532
- },
1533
- includedInPlanButton: {
1534
- flexDirection: 'row',
1535
- justifyContent: 'center',
1536
- alignItems: 'center',
1537
- paddingVertical: 12,
1538
- borderRadius: 8,
1539
- gap: 6
1540
- },
1541
- includedInPlanText: {
1542
- color: '#FFFFFF',
1543
- fontSize: 14,
1544
- fontWeight: '600'
1545
- },
1546
- unavailableButton: {
1547
- justifyContent: 'center',
1548
- alignItems: 'center',
1549
- paddingVertical: 12,
1550
- borderRadius: 8
1551
- },
1552
- unavailableText: {
1553
- fontSize: 14,
1554
- fontWeight: '500',
1555
- textAlign: 'center'
1556
- },
1557
- appSpecificBadge: {
1558
- position: 'absolute',
1559
- top: 16,
1560
- right: 16,
1561
- paddingHorizontal: 8,
1562
- paddingVertical: 4,
1563
- borderRadius: 12,
1564
- zIndex: 1
1565
- },
1566
- appSpecificText: {
1567
- color: '#FFFFFF',
1568
- fontSize: 12,
1569
- fontWeight: '600'
1570
- },
1571
- planRestrictionText: {
1572
- fontSize: 12,
1573
- fontWeight: '500',
1574
- marginTop: 4,
1575
- fontStyle: 'italic'
1576
- },
1577
- unavailablePlanButton: {
1578
- paddingVertical: 16,
1579
- borderRadius: 12,
1580
- alignItems: 'center'
1581
- },
1582
- unavailablePlanText: {
1583
- fontSize: 16,
1584
- fontWeight: '600'
1585
- },
1586
- appSwitcher: {
1587
- padding: 16,
1588
- borderBottomWidth: 1,
1589
- margin: 16,
1590
- borderRadius: 12,
1591
- borderWidth: 1
1592
- },
1593
- appSwitcherTitle: {
1594
- fontSize: 14,
1595
- fontWeight: '600',
1596
- marginBottom: 12
1597
- },
1598
- appSwitcherButtons: {
1599
- flexDirection: 'row',
1600
- gap: 8
1601
- },
1602
- appSwitcherButton: {
1603
- paddingHorizontal: 12,
1604
- paddingVertical: 6,
1605
- borderRadius: 8,
1606
- borderWidth: 1
1607
- },
1608
- appSwitcherButtonText: {
1609
- fontSize: 12,
1610
- fontWeight: '500'
1611
- }
1612
- });
1613
968
  var _default = exports.default = PremiumSubscriptionScreen;
1614
969
  //# sourceMappingURL=PremiumSubscriptionScreen.js.map