@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
@@ -2,7 +2,6 @@ import type React from 'react';
2
2
  import { useEffect, useState, useCallback } from 'react';
3
3
  import {
4
4
  View,
5
- Text,
6
5
  StyleSheet,
7
6
  ActivityIndicator,
8
7
  FlatList,
@@ -11,6 +10,9 @@ import {
11
10
  } from 'react-native';
12
11
  import type { BaseScreenProps } from '../types/navigation';
13
12
  import { useTheme } from '@oxyhq/bloom/theme';
13
+ import { H6, Text } from '@oxyhq/bloom/typography';
14
+ import { Button } from '@oxyhq/bloom/button';
15
+ import Header from '../components/Header';
14
16
  import Avatar from '../components/Avatar';
15
17
  import FollowButton from '../components/FollowButton';
16
18
  import { Ionicons } from '@expo/vector-icons';
@@ -28,12 +30,22 @@ interface UserListScreenProps extends BaseScreenProps {
28
30
  }
29
31
 
30
32
  const PAGE_SIZE = 20;
33
+ const AVATAR_SIZE = 48;
34
+ const EMPTY_ICON_SIZE = 64;
35
+ const ERROR_ICON_SIZE = 48;
36
+
37
+ /**
38
+ * Resolve a user's id from the canonical `id` field, falling back to the
39
+ * Mongo `_id` exposed via `User`'s index signature — narrowed with a `typeof`
40
+ * guard so we never reach for a cast.
41
+ */
42
+ const resolveUserId = (user: User): string =>
43
+ user.id || (typeof user._id === 'string' ? user._id : '');
31
44
 
32
45
  const UserListScreen: React.FC<UserListScreenProps> = ({
33
46
  userId,
34
47
  mode,
35
48
  initialCount,
36
- theme,
37
49
  goBack,
38
50
  navigate,
39
51
  }) => {
@@ -47,10 +59,9 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
47
59
  const [hasMore, setHasMore] = useState(true);
48
60
 
49
61
  const bloomTheme = useTheme();
50
- const styles = createStyles();
51
62
  const { t, locale } = useI18n();
52
63
 
53
- const currentUserId = currentUser?.id || (currentUser?._id as string | undefined);
64
+ const currentUserId = currentUser ? resolveUserId(currentUser) : '';
54
65
 
55
66
  const fetchUsers = useCallback(
56
67
  async (offset = 0, isRefresh = false) => {
@@ -124,7 +135,7 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
124
135
 
125
136
  const handleUserPress = useCallback(
126
137
  (user: User) => {
127
- const targetUserId = user.id || (user._id as string | undefined);
138
+ const targetUserId = resolveUserId(user);
128
139
  if (targetUserId && navigate) {
129
140
  navigate('Profile', { userId: targetUserId });
130
141
  }
@@ -134,15 +145,20 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
134
145
 
135
146
  const renderUser = useCallback(
136
147
  ({ item }: { item: User }) => {
137
- const itemUserId = item.id || (item._id as string) || '';
148
+ const itemUserId = resolveUserId(item);
138
149
  const isCurrentUser = itemUserId === currentUserId;
139
150
  const description = typeof item.description === 'string' ? item.description : '';
151
+ const displayName = getAccountDisplayName(item, locale);
152
+ const handle = getAccountFallbackHandle(item);
140
153
 
141
154
  return (
142
155
  <TouchableOpacity
143
156
  style={styles.userItem}
157
+ className="px-screen-margin py-space-12 gap-space-12"
144
158
  onPress={() => handleUserPress(item)}
145
159
  activeOpacity={0.7}
160
+ accessibilityRole="button"
161
+ accessibilityLabel={displayName}
146
162
  >
147
163
  <Avatar
148
164
  uri={
@@ -150,87 +166,76 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
150
166
  ? oxyServices.getFileDownloadUrl(item.avatar, 'thumb')
151
167
  : undefined
152
168
  }
153
- name={getAccountDisplayName(item, locale)}
154
- size={48}
169
+ name={displayName}
170
+ size={AVATAR_SIZE}
155
171
  />
156
172
  <View style={styles.userInfo}>
157
- <Text style={styles.userName} className="text-foreground" numberOfLines={1}>
158
- {getAccountDisplayName(item, locale)}
173
+ <Text className="text-text font-medium text-base" numberOfLines={1}>
174
+ {displayName}
159
175
  </Text>
160
- {(() => {
161
- const handle = getAccountFallbackHandle(item);
162
- return handle ? (
163
- <Text style={styles.userHandle} className="text-muted-foreground" numberOfLines={1}>
164
- {item.username ? `@${handle}` : handle}
165
- </Text>
166
- ) : null;
167
- })()}
176
+ {handle ? (
177
+ <Text className="text-text-secondary text-sm mt-space-2" numberOfLines={1}>
178
+ {item.username ? `@${handle}` : handle}
179
+ </Text>
180
+ ) : null}
168
181
  {description ? (
169
- <Text style={styles.userBio} className="text-foreground" numberOfLines={2}>
182
+ <Text className="text-text-secondary text-sm mt-space-4" numberOfLines={2}>
170
183
  {description}
171
184
  </Text>
172
185
  ) : null}
173
186
  </View>
174
187
  {!isCurrentUser && itemUserId ? (
175
- <View style={styles.followButtonWrapper}>
176
- <FollowButton userId={itemUserId} size="small" />
177
- </View>
188
+ <FollowButton userId={itemUserId} size="small" />
178
189
  ) : null}
179
190
  </TouchableOpacity>
180
191
  );
181
192
  },
182
- [bloomTheme, styles, handleUserPress, currentUserId, oxyServices, locale]
193
+ [handleUserPress, currentUserId, oxyServices, locale]
183
194
  );
184
195
 
185
196
  const renderEmpty = useCallback(() => {
186
197
  if (isLoading) return null;
187
198
  return (
188
- <View style={styles.emptyContainer}>
199
+ <View style={styles.emptyContainer} className="px-space-32 gap-space-8">
189
200
  <Ionicons
190
201
  name={mode === 'followers' ? 'people-outline' : 'heart-outline'}
191
- size={64}
202
+ size={EMPTY_ICON_SIZE}
192
203
  color={bloomTheme.colors.textSecondary}
193
204
  />
194
- <Text style={styles.emptyTitle} className="text-foreground">
205
+ <H6 className="text-text text-center mt-space-8">
195
206
  {mode === 'followers'
196
207
  ? t('userList.noFollowers') || 'No followers yet'
197
208
  : t('userList.noFollowing') || 'Not following anyone'}
198
- </Text>
199
- <Text style={styles.emptySubtitle} className="text-muted-foreground">
209
+ </H6>
210
+ <Text className="text-text-secondary text-sm text-center">
200
211
  {mode === 'followers'
201
212
  ? t('userList.noFollowersDesc') || 'When people follow this user, they will appear here.'
202
213
  : t('userList.noFollowingDesc') || 'When this user follows people, they will appear here.'}
203
214
  </Text>
204
215
  </View>
205
216
  );
206
- }, [isLoading, mode, bloomTheme, styles, t]);
217
+ }, [isLoading, mode, bloomTheme, t]);
207
218
 
208
219
  const renderFooter = useCallback(() => {
209
220
  if (!isLoadingMore) return null;
210
221
  return (
211
- <View style={styles.footerLoader}>
222
+ <View style={styles.footerLoader} className="py-space-16">
212
223
  <ActivityIndicator size="small" color={bloomTheme.colors.primary} />
213
224
  </View>
214
225
  );
215
- }, [isLoadingMore, bloomTheme, styles]);
226
+ }, [isLoadingMore, bloomTheme]);
216
227
 
217
228
  const title = mode === 'followers'
218
229
  ? (t('userList.followers') || 'Followers')
219
230
  : (t('userList.following') || 'Following');
220
231
 
232
+ const headerSubtitle = total > 0 ? String(total) : undefined;
233
+
221
234
  if (isLoading && users.length === 0) {
222
235
  return (
223
- <View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
224
- <View style={styles.header} className="border-border">
225
- {goBack && (
226
- <TouchableOpacity onPress={goBack} style={styles.backButton}>
227
- <Ionicons name="arrow-back" size={24} color={bloomTheme.colors.text} />
228
- </TouchableOpacity>
229
- )}
230
- <Text style={styles.headerTitle} className="text-foreground">{title}</Text>
231
- <View style={styles.headerRight} />
232
- </View>
233
- <View style={styles.loadingContainer}>
236
+ <View className="flex-1 bg-bg">
237
+ <Header title={title} onBack={goBack} elevation="subtle" />
238
+ <View style={styles.center}>
234
239
  <ActivityIndicator size="large" color={bloomTheme.colors.primary} />
235
240
  </View>
236
241
  </View>
@@ -239,47 +244,30 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
239
244
 
240
245
  if (error) {
241
246
  return (
242
- <View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
243
- <View style={styles.header} className="border-border">
244
- {goBack && (
245
- <TouchableOpacity onPress={goBack} style={styles.backButton}>
246
- <Ionicons name="arrow-back" size={24} color={bloomTheme.colors.text} />
247
- </TouchableOpacity>
248
- )}
249
- <Text style={styles.headerTitle} className="text-foreground">{title}</Text>
250
- <View style={styles.headerRight} />
251
- </View>
252
- <View style={styles.errorContainer}>
253
- <Ionicons name="alert-circle" size={48} color={bloomTheme.colors.error} />
254
- <Text style={styles.errorText} className="text-destructive">{error}</Text>
255
- <TouchableOpacity style={styles.retryButton} className="bg-primary" onPress={() => fetchUsers(0)}>
256
- <Text style={[styles.retryButtonText, { color: bloomTheme.colors.negativeForeground }]}>{t('common.retry') || 'Retry'}</Text>
257
- </TouchableOpacity>
247
+ <View className="flex-1 bg-bg">
248
+ <Header title={title} onBack={goBack} elevation="subtle" />
249
+ <View style={styles.center} className="px-space-32 gap-space-16">
250
+ <Ionicons name="alert-circle" size={ERROR_ICON_SIZE} color={bloomTheme.colors.error} />
251
+ <Text className="text-text-secondary text-base text-center">{error}</Text>
252
+ <Button variant="primary" onPress={() => fetchUsers(0)}>
253
+ {t('common.retry') || 'Retry'}
254
+ </Button>
258
255
  </View>
259
256
  </View>
260
257
  );
261
258
  }
262
259
 
263
260
  return (
264
- <View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
265
- <View style={styles.header} className="border-border">
266
- {goBack && (
267
- <TouchableOpacity onPress={goBack} style={styles.backButton}>
268
- <Ionicons name="arrow-back" size={24} color={bloomTheme.colors.text} />
269
- </TouchableOpacity>
270
- )}
271
- <View style={styles.headerTitleContainer}>
272
- <Text style={styles.headerTitle} className="text-foreground">{title}</Text>
273
- {total > 0 && <Text style={styles.headerCount} className="text-muted-foreground">{total}</Text>}
274
- </View>
275
- <View style={styles.headerRight} />
276
- </View>
261
+ <View className="flex-1 bg-bg">
262
+ <Header title={title} subtitle={headerSubtitle} onBack={goBack} elevation="subtle" />
277
263
  <FlatList
278
264
  data={users}
279
265
  renderItem={renderUser}
280
- keyExtractor={(item, index) => item.id || (item._id as string) || `user-${index}`}
266
+ keyExtractor={(item, index) => resolveUserId(item) || `user-${index}`}
281
267
  contentContainerStyle={styles.listContent}
282
- ItemSeparatorComponent={() => <View style={styles.separator} className="bg-border" />}
268
+ ItemSeparatorComponent={() => (
269
+ <View style={styles.separator} className="border-b border-border" />
270
+ )}
283
271
  ListEmptyComponent={renderEmpty}
284
272
  ListFooterComponent={renderFooter}
285
273
  onEndReached={handleLoadMore}
@@ -297,120 +285,39 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
297
285
  );
298
286
  };
299
287
 
300
- const createStyles = () =>
301
- StyleSheet.create({
302
- container: {
303
- flex: 1,
304
- },
305
- header: {
306
- flexDirection: 'row',
307
- alignItems: 'center',
308
- paddingHorizontal: 16,
309
- paddingVertical: 12,
310
- borderBottomWidth: 1,
311
- },
312
- backButton: {
313
- padding: 8,
314
- marginRight: 8,
315
- },
316
- headerTitleContainer: {
317
- flex: 1,
318
- flexDirection: 'row',
319
- alignItems: 'center',
320
- },
321
- headerTitle: {
322
- fontSize: 18,
323
- fontWeight: '600',
324
- },
325
- headerCount: {
326
- fontSize: 16,
327
- marginLeft: 8,
328
- },
329
- headerRight: {
330
- width: 40,
331
- },
332
- loadingContainer: {
333
- flex: 1,
334
- justifyContent: 'center',
335
- alignItems: 'center',
336
- },
337
- errorContainer: {
338
- flex: 1,
339
- justifyContent: 'center',
340
- alignItems: 'center',
341
- paddingHorizontal: 32,
342
- },
343
- errorText: {
344
- fontSize: 16,
345
- textAlign: 'center',
346
- marginTop: 16,
347
- marginBottom: 24,
348
- },
349
- retryButton: {
350
- paddingHorizontal: 24,
351
- paddingVertical: 12,
352
- borderRadius: 8,
353
- },
354
- retryButtonText: {
355
- fontSize: 16,
356
- fontWeight: '600',
357
- },
358
- listContent: {
359
- flexGrow: 1,
360
- },
361
- userItem: {
362
- flexDirection: 'row',
363
- alignItems: 'center',
364
- paddingHorizontal: 16,
365
- paddingVertical: 12,
366
- },
367
- userInfo: {
368
- flex: 1,
369
- marginLeft: 12,
370
- marginRight: 8,
371
- },
372
- userName: {
373
- fontSize: 16,
374
- fontWeight: '600',
375
- },
376
- userHandle: {
377
- fontSize: 14,
378
- marginTop: 2,
379
- },
380
- userBio: {
381
- fontSize: 14,
382
- marginTop: 4,
383
- opacity: 0.8,
384
- },
385
- followButtonWrapper: {
386
- marginLeft: 'auto',
387
- },
388
- separator: {
389
- height: 1,
390
- marginLeft: 76,
391
- },
392
- emptyContainer: {
393
- flex: 1,
394
- justifyContent: 'center',
395
- alignItems: 'center',
396
- paddingHorizontal: 32,
397
- paddingTop: 80,
398
- },
399
- emptyTitle: {
400
- fontSize: 18,
401
- fontWeight: '600',
402
- marginTop: 16,
403
- textAlign: 'center',
404
- },
405
- emptySubtitle: {
406
- fontSize: 14,
407
- marginTop: 8,
408
- textAlign: 'center',
409
- },
410
- footerLoader: {
411
- paddingVertical: 16,
412
- alignItems: 'center',
413
- },
414
- });
288
+ // Layout-only styles: flex centering, measured separator inset, and the row
289
+ // flex layout. Colors, spacing, radius, and typography roles live on Bloom
290
+ // components + NativeWind token classes.
291
+ const styles = StyleSheet.create({
292
+ center: {
293
+ flex: 1,
294
+ justifyContent: 'center',
295
+ alignItems: 'center',
296
+ },
297
+ listContent: {
298
+ flexGrow: 1,
299
+ },
300
+ userItem: {
301
+ flexDirection: 'row',
302
+ alignItems: 'center',
303
+ },
304
+ userInfo: {
305
+ flex: 1,
306
+ },
307
+ // Inset the hairline separator to align with the start of the user's text
308
+ // content (avatar width + screen margin + gap).
309
+ separator: {
310
+ marginLeft: 76,
311
+ },
312
+ emptyContainer: {
313
+ flex: 1,
314
+ justifyContent: 'center',
315
+ alignItems: 'center',
316
+ paddingTop: 80,
317
+ },
318
+ footerLoader: {
319
+ alignItems: 'center',
320
+ },
321
+ });
415
322
 
416
323
  export default UserListScreen;