@oxyhq/services 11.0.0 → 11.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/lib/commonjs/index.js +7 -0
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/components/AccountMenu.js +9 -5
  4. package/lib/commonjs/ui/components/AccountMenu.js.map +1 -1
  5. package/lib/commonjs/ui/components/AnotherDeviceQR.js +51 -56
  6. package/lib/commonjs/ui/components/AnotherDeviceQR.js.map +1 -1
  7. package/lib/commonjs/ui/components/BottomSheetRouter.js +1 -0
  8. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  9. package/lib/commonjs/ui/components/FollowButton.js +18 -5
  10. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  11. package/lib/commonjs/ui/components/OxyLogo.js +1 -1
  12. package/lib/commonjs/ui/components/OxyLogo.js.map +1 -1
  13. package/lib/commonjs/ui/components/OxyProvider.js +23 -7
  14. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  15. package/lib/commonjs/ui/components/SignInModal.js +20 -1
  16. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  17. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +19 -9
  18. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  19. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +4 -2
  20. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  21. package/lib/commonjs/ui/context/OxyContext.js +153 -19
  22. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  23. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +6 -17
  24. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  25. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
  26. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  27. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +38 -38
  28. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  29. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +2 -2
  30. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  31. package/lib/commonjs/ui/hooks/queries/queryKeys.js +3 -3
  32. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  33. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +1 -1
  34. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  35. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +16 -12
  36. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  37. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +10 -6
  38. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  39. package/lib/commonjs/ui/hooks/queryClient.js +6 -5
  40. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  41. package/lib/commonjs/ui/hooks/useOxyAuthSession.js +40 -2
  42. package/lib/commonjs/ui/hooks/useOxyAuthSession.js.map +1 -1
  43. package/lib/commonjs/ui/hooks/useProfileEditing.js +21 -0
  44. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  45. package/lib/commonjs/ui/hooks/useSessionManagement.js +3 -3
  46. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  47. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +100 -108
  48. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/AppInfoScreen.js +227 -273
  50. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/AvatarCropScreen.js +10 -4
  52. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +20 -37
  54. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js +89 -201
  56. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +80 -208
  58. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/FAQScreen.js +56 -208
  60. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/FeedbackScreen.js +303 -352
  62. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  63. package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
  64. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  65. package/lib/commonjs/ui/screens/HelpSupportScreen.js +77 -89
  66. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  67. package/lib/commonjs/ui/screens/HistoryViewScreen.js +43 -58
  68. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  69. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +67 -90
  70. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  71. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +77 -177
  72. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +113 -107
  74. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  75. package/lib/commonjs/ui/screens/ManageAccountScreen.js +55 -114
  76. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  77. package/lib/commonjs/ui/screens/NotificationsScreen.js +67 -85
  78. package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/OxyAuthScreen.js +71 -135
  80. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +15 -9
  82. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  83. package/lib/commonjs/ui/screens/PreferencesScreen.js +65 -83
  84. package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
  85. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +378 -1023
  86. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  87. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +294 -242
  88. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  89. package/lib/commonjs/ui/screens/ProfileScreen.js +194 -333
  90. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  91. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +57 -97
  92. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  93. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +41 -41
  94. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  95. package/lib/commonjs/ui/screens/UserLinksScreen.js +17 -24
  96. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  97. package/lib/commonjs/ui/screens/UserListScreen.js +83 -214
  98. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  99. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +115 -77
  100. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  101. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +70 -57
  102. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  103. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +136 -332
  104. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  105. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +47 -137
  106. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  107. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +182 -115
  108. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  109. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +138 -214
  110. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  111. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +54 -92
  112. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  113. package/lib/commonjs/ui/utils/activeAuthuser.js +15 -9
  114. package/lib/commonjs/ui/utils/activeAuthuser.js.map +1 -1
  115. package/lib/commonjs/ui/utils/avatarUtils.js +1 -1
  116. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  117. package/lib/module/index.js +2 -0
  118. package/lib/module/index.js.map +1 -1
  119. package/lib/module/ui/components/AccountMenu.js +10 -6
  120. package/lib/module/ui/components/AccountMenu.js.map +1 -1
  121. package/lib/module/ui/components/AnotherDeviceQR.js +50 -56
  122. package/lib/module/ui/components/AnotherDeviceQR.js.map +1 -1
  123. package/lib/module/ui/components/BottomSheetRouter.js +2 -1
  124. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  125. package/lib/module/ui/components/FollowButton.js +18 -5
  126. package/lib/module/ui/components/FollowButton.js.map +1 -1
  127. package/lib/module/ui/components/OxyLogo.js +1 -1
  128. package/lib/module/ui/components/OxyLogo.js.map +1 -1
  129. package/lib/module/ui/components/OxyProvider.js +23 -7
  130. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  131. package/lib/module/ui/components/SignInModal.js +20 -1
  132. package/lib/module/ui/components/SignInModal.js.map +1 -1
  133. package/lib/module/ui/components/fileManagement/FileViewer.js +19 -9
  134. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  135. package/lib/module/ui/components/fileManagement/UploadPreview.js +4 -2
  136. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  137. package/lib/module/ui/context/OxyContext.js +154 -20
  138. package/lib/module/ui/context/OxyContext.js.map +1 -1
  139. package/lib/module/ui/context/hooks/useAuthOperations.js +6 -17
  140. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  141. package/lib/module/ui/hooks/mutations/mutationFactory.js +5 -5
  142. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  143. package/lib/module/ui/hooks/mutations/useAccountMutations.js +38 -38
  144. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  145. package/lib/module/ui/hooks/mutations/useServicesMutations.js +2 -2
  146. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  147. package/lib/module/ui/hooks/queries/queryKeys.js +3 -3
  148. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  149. package/lib/module/ui/hooks/queries/useAccountQueries.js +1 -1
  150. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  151. package/lib/module/ui/hooks/queries/usePaymentQueries.js +16 -12
  152. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  153. package/lib/module/ui/hooks/queries/useServicesQueries.js +9 -6
  154. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  155. package/lib/module/ui/hooks/queryClient.js +6 -5
  156. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  157. package/lib/module/ui/hooks/useOxyAuthSession.js +40 -2
  158. package/lib/module/ui/hooks/useOxyAuthSession.js.map +1 -1
  159. package/lib/module/ui/hooks/useProfileEditing.js +21 -0
  160. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  161. package/lib/module/ui/hooks/useSessionManagement.js +4 -3
  162. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  163. package/lib/module/ui/screens/AccountVerificationScreen.js +101 -109
  164. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  165. package/lib/module/ui/screens/AppInfoScreen.js +228 -275
  166. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  167. package/lib/module/ui/screens/AvatarCropScreen.js +10 -4
  168. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  169. package/lib/module/ui/screens/ConnectedAppsScreen.js +19 -39
  170. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  171. package/lib/module/ui/screens/CreateManagedAccountScreen.js +90 -202
  172. package/lib/module/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  173. package/lib/module/ui/screens/EditProfileFieldScreen.js +77 -205
  174. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  175. package/lib/module/ui/screens/FAQScreen.js +55 -207
  176. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  177. package/lib/module/ui/screens/FeedbackScreen.js +301 -350
  178. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  179. package/lib/module/ui/screens/FileManagementScreen.js +20 -20
  180. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  181. package/lib/module/ui/screens/HelpSupportScreen.js +78 -90
  182. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  183. package/lib/module/ui/screens/HistoryViewScreen.js +44 -59
  184. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  185. package/lib/module/ui/screens/LanguageSelectorScreen.js +68 -91
  186. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  187. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +75 -177
  188. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  189. package/lib/module/ui/screens/LegalDocumentsScreen.js +116 -108
  190. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  191. package/lib/module/ui/screens/ManageAccountScreen.js +52 -112
  192. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  193. package/lib/module/ui/screens/NotificationsScreen.js +68 -86
  194. package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
  195. package/lib/module/ui/screens/OxyAuthScreen.js +69 -134
  196. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  197. package/lib/module/ui/screens/PaymentGatewayScreen.js +16 -10
  198. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  199. package/lib/module/ui/screens/PreferencesScreen.js +66 -84
  200. package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
  201. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +366 -1012
  202. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  203. package/lib/module/ui/screens/PrivacySettingsScreen.js +295 -243
  204. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  205. package/lib/module/ui/screens/ProfileScreen.js +192 -331
  206. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  207. package/lib/module/ui/screens/SavesCollectionsScreen.js +58 -98
  208. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  209. package/lib/module/ui/screens/SearchSettingsScreen.js +42 -42
  210. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  211. package/lib/module/ui/screens/UserLinksScreen.js +18 -25
  212. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  213. package/lib/module/ui/screens/UserListScreen.js +81 -212
  214. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  215. package/lib/module/ui/screens/WelcomeNewUserScreen.js +114 -76
  216. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  217. package/lib/module/ui/screens/trust/TrustAboutScreen.js +69 -57
  218. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  219. package/lib/module/ui/screens/trust/TrustCenterScreen.js +135 -332
  220. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  221. package/lib/module/ui/screens/trust/TrustFAQScreen.js +48 -138
  222. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  223. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +184 -117
  224. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  225. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +132 -208
  226. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  227. package/lib/module/ui/screens/trust/TrustRulesScreen.js +58 -94
  228. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  229. package/lib/module/ui/utils/activeAuthuser.js +15 -9
  230. package/lib/module/ui/utils/activeAuthuser.js.map +1 -1
  231. package/lib/module/ui/utils/avatarUtils.js +1 -1
  232. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  233. package/lib/typescript/commonjs/index.d.ts +2 -0
  234. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  235. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts +2 -0
  236. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts.map +1 -1
  237. package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts +12 -2
  238. package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts.map +1 -1
  239. package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +1 -1
  240. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  241. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +3 -2
  242. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  244. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
  245. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
  246. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +34 -0
  247. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  248. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  249. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +6 -0
  250. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  251. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +3 -3
  252. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  253. package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  254. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  255. package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts +22 -0
  256. package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts +3 -0
  258. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
  259. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts +2 -1
  260. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  261. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  262. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  263. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  264. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  265. package/lib/typescript/commonjs/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  267. package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
  268. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  269. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  270. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  272. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  273. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  274. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  275. package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
  276. package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  278. package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  280. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  282. package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  283. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  284. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  285. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  286. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  287. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  288. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  289. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  290. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  291. package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  292. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  293. package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts.map +1 -1
  294. package/lib/typescript/module/index.d.ts +2 -0
  295. package/lib/typescript/module/index.d.ts.map +1 -1
  296. package/lib/typescript/module/ui/components/AccountMenu.d.ts +2 -0
  297. package/lib/typescript/module/ui/components/AccountMenu.d.ts.map +1 -1
  298. package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts +12 -2
  299. package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts.map +1 -1
  300. package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +1 -1
  301. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  302. package/lib/typescript/module/ui/components/OxyProvider.d.ts +3 -2
  303. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  304. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  305. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
  306. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
  307. package/lib/typescript/module/ui/context/OxyContext.d.ts +34 -0
  308. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  309. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  310. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +6 -0
  311. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  312. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +3 -3
  313. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  314. package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  315. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  316. package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts +22 -0
  317. package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
  318. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts +3 -0
  319. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
  320. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts +2 -1
  321. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  322. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  323. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  324. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  325. package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  326. package/lib/typescript/module/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  327. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  328. package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
  329. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  330. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  331. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  332. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  333. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  334. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  335. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  336. package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
  337. package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  338. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  339. package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
  340. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  341. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  342. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  343. package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  344. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  345. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  346. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  347. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  348. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  349. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  350. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  351. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  352. package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  353. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  354. package/lib/typescript/module/ui/utils/activeAuthuser.d.ts.map +1 -1
  355. package/lib/typescript/types/expo-haptics.d.ts +42 -0
  356. package/package.json +8 -3
  357. package/src/index.ts +2 -0
  358. package/src/types/expo-haptics.d.ts +42 -0
  359. package/src/ui/components/AccountMenu.tsx +11 -5
  360. package/src/ui/components/AnotherDeviceQR.tsx +53 -45
  361. package/src/ui/components/BottomSheetRouter.tsx +2 -1
  362. package/src/ui/components/FollowButton.tsx +24 -5
  363. package/src/ui/components/OxyLogo.tsx +1 -1
  364. package/src/ui/components/OxyProvider.tsx +22 -8
  365. package/src/ui/components/SignInModal.tsx +21 -2
  366. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +1 -1
  367. package/src/ui/components/fileManagement/FileViewer.tsx +9 -9
  368. package/src/ui/components/fileManagement/UploadPreview.tsx +2 -2
  369. package/src/ui/context/OxyContext.tsx +178 -21
  370. package/src/ui/context/hooks/useAuthOperations.ts +6 -17
  371. package/src/ui/hooks/mutations/mutationFactory.ts +5 -5
  372. package/src/ui/hooks/mutations/useAccountMutations.ts +38 -38
  373. package/src/ui/hooks/mutations/useServicesMutations.ts +2 -2
  374. package/src/ui/hooks/queries/queryKeys.ts +6 -3
  375. package/src/ui/hooks/queries/useAccountQueries.ts +1 -1
  376. package/src/ui/hooks/queries/usePaymentQueries.ts +12 -12
  377. package/src/ui/hooks/queries/useServicesQueries.ts +9 -6
  378. package/src/ui/hooks/queryClient.ts +5 -5
  379. package/src/ui/hooks/useOxyAuthSession.ts +76 -2
  380. package/src/ui/hooks/useProfileEditing.ts +24 -0
  381. package/src/ui/hooks/useSessionManagement.ts +9 -6
  382. package/src/ui/screens/AccountVerificationScreen.tsx +101 -113
  383. package/src/ui/screens/AppInfoScreen.tsx +200 -238
  384. package/src/ui/screens/AvatarCropScreen.tsx +17 -4
  385. package/src/ui/screens/ConnectedAppsScreen.tsx +16 -34
  386. package/src/ui/screens/CreateManagedAccountScreen.tsx +94 -170
  387. package/src/ui/screens/EditProfileFieldScreen.tsx +77 -190
  388. package/src/ui/screens/FAQScreen.tsx +77 -208
  389. package/src/ui/screens/FeedbackScreen.tsx +330 -239
  390. package/src/ui/screens/FileManagementScreen.tsx +20 -20
  391. package/src/ui/screens/HelpSupportScreen.tsx +67 -82
  392. package/src/ui/screens/HistoryViewScreen.tsx +32 -38
  393. package/src/ui/screens/LanguageSelectorScreen.tsx +79 -93
  394. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +81 -164
  395. package/src/ui/screens/LegalDocumentsScreen.tsx +184 -123
  396. package/src/ui/screens/ManageAccountScreen.tsx +48 -114
  397. package/src/ui/screens/NotificationsScreen.tsx +107 -106
  398. package/src/ui/screens/OxyAuthScreen.tsx +76 -109
  399. package/src/ui/screens/PaymentGatewayScreen.tsx +16 -7
  400. package/src/ui/screens/PreferencesScreen.tsx +96 -116
  401. package/src/ui/screens/PremiumSubscriptionScreen.tsx +419 -872
  402. package/src/ui/screens/PrivacySettingsScreen.tsx +203 -185
  403. package/src/ui/screens/ProfileScreen.tsx +162 -246
  404. package/src/ui/screens/SavesCollectionsScreen.tsx +78 -125
  405. package/src/ui/screens/SearchSettingsScreen.tsx +52 -41
  406. package/src/ui/screens/UserLinksScreen.tsx +18 -25
  407. package/src/ui/screens/UserListScreen.tsx +95 -188
  408. package/src/ui/screens/WelcomeNewUserScreen.tsx +109 -36
  409. package/src/ui/screens/trust/TrustAboutScreen.tsx +52 -41
  410. package/src/ui/screens/trust/TrustCenterScreen.tsx +184 -222
  411. package/src/ui/screens/trust/TrustFAQScreen.tsx +64 -124
  412. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +190 -67
  413. package/src/ui/screens/trust/TrustRewardsScreen.tsx +147 -182
  414. package/src/ui/screens/trust/TrustRulesScreen.tsx +77 -50
  415. package/src/ui/utils/activeAuthuser.ts +15 -9
  416. package/src/ui/utils/avatarUtils.ts +1 -1
  417. package/lib/commonjs/ui/components/feedback/FormInput.js +0 -72
  418. package/lib/commonjs/ui/components/feedback/FormInput.js.map +0 -1
  419. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +0 -261
  420. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +0 -1
  421. package/lib/module/ui/components/feedback/FormInput.js +0 -67
  422. package/lib/module/ui/components/feedback/FormInput.js.map +0 -1
  423. package/lib/module/ui/components/feedback/feedbackStyles.js +0 -256
  424. package/lib/module/ui/components/feedback/feedbackStyles.js.map +0 -1
  425. package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts +0 -20
  426. package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts.map +0 -1
  427. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts +0 -279
  428. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
  429. package/lib/typescript/module/ui/components/feedback/FormInput.d.ts +0 -20
  430. package/lib/typescript/module/ui/components/feedback/FormInput.d.ts.map +0 -1
  431. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts +0 -279
  432. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
  433. package/src/ui/components/feedback/FormInput.tsx +0 -84
  434. package/src/ui/components/feedback/feedbackStyles.ts +0 -246
@@ -1,44 +1,34 @@
1
1
  "use strict";
2
2
 
3
3
  import React, { useState, useMemo, useCallback } from 'react';
4
- import { View, Text, StyleSheet, ScrollView, TextInput, LayoutAnimation } from 'react-native';
5
- import { Ionicons } from '@expo/vector-icons';
4
+ import { View, ScrollView } from 'react-native';
6
5
  import Header from "../../components/Header.js";
7
- import { SettingsListItem } from '@oxyhq/bloom/settings-list';
8
- import { useI18n } from "../../hooks/useI18n.js";
6
+ import EmptyState from "../../components/EmptyState.js";
7
+ import { SearchInput } from '@oxyhq/bloom/search-input';
8
+ import { Accordion, AccordionItem, AccordionTrigger, AccordionContent } from '@oxyhq/bloom/accordion';
9
+ import { Text } from '@oxyhq/bloom/typography';
9
10
  import { useTheme } from '@oxyhq/bloom/theme';
10
- import { normalizeColorScheme } from '@oxyhq/core';
11
- import { useColorScheme } from "../../hooks/useColorScheme.js";
12
- import { Colors } from "../../constants/theme.js";
11
+ import { useI18n } from "../../hooks/useI18n.js";
13
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
13
  const FAQ_KEYS = ['what', 'earn', 'lose', 'use', 'transfer', 'support'];
15
14
 
16
15
  /**
17
- * TrustFAQScreen - Optimized for performance
16
+ * TrustFAQScreen
18
17
  *
19
- * Performance optimizations implemented:
20
- * - useMemo for theme calculations (only recalculates when theme changes)
21
- * - useMemo for filtered FAQs (only recalculates when search changes)
22
- * - useCallback for event handlers to prevent unnecessary re-renders
23
- * - React.memo wrapper to prevent re-renders when props haven't changed
18
+ * Frequently asked questions about Oxy Trust, rendered with the shared Bloom
19
+ * Accordion (single-expand) + SearchInput. Styling is centralized Bloom token
20
+ * classes; the Bloom Accordion owns its own expand/collapse animation, so no
21
+ * `LayoutAnimation` is used here.
24
22
  */
25
23
  const TrustFAQScreen = ({
26
- goBack,
27
- theme
24
+ goBack
28
25
  }) => {
29
26
  const {
30
27
  t
31
28
  } = useI18n();
32
- const [expanded, setExpanded] = useState(null);
33
- const [search, setSearch] = useState('');
34
-
35
- // Memoize theme-related calculations to prevent unnecessary recalculations
36
29
  const bloomTheme = useTheme();
37
- const colorScheme = useColorScheme();
38
- const normalizedColorScheme = normalizeColorScheme(colorScheme);
39
- const colors = Colors[normalizedColorScheme];
40
-
41
- // Memoize filtered FAQs to prevent filtering on every render
30
+ const [search, setSearch] = useState('');
31
+ const [expanded, setExpanded] = useState(undefined);
42
32
  const faqs = useMemo(() => FAQ_KEYS.map(key => ({
43
33
  id: key,
44
34
  q: t(`trust.faq.items.${key}.q`) || '',
@@ -49,132 +39,52 @@ const TrustFAQScreen = ({
49
39
  const searchLower = search.toLowerCase();
50
40
  return faqs.filter(faq => faq.q.toLowerCase().includes(searchLower) || faq.a.toLowerCase().includes(searchLower));
51
41
  }, [search, faqs]);
52
-
53
- // Memoize toggle handler to prevent recreation on every render
54
- const handleToggle = useCallback(id => {
55
- LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
56
- setExpanded(prev => prev === id ? null : id);
42
+ const handleAccordionChange = useCallback(value => {
43
+ setExpanded(Array.isArray(value) ? value[0] : value);
57
44
  }, []);
58
45
  return /*#__PURE__*/_jsxs(View, {
59
- style: [styles.container, {
60
- backgroundColor: bloomTheme.colors.background
61
- }],
46
+ className: "flex-1 bg-bg",
62
47
  children: [/*#__PURE__*/_jsx(Header, {
63
48
  title: t('trust.faq.title') || 'Trust FAQ',
64
49
  subtitle: t('trust.faq.subtitle') || 'Frequently asked questions about Oxy Trust',
65
50
  subtitleVariant: "muted",
66
51
  onBack: goBack,
67
52
  elevation: "subtle"
68
- }), /*#__PURE__*/_jsxs(ScrollView, {
69
- contentContainerStyle: styles.contentContainer,
53
+ }), /*#__PURE__*/_jsx(View, {
54
+ className: "px-screen-margin pt-space-20 pb-space-12",
55
+ children: /*#__PURE__*/_jsx(SearchInput, {
56
+ label: t('trust.faq.search') || 'Search FAQ...',
57
+ value: search,
58
+ onChangeText: setSearch,
59
+ onClearText: () => setSearch(''),
60
+ accessibilityLabel: "Search Trust FAQ"
61
+ })
62
+ }), /*#__PURE__*/_jsx(ScrollView, {
63
+ className: "flex-1 px-screen-margin",
70
64
  showsVerticalScrollIndicator: false,
71
- children: [/*#__PURE__*/_jsxs(View, {
72
- style: [styles.searchContainer, {
73
- backgroundColor: colors.card
74
- }],
75
- children: [/*#__PURE__*/_jsx(Ionicons, {
76
- name: "search",
77
- size: 22,
78
- color: colors.icon
79
- }), /*#__PURE__*/_jsx(TextInput, {
80
- style: [styles.searchInput, {
81
- color: bloomTheme.colors.text
82
- }],
83
- placeholder: t('trust.faq.search') || 'Search FAQ...',
84
- placeholderTextColor: bloomTheme.colors.textTertiary,
85
- value: search,
86
- onChangeText: setSearch,
87
- returnKeyType: "search"
88
- })]
89
- }), filteredFaqs.length === 0 ? /*#__PURE__*/_jsx(Text, {
90
- style: [styles.noResults, {
91
- color: colors.secondaryText
92
- }],
93
- children: t('trust.faq.noResults', {
65
+ children: filteredFaqs.length === 0 ? /*#__PURE__*/_jsx(EmptyState, {
66
+ message: t('trust.faq.noResults', {
94
67
  query: search
95
- }) || `No FAQ items found matching "${search}"`
96
- }) : /*#__PURE__*/_jsx(View, {
97
- style: styles.groupedSectionContainer,
98
- children: filteredFaqs.map((faq, idx) => {
99
- const isExpanded = expanded === faq.id;
100
- const isLast = idx === filteredFaqs.length - 1;
101
- return /*#__PURE__*/_jsxs(View, {
102
- style: [styles.faqItemWrapper, {
103
- marginBottom: idx < filteredFaqs.length - 1 ? 4 : 0
104
- }],
105
- children: [/*#__PURE__*/_jsx(SettingsListItem, {
106
- title: faq.q,
107
- onPress: () => handleToggle(faq.id),
108
- showChevron: false,
109
- rightElement: /*#__PURE__*/_jsx(Ionicons, {
110
- name: isExpanded ? 'chevron-up' : 'chevron-down',
111
- size: 20,
112
- color: colors.icon
113
- })
114
- }), isExpanded && /*#__PURE__*/_jsx(View, {
115
- style: [styles.answerContainer, {
116
- backgroundColor: colors.card
117
- }, isLast && styles.lastAnswerContainer],
118
- children: /*#__PURE__*/_jsx(Text, {
119
- style: [styles.answer, {
120
- color: bloomTheme.colors.text
121
- }],
122
- children: faq.a
123
- })
124
- })]
125
- }, faq.id);
126
- })
127
- })]
68
+ }) || `No FAQ items found matching "${search}"`,
69
+ textColor: bloomTheme.colors.text
70
+ }) : /*#__PURE__*/_jsx(Accordion, {
71
+ type: "single",
72
+ value: expanded,
73
+ onValueChange: handleAccordionChange,
74
+ children: filteredFaqs.map(faq => /*#__PURE__*/_jsxs(AccordionItem, {
75
+ value: faq.id,
76
+ children: [/*#__PURE__*/_jsx(AccordionTrigger, {
77
+ children: faq.q
78
+ }), /*#__PURE__*/_jsx(AccordionContent, {
79
+ children: /*#__PURE__*/_jsx(Text, {
80
+ className: "font-sans text-bodyMedium text-text-secondary",
81
+ children: faq.a
82
+ })
83
+ })]
84
+ }, faq.id))
85
+ })
128
86
  })]
129
87
  });
130
88
  };
131
- const styles = StyleSheet.create({
132
- container: {
133
- flex: 1
134
- },
135
- contentContainer: {
136
- paddingHorizontal: 24,
137
- paddingTop: 20,
138
- paddingBottom: 40
139
- },
140
- searchContainer: {
141
- flexDirection: 'row',
142
- alignItems: 'center',
143
- paddingHorizontal: 14,
144
- paddingVertical: 10,
145
- marginBottom: 12,
146
- borderRadius: 999,
147
- gap: 10
148
- },
149
- searchInput: {
150
- flex: 1,
151
- fontSize: 16,
152
- lineHeight: 20
153
- },
154
- groupedSectionContainer: {
155
- width: '100%'
156
- },
157
- faqItemWrapper: {
158
- width: '100%'
159
- },
160
- answerContainer: {
161
- paddingHorizontal: 10,
162
- paddingTop: 4,
163
- paddingBottom: 12
164
- },
165
- lastAnswerContainer: {
166
- borderBottomLeftRadius: 18,
167
- borderBottomRightRadius: 18
168
- },
169
- answer: {
170
- fontSize: 14,
171
- lineHeight: 20
172
- },
173
- noResults: {
174
- fontSize: 16,
175
- marginTop: 32,
176
- textAlign: 'center'
177
- }
178
- });
179
89
  export default /*#__PURE__*/React.memo(TrustFAQScreen);
180
90
  //# sourceMappingURL=TrustFAQScreen.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useMemo","useCallback","View","Text","StyleSheet","ScrollView","TextInput","LayoutAnimation","Ionicons","Header","SettingsListItem","useI18n","useTheme","normalizeColorScheme","useColorScheme","Colors","jsx","_jsx","jsxs","_jsxs","FAQ_KEYS","TrustFAQScreen","goBack","theme","t","expanded","setExpanded","search","setSearch","bloomTheme","colorScheme","normalizedColorScheme","colors","faqs","map","key","id","q","a","filteredFaqs","trim","searchLower","toLowerCase","filter","faq","includes","handleToggle","configureNext","Presets","easeInEaseOut","prev","style","styles","container","backgroundColor","background","children","title","subtitle","subtitleVariant","onBack","elevation","contentContainerStyle","contentContainer","showsVerticalScrollIndicator","searchContainer","card","name","size","color","icon","searchInput","text","placeholder","placeholderTextColor","textTertiary","value","onChangeText","returnKeyType","length","noResults","secondaryText","query","groupedSectionContainer","idx","isExpanded","isLast","faqItemWrapper","marginBottom","onPress","showChevron","rightElement","answerContainer","lastAnswerContainer","answer","create","flex","paddingHorizontal","paddingTop","paddingBottom","flexDirection","alignItems","paddingVertical","borderRadius","gap","fontSize","lineHeight","width","borderBottomLeftRadius","borderBottomRightRadius","marginTop","textAlign","memo"],"sourceRoot":"../../../../../src","sources":["ui/screens/trust/TrustFAQScreen.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useMemo","useCallback","View","ScrollView","Header","EmptyState","SearchInput","Accordion","AccordionItem","AccordionTrigger","AccordionContent","Text","useTheme","useI18n","jsx","_jsx","jsxs","_jsxs","FAQ_KEYS","TrustFAQScreen","goBack","t","bloomTheme","search","setSearch","expanded","setExpanded","undefined","faqs","map","key","id","q","a","filteredFaqs","trim","searchLower","toLowerCase","filter","faq","includes","handleAccordionChange","value","Array","isArray","className","children","title","subtitle","subtitleVariant","onBack","elevation","label","onChangeText","onClearText","accessibilityLabel","showsVerticalScrollIndicator","length","message","query","textColor","colors","text","type","onValueChange","memo"],"sourceRoot":"../../../../../src","sources":["ui/screens/trust/TrustFAQScreen.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,162 +1,229 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useState } from 'react';
4
- import { View, Text, StyleSheet, ScrollView, ActivityIndicator, TouchableOpacity } from 'react-native';
3
+ import { useCallback, useEffect, useMemo, useState } from 'react';
4
+ import { View, StyleSheet, ActivityIndicator, FlatList, TouchableOpacity } from 'react-native';
5
+ import { getAccountDisplayName, logger } from '@oxyhq/core';
6
+ import { useTheme } from '@oxyhq/bloom/theme';
7
+ import { H6, Text } from '@oxyhq/bloom/typography';
8
+ import { Chip } from '@oxyhq/bloom/chip';
9
+ import { Button } from '@oxyhq/bloom/button';
10
+ import { Ionicons } from '@expo/vector-icons';
5
11
  import Avatar from "../../components/Avatar.js";
6
12
  import Header from "../../components/Header.js";
7
13
  import { useI18n } from "../../hooks/useI18n.js";
8
- import { useTheme } from '@oxyhq/bloom/theme';
9
14
  import { useOxy } from "../../context/OxyContext.js";
10
15
  import { getTrustTierLabel } from "./trustTier.js";
11
16
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
17
+ const AVATAR_SIZE = 40;
18
+ const EMPTY_ICON_SIZE = 64;
19
+ const ERROR_ICON_SIZE = 48;
20
+ /** Ranks within the podium (1–3) get a highlighted row surface. */
21
+ const PODIUM_RANK = 3;
12
22
  const TrustLeaderboardScreen = ({
13
23
  goBack,
14
- theme,
15
24
  navigate
16
25
  }) => {
17
- // Use useOxy() hook for OxyContext values
18
26
  const {
19
- oxyServices
27
+ oxyServices,
28
+ user: currentUser
20
29
  } = useOxy();
21
30
  const {
22
- t
31
+ t,
32
+ locale
23
33
  } = useI18n();
34
+ const bloomTheme = useTheme();
24
35
  const [leaderboard, setLeaderboard] = useState([]);
25
36
  const [isLoading, setIsLoading] = useState(true);
26
37
  const [error, setError] = useState(null);
27
- const bloomTheme = useTheme();
28
- // Override primaryColor for Oxy Trust screens (purple instead of blue)
29
- const primaryColor = '#d169e5';
30
- useEffect(() => {
38
+ const currentUserId = currentUser?.id ?? '';
39
+ const loadLeaderboard = useCallback(() => {
31
40
  setIsLoading(true);
32
41
  setError(null);
33
- oxyServices.getReputationLeaderboard().then(data => setLeaderboard(Array.isArray(data) ? data : [])).catch(err => setError((err instanceof Error ? err.message : null) || 'Failed to load leaderboard')).finally(() => setIsLoading(false));
42
+ oxyServices.getReputationLeaderboard().then(data => setLeaderboard(Array.isArray(data) ? data : [])).catch(err => {
43
+ logger.error('Failed to load trust leaderboard', err instanceof Error ? err : new Error(String(err)), {
44
+ component: 'TrustLeaderboardScreen'
45
+ });
46
+ setError(err instanceof Error ? err.message : null);
47
+ }).finally(() => setIsLoading(false));
34
48
  }, [oxyServices]);
49
+ useEffect(() => {
50
+ loadLeaderboard();
51
+ }, [loadLeaderboard]);
52
+ const title = t('trust.leaderboard.title') || 'Trust Leaderboard';
53
+ const subtitle = t('trust.leaderboard.subtitle') || 'Top contributors in the community';
54
+ const handleEntryPress = useCallback(entry => {
55
+ navigate?.('Profile', {
56
+ userId: entry.user.id,
57
+ username: entry.user.username
58
+ });
59
+ }, [navigate]);
60
+ const renderEntry = useCallback(({
61
+ item
62
+ }) => {
63
+ const displayName = getAccountDisplayName(item.user, locale);
64
+ const isViewer = currentUserId !== '' && item.user.id === currentUserId;
65
+ const isPodium = item.rank <= PODIUM_RANK;
66
+ // Viewer's own row and podium ranks get a subtle highlighted surface.
67
+ const highlightClass = isViewer || isPodium ? 'bg-fill-secondary' : '';
68
+ return /*#__PURE__*/_jsxs(TouchableOpacity, {
69
+ style: styles.row,
70
+ className: `px-screen-margin py-space-12 gap-space-12 rounded-radius-12 ${highlightClass}`,
71
+ onPress: () => handleEntryPress(item),
72
+ activeOpacity: 0.7,
73
+ accessibilityRole: "button",
74
+ accessibilityLabel: `${displayName}, ${t('trust.leaderboard.rankLabel', {
75
+ rank: item.rank
76
+ }) || `rank ${item.rank}`}`,
77
+ children: [/*#__PURE__*/_jsx(Text, {
78
+ className: "text-text-secondary font-bold text-subtitle text-center",
79
+ style: styles.rank,
80
+ numberOfLines: 1,
81
+ children: item.rank
82
+ }), /*#__PURE__*/_jsx(Avatar, {
83
+ uri: item.user.avatar ? oxyServices.getFileDownloadUrl(item.user.avatar, 'thumb') : undefined,
84
+ name: displayName,
85
+ size: AVATAR_SIZE
86
+ }), /*#__PURE__*/_jsxs(View, {
87
+ style: styles.userColumn,
88
+ children: [/*#__PURE__*/_jsx(Text, {
89
+ className: "text-text font-medium text-base",
90
+ numberOfLines: 1,
91
+ children: displayName
92
+ }), /*#__PURE__*/_jsx(View, {
93
+ style: styles.tierRow,
94
+ className: "mt-space-4",
95
+ children: /*#__PURE__*/_jsx(Chip, {
96
+ size: "small",
97
+ variant: "soft",
98
+ color: isPodium ? 'primary' : 'default',
99
+ children: getTrustTierLabel(item.trustTier, t)
100
+ })
101
+ })]
102
+ }), /*#__PURE__*/_jsx(Text, {
103
+ className: "text-text font-bold text-base",
104
+ numberOfLines: 1,
105
+ children: item.total
106
+ })]
107
+ });
108
+ }, [oxyServices, locale, currentUserId, handleEntryPress, t]);
109
+ const keyExtractor = useCallback((item, index) => item.user.id || `entry-${index}`, []);
110
+ const ItemSeparator = useMemo(() => () => /*#__PURE__*/_jsx(View, {
111
+ style: styles.separator,
112
+ className: "border-b border-border-image"
113
+ }), []);
114
+ if (isLoading) {
115
+ return /*#__PURE__*/_jsxs(View, {
116
+ className: "flex-1 bg-bg",
117
+ children: [/*#__PURE__*/_jsx(Header, {
118
+ title: title,
119
+ subtitle: subtitle,
120
+ onBack: goBack,
121
+ elevation: "subtle"
122
+ }), /*#__PURE__*/_jsx(View, {
123
+ style: styles.center,
124
+ children: /*#__PURE__*/_jsx(ActivityIndicator, {
125
+ size: "large",
126
+ color: bloomTheme.colors.primary
127
+ })
128
+ })]
129
+ });
130
+ }
131
+ if (error) {
132
+ return /*#__PURE__*/_jsxs(View, {
133
+ className: "flex-1 bg-bg",
134
+ children: [/*#__PURE__*/_jsx(Header, {
135
+ title: title,
136
+ subtitle: subtitle,
137
+ onBack: goBack,
138
+ elevation: "subtle"
139
+ }), /*#__PURE__*/_jsxs(View, {
140
+ style: styles.center,
141
+ className: "px-space-32 gap-space-16",
142
+ children: [/*#__PURE__*/_jsx(Ionicons, {
143
+ name: "alert-circle",
144
+ size: ERROR_ICON_SIZE,
145
+ color: bloomTheme.colors.error
146
+ }), /*#__PURE__*/_jsx(Text, {
147
+ className: "text-text-secondary text-base text-center",
148
+ children: error || t('trust.leaderboard.error') || 'Failed to load leaderboard'
149
+ }), /*#__PURE__*/_jsx(Button, {
150
+ variant: "primary",
151
+ onPress: loadLeaderboard,
152
+ children: t('common.retry') || 'Retry'
153
+ })]
154
+ })]
155
+ });
156
+ }
35
157
  return /*#__PURE__*/_jsxs(View, {
36
- style: [styles.container, {
37
- backgroundColor: bloomTheme.colors.background
38
- }],
158
+ className: "flex-1 bg-bg",
39
159
  children: [/*#__PURE__*/_jsx(Header, {
40
- title: t('trust.leaderboard.title') || 'Trust Leaderboard',
41
- subtitle: t('trust.leaderboard.subtitle') || 'Top contributors in the community',
160
+ title: title,
161
+ subtitle: subtitle,
42
162
  onBack: goBack,
43
163
  elevation: "subtle"
44
- }), isLoading ? /*#__PURE__*/_jsx(ActivityIndicator, {
45
- size: "large",
46
- color: primaryColor,
47
- style: {
48
- marginTop: 40
49
- }
50
- }) : error ? /*#__PURE__*/_jsx(Text, {
51
- style: [styles.error, {
52
- color: bloomTheme.colors.error
53
- }],
54
- children: error
55
- }) : /*#__PURE__*/_jsx(ScrollView, {
56
- contentContainerStyle: styles.listContainer,
57
- children: leaderboard.length === 0 ? /*#__PURE__*/_jsx(Text, {
58
- style: [styles.placeholder, {
59
- color: bloomTheme.colors.text
60
- }],
61
- children: t('trust.leaderboard.empty') || 'No leaderboard data.'
62
- }) : leaderboard.map(entry => {
63
- const username = entry.user.username;
64
- const displayName = username || entry.user.id;
65
- return /*#__PURE__*/_jsxs(TouchableOpacity, {
66
- style: [styles.row, {
67
- borderColor: bloomTheme.colors.border
68
- }, entry.rank <= 3 && {
69
- backgroundColor: bloomTheme.colors.primarySubtle
70
- }],
71
- onPress: () => navigate?.('Profile', {
72
- userId: entry.user.id,
73
- username
74
- }),
75
- activeOpacity: 0.7,
76
- children: [/*#__PURE__*/_jsx(Text, {
77
- style: [styles.rank, {
78
- color: primaryColor
79
- }],
80
- children: entry.rank
81
- }), /*#__PURE__*/_jsx(Avatar, {
82
- name: username || 'User',
83
- size: 40,
84
- style: styles.avatar
85
- }), /*#__PURE__*/_jsxs(View, {
86
- style: styles.userColumn,
87
- children: [/*#__PURE__*/_jsx(Text, {
88
- style: [styles.username, {
89
- color: bloomTheme.colors.text
90
- }],
91
- numberOfLines: 1,
92
- children: displayName
93
- }), /*#__PURE__*/_jsx(Text, {
94
- style: [styles.tier, {
95
- color: bloomTheme.colors.textTertiary
96
- }],
97
- numberOfLines: 1,
98
- children: getTrustTierLabel(entry.trustTier, t)
99
- })]
100
- }), /*#__PURE__*/_jsx(Text, {
101
- style: [styles.reputation, {
102
- color: primaryColor
103
- }],
104
- children: entry.total
105
- })]
106
- }, entry.user.id);
164
+ }), /*#__PURE__*/_jsx(FlatList, {
165
+ data: leaderboard,
166
+ renderItem: renderEntry,
167
+ keyExtractor: keyExtractor,
168
+ contentContainerStyle: styles.listContent,
169
+ className: "px-space-8 pt-space-12",
170
+ ItemSeparatorComponent: ItemSeparator,
171
+ ListEmptyComponent: /*#__PURE__*/_jsxs(View, {
172
+ style: styles.emptyContainer,
173
+ className: "px-space-32 gap-space-8",
174
+ children: [/*#__PURE__*/_jsx(Ionicons, {
175
+ name: "trophy-outline",
176
+ size: EMPTY_ICON_SIZE,
177
+ color: bloomTheme.colors.textSecondary
178
+ }), /*#__PURE__*/_jsx(H6, {
179
+ className: "text-text text-center mt-space-8",
180
+ children: t('trust.leaderboard.empty') || 'No leaderboard data'
181
+ }), /*#__PURE__*/_jsx(Text, {
182
+ className: "text-text-secondary text-sm text-center",
183
+ children: t('trust.leaderboard.emptyDesc') || 'Top contributors will appear here as the community grows.'
184
+ })]
107
185
  })
108
186
  })]
109
187
  });
110
188
  };
189
+
190
+ // Layout-only styles: flex centering, measured rank column width, separator
191
+ // inset, and row flex layout. Colors, spacing, radius, and typography roles
192
+ // live on Bloom components + NativeWind token classes.
111
193
  const styles = StyleSheet.create({
112
- container: {
113
- flex: 1
194
+ center: {
195
+ flex: 1,
196
+ justifyContent: 'center',
197
+ alignItems: 'center'
114
198
  },
115
- listContainer: {
116
- paddingBottom: 40,
117
- paddingTop: 20
199
+ listContent: {
200
+ flexGrow: 1,
201
+ paddingBottom: 40
118
202
  },
119
203
  row: {
120
204
  flexDirection: 'row',
121
- alignItems: 'center',
122
- paddingVertical: 12,
123
- paddingHorizontal: 20,
124
- borderBottomWidth: 1
205
+ alignItems: 'center'
125
206
  },
126
207
  rank: {
127
- fontSize: 20,
128
- width: 32,
129
- textAlign: 'center',
130
- fontWeight: 'bold'
131
- },
132
- avatar: {
133
- marginHorizontal: 8
208
+ width: 28
134
209
  },
135
210
  userColumn: {
136
- flex: 1,
137
- marginLeft: 8
138
- },
139
- username: {
140
- fontSize: 16
141
- },
142
- tier: {
143
- fontSize: 12,
144
- marginTop: 1
211
+ flex: 1
145
212
  },
146
- reputation: {
147
- fontSize: 18,
148
- fontWeight: 'bold',
149
- marginLeft: 12
213
+ tierRow: {
214
+ flexDirection: 'row',
215
+ alignItems: 'flex-start'
150
216
  },
151
- placeholder: {
152
- fontSize: 16,
153
- textAlign: 'center',
154
- marginTop: 40
217
+ // Inset the hairline separator to align with the start of the entry's text
218
+ // content (rank column + avatar + screen margin + gaps).
219
+ separator: {
220
+ marginLeft: 80
155
221
  },
156
- error: {
157
- fontSize: 16,
158
- textAlign: 'center',
159
- marginTop: 40
222
+ emptyContainer: {
223
+ flex: 1,
224
+ justifyContent: 'center',
225
+ alignItems: 'center',
226
+ paddingTop: 80
160
227
  }
161
228
  });
162
229
  export default TrustLeaderboardScreen;