@oxyhq/services 22.9.0 → 22.10.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 (428) hide show
  1. package/lib/commonjs/index.js +24 -5
  2. package/lib/commonjs/index.js.map +1 -1
  3. package/lib/commonjs/ui/components/{OxyAccountDialog.js → OxyAccountDialogScreen.js} +25 -125
  4. package/lib/commonjs/ui/components/OxyAccountDialogScreen.js.map +1 -0
  5. package/lib/commonjs/ui/components/OxyAuthChooser.js +137 -40
  6. package/lib/commonjs/ui/components/OxyAuthChooser.js.map +1 -1
  7. package/lib/commonjs/ui/components/OxyConsentScreen.js +1 -1
  8. package/lib/commonjs/ui/components/ProfileButton.js +1 -1
  9. package/lib/commonjs/ui/components/RequireOxyAuth.js +1 -1
  10. package/lib/commonjs/ui/components/SurfaceHeaderAction.js +63 -0
  11. package/lib/commonjs/ui/components/SurfaceHeaderAction.js.map +1 -0
  12. package/lib/commonjs/ui/components/SurfaceScreen.js +52 -5
  13. package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -1
  14. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +46 -29
  15. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  16. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +47 -23
  17. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  18. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js +22 -12
  19. package/lib/commonjs/ui/components/oxyAuthChooserStyles.js.map +1 -1
  20. package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js +83 -0
  21. package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js.map +1 -0
  22. package/lib/commonjs/ui/context/OxyContext.js +23 -9
  23. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  24. package/lib/commonjs/ui/hooks/useAvatarPicker.js +34 -39
  25. package/lib/commonjs/ui/hooks/useAvatarPicker.js.map +1 -1
  26. package/lib/commonjs/ui/hooks/useSurfaceHeader.js +46 -0
  27. package/lib/commonjs/ui/hooks/useSurfaceHeader.js.map +1 -0
  28. package/lib/commonjs/ui/hooks/useSwitchableAccounts.js +1 -1
  29. package/lib/commonjs/ui/navigation/accountDialogManager.js +14 -2
  30. package/lib/commonjs/ui/navigation/accountDialogManager.js.map +1 -1
  31. package/lib/commonjs/ui/navigation/routes.js +3 -3
  32. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  33. package/lib/commonjs/ui/navigation/surfaceBackBridge.js +68 -0
  34. package/lib/commonjs/ui/navigation/surfaceBackBridge.js.map +1 -0
  35. package/lib/commonjs/ui/navigation/surfaceRegistry.js +52 -8
  36. package/lib/commonjs/ui/navigation/surfaceRegistry.js.map +1 -1
  37. package/lib/commonjs/ui/navigation/surfaces.js +42 -5
  38. package/lib/commonjs/ui/navigation/surfaces.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountMembersScreen.js +214 -283
  40. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +88 -118
  42. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +22 -36
  44. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/AppInfoScreen.js +219 -226
  46. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/AvatarCropScreen.js +10 -14
  48. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +24 -39
  50. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/CreateAccountScreen.js +136 -158
  52. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +29 -36
  54. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/EditProfileScreen.js +101 -109
  56. package/lib/commonjs/ui/screens/EditProfileScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/FAQScreen.js +10 -15
  58. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/FeedbackScreen.js +8 -16
  60. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/FileManagementScreen.js +219 -206
  62. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  63. package/lib/commonjs/ui/screens/HelpSupportScreen.js +62 -69
  64. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  65. package/lib/commonjs/ui/screens/HistoryViewScreen.js +63 -79
  66. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  67. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +69 -98
  68. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  69. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +8 -14
  70. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  71. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +77 -94
  72. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/ManageAccountScreen.js +99 -134
  74. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  75. package/lib/commonjs/ui/screens/NotificationsScreen.js +69 -76
  76. package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
  77. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +3 -8
  78. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/PreferencesScreen.js +67 -74
  80. package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +55 -91
  82. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  83. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +291 -304
  84. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  85. package/lib/commonjs/ui/screens/ProfileScreen.js +100 -114
  86. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  87. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +38 -45
  88. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  89. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +44 -57
  90. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  91. package/lib/commonjs/ui/screens/UserLinksScreen.js +24 -31
  92. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  93. package/lib/commonjs/ui/screens/UserListScreen.js +14 -24
  94. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  95. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +1 -1
  96. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +66 -75
  97. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +111 -139
  99. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +13 -20
  101. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +14 -27
  103. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +68 -85
  105. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +28 -36
  107. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  108. package/lib/module/index.js +12 -5
  109. package/lib/module/index.js.map +1 -1
  110. package/lib/module/ui/components/{OxyAccountDialog.js → OxyAccountDialogScreen.js} +27 -127
  111. package/lib/module/ui/components/OxyAccountDialogScreen.js.map +1 -0
  112. package/lib/module/ui/components/OxyAuthChooser.js +137 -40
  113. package/lib/module/ui/components/OxyAuthChooser.js.map +1 -1
  114. package/lib/module/ui/components/OxyConsentScreen.js +1 -1
  115. package/lib/module/ui/components/ProfileButton.js +1 -1
  116. package/lib/module/ui/components/RequireOxyAuth.js +1 -1
  117. package/lib/module/ui/components/SurfaceHeaderAction.js +58 -0
  118. package/lib/module/ui/components/SurfaceHeaderAction.js.map +1 -0
  119. package/lib/module/ui/components/SurfaceScreen.js +53 -6
  120. package/lib/module/ui/components/SurfaceScreen.js.map +1 -1
  121. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +46 -29
  122. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  123. package/lib/module/ui/components/modals/DeleteAccountModal.js +46 -23
  124. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  125. package/lib/module/ui/components/oxyAuthChooserStyles.js +22 -12
  126. package/lib/module/ui/components/oxyAuthChooserStyles.js.map +1 -1
  127. package/lib/module/ui/components/surfaces/ActionSheetSurface.js +78 -0
  128. package/lib/module/ui/components/surfaces/ActionSheetSurface.js.map +1 -0
  129. package/lib/module/ui/context/OxyContext.js +23 -9
  130. package/lib/module/ui/context/OxyContext.js.map +1 -1
  131. package/lib/module/ui/hooks/useAvatarPicker.js +34 -39
  132. package/lib/module/ui/hooks/useAvatarPicker.js.map +1 -1
  133. package/lib/module/ui/hooks/useSurfaceHeader.js +42 -0
  134. package/lib/module/ui/hooks/useSurfaceHeader.js.map +1 -0
  135. package/lib/module/ui/hooks/useSwitchableAccounts.js +1 -1
  136. package/lib/module/ui/navigation/accountDialogManager.js +14 -2
  137. package/lib/module/ui/navigation/accountDialogManager.js.map +1 -1
  138. package/lib/module/ui/navigation/routes.js +3 -3
  139. package/lib/module/ui/navigation/routes.js.map +1 -1
  140. package/lib/module/ui/navigation/surfaceBackBridge.js +63 -0
  141. package/lib/module/ui/navigation/surfaceBackBridge.js.map +1 -0
  142. package/lib/module/ui/navigation/surfaceRegistry.js +52 -8
  143. package/lib/module/ui/navigation/surfaceRegistry.js.map +1 -1
  144. package/lib/module/ui/navigation/surfaces.js +42 -5
  145. package/lib/module/ui/navigation/surfaces.js.map +1 -1
  146. package/lib/module/ui/screens/AccountMembersScreen.js +218 -286
  147. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  148. package/lib/module/ui/screens/AccountSettingsScreen.js +92 -121
  149. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  150. package/lib/module/ui/screens/AccountVerificationScreen.js +25 -38
  151. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  152. package/lib/module/ui/screens/AppInfoScreen.js +220 -227
  153. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  154. package/lib/module/ui/screens/AvatarCropScreen.js +10 -14
  155. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  156. package/lib/module/ui/screens/ConnectedAppsScreen.js +26 -40
  157. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  158. package/lib/module/ui/screens/CreateAccountScreen.js +139 -160
  159. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  160. package/lib/module/ui/screens/EditProfileFieldScreen.js +32 -38
  161. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  162. package/lib/module/ui/screens/EditProfileScreen.js +102 -110
  163. package/lib/module/ui/screens/EditProfileScreen.js.map +1 -1
  164. package/lib/module/ui/screens/FAQScreen.js +11 -15
  165. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  166. package/lib/module/ui/screens/FeedbackScreen.js +10 -17
  167. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  168. package/lib/module/ui/screens/FileManagementScreen.js +222 -208
  169. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  170. package/lib/module/ui/screens/HelpSupportScreen.js +64 -70
  171. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  172. package/lib/module/ui/screens/HistoryViewScreen.js +65 -81
  173. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  174. package/lib/module/ui/screens/LanguageSelectorScreen.js +71 -99
  175. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  176. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +10 -15
  177. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  178. package/lib/module/ui/screens/LegalDocumentsScreen.js +78 -94
  179. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  180. package/lib/module/ui/screens/ManageAccountScreen.js +102 -137
  181. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  182. package/lib/module/ui/screens/NotificationsScreen.js +71 -77
  183. package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
  184. package/lib/module/ui/screens/PaymentGatewayScreen.js +4 -9
  185. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  186. package/lib/module/ui/screens/PreferencesScreen.js +69 -75
  187. package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
  188. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +58 -93
  189. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  190. package/lib/module/ui/screens/PrivacySettingsScreen.js +293 -305
  191. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  192. package/lib/module/ui/screens/ProfileScreen.js +102 -116
  193. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  194. package/lib/module/ui/screens/SavesCollectionsScreen.js +40 -46
  195. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  196. package/lib/module/ui/screens/SearchSettingsScreen.js +46 -58
  197. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  198. package/lib/module/ui/screens/UserLinksScreen.js +26 -32
  199. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  200. package/lib/module/ui/screens/UserListScreen.js +14 -24
  201. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  202. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +1 -1
  203. package/lib/module/ui/screens/trust/TrustAboutScreen.js +67 -75
  204. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  205. package/lib/module/ui/screens/trust/TrustCenterScreen.js +112 -139
  206. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  207. package/lib/module/ui/screens/trust/TrustFAQScreen.js +15 -21
  208. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  209. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +14 -26
  210. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  211. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +69 -85
  212. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  213. package/lib/module/ui/screens/trust/TrustRulesScreen.js +30 -37
  214. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  215. package/lib/typescript/commonjs/index.d.ts +2 -0
  216. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  217. package/lib/typescript/commonjs/ui/components/{OxyAccountDialog.d.ts → OxyAccountDialogScreen.d.ts} +4 -4
  218. package/lib/typescript/commonjs/ui/components/OxyAccountDialogScreen.d.ts.map +1 -0
  219. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts +3 -3
  220. package/lib/typescript/commonjs/ui/components/OxyAuthChooser.d.ts.map +1 -1
  221. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +2 -2
  222. package/lib/typescript/commonjs/ui/components/RequireOxyAuth.d.ts +1 -1
  223. package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts +16 -0
  224. package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts.map +1 -0
  225. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts +4 -2
  226. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts.map +1 -1
  227. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts +14 -4
  228. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts +17 -2
  230. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  231. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts +19 -9
  232. package/lib/typescript/commonjs/ui/components/oxyAuthChooserStyles.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/ui/components/surfaces/ActionSheetSurface.d.ts +38 -0
  234. package/lib/typescript/commonjs/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -0
  235. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  236. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts +7 -11
  237. package/lib/typescript/commonjs/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  238. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts +31 -0
  239. package/lib/typescript/commonjs/ui/hooks/useSurfaceHeader.d.ts.map +1 -0
  240. package/lib/typescript/commonjs/ui/hooks/useSwitchableAccounts.d.ts +1 -1
  241. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts +14 -2
  242. package/lib/typescript/commonjs/ui/navigation/accountDialogManager.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/ui/navigation/surfaceBackBridge.d.ts +16 -0
  244. package/lib/typescript/commonjs/ui/navigation/surfaceBackBridge.d.ts.map +1 -0
  245. package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts +31 -13
  246. package/lib/typescript/commonjs/ui/navigation/surfaceRegistry.d.ts.map +1 -1
  247. package/lib/typescript/commonjs/ui/navigation/surfaces.d.ts.map +1 -1
  248. package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  249. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  250. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  251. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  252. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts +0 -4
  253. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  254. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  255. package/lib/typescript/commonjs/ui/screens/CreateAccountScreen.d.ts.map +1 -1
  256. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/ui/screens/EditProfileScreen.d.ts.map +1 -1
  258. package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
  259. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  260. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  261. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  262. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  263. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  264. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  265. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts +1 -1
  267. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  268. package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
  269. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  270. package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  272. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  273. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  274. package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  275. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  276. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  278. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  280. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  282. package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  283. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  284. package/lib/typescript/commonjs/ui/types/navigation.d.ts +8 -0
  285. package/lib/typescript/commonjs/ui/types/navigation.d.ts.map +1 -1
  286. package/lib/typescript/module/index.d.ts +2 -0
  287. package/lib/typescript/module/index.d.ts.map +1 -1
  288. package/lib/typescript/module/ui/components/{OxyAccountDialog.d.ts → OxyAccountDialogScreen.d.ts} +4 -4
  289. package/lib/typescript/module/ui/components/OxyAccountDialogScreen.d.ts.map +1 -0
  290. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts +3 -3
  291. package/lib/typescript/module/ui/components/OxyAuthChooser.d.ts.map +1 -1
  292. package/lib/typescript/module/ui/components/ProfileButton.d.ts +2 -2
  293. package/lib/typescript/module/ui/components/RequireOxyAuth.d.ts +1 -1
  294. package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts +16 -0
  295. package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts.map +1 -0
  296. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts +4 -2
  297. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts.map +1 -1
  298. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts +14 -4
  299. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  300. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts +17 -2
  301. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  302. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts +19 -9
  303. package/lib/typescript/module/ui/components/oxyAuthChooserStyles.d.ts.map +1 -1
  304. package/lib/typescript/module/ui/components/surfaces/ActionSheetSurface.d.ts +38 -0
  305. package/lib/typescript/module/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -0
  306. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  307. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts +7 -11
  308. package/lib/typescript/module/ui/hooks/useAvatarPicker.d.ts.map +1 -1
  309. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts +31 -0
  310. package/lib/typescript/module/ui/hooks/useSurfaceHeader.d.ts.map +1 -0
  311. package/lib/typescript/module/ui/hooks/useSwitchableAccounts.d.ts +1 -1
  312. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts +14 -2
  313. package/lib/typescript/module/ui/navigation/accountDialogManager.d.ts.map +1 -1
  314. package/lib/typescript/module/ui/navigation/surfaceBackBridge.d.ts +16 -0
  315. package/lib/typescript/module/ui/navigation/surfaceBackBridge.d.ts.map +1 -0
  316. package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts +31 -13
  317. package/lib/typescript/module/ui/navigation/surfaceRegistry.d.ts.map +1 -1
  318. package/lib/typescript/module/ui/navigation/surfaces.d.ts.map +1 -1
  319. package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  320. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  321. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  322. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  323. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts +0 -4
  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/CreateAccountScreen.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/EditProfileScreen.d.ts.map +1 -1
  329. package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
  330. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  331. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  332. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  333. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  334. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  335. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  336. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  337. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts +1 -1
  338. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  339. package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
  340. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  341. package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
  342. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  343. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  344. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  345. package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  346. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  347. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  348. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  349. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  350. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  351. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  352. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  353. package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  354. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  355. package/lib/typescript/module/ui/types/navigation.d.ts +8 -0
  356. package/lib/typescript/module/ui/types/navigation.d.ts.map +1 -1
  357. package/package.json +2 -2
  358. package/src/index.ts +12 -5
  359. package/src/ui/components/{OxyAccountDialog.tsx → OxyAccountDialogScreen.tsx} +21 -110
  360. package/src/ui/components/OxyAuthChooser.tsx +153 -33
  361. package/src/ui/components/OxyConsentScreen.tsx +1 -1
  362. package/src/ui/components/ProfileButton.tsx +2 -2
  363. package/src/ui/components/RequireOxyAuth.tsx +1 -1
  364. package/src/ui/components/SurfaceHeaderAction.tsx +60 -0
  365. package/src/ui/components/SurfaceScreen.tsx +66 -6
  366. package/src/ui/components/fileManagement/FileDetailsModal.tsx +50 -36
  367. package/src/ui/components/modals/DeleteAccountModal.tsx +47 -26
  368. package/src/ui/components/oxyAuthChooserStyles.ts +22 -12
  369. package/src/ui/components/surfaces/ActionSheetSurface.tsx +98 -0
  370. package/src/ui/context/OxyContext.tsx +22 -8
  371. package/src/ui/hooks/useAvatarPicker.ts +53 -66
  372. package/src/ui/hooks/useSurfaceHeader.ts +56 -0
  373. package/src/ui/hooks/useSwitchableAccounts.ts +1 -1
  374. package/src/ui/navigation/__tests__/surfaceNavStack.test.ts +68 -0
  375. package/src/ui/navigation/accountDialogManager.ts +14 -2
  376. package/src/ui/navigation/routes.ts +3 -3
  377. package/src/ui/navigation/surfaceBackBridge.ts +69 -0
  378. package/src/ui/navigation/surfaceRegistry.ts +80 -14
  379. package/src/ui/navigation/surfaces.ts +33 -5
  380. package/src/ui/screens/AccountMembersScreen.tsx +39 -100
  381. package/src/ui/screens/AccountSettingsScreen.tsx +32 -54
  382. package/src/ui/screens/AccountVerificationScreen.tsx +23 -51
  383. package/src/ui/screens/AppInfoScreen.tsx +6 -13
  384. package/src/ui/screens/AvatarCropScreen.tsx +8 -17
  385. package/src/ui/screens/ConnectedAppsScreen.tsx +39 -60
  386. package/src/ui/screens/CreateAccountScreen.tsx +13 -39
  387. package/src/ui/screens/EditProfileFieldScreen.tsx +30 -48
  388. package/src/ui/screens/EditProfileScreen.tsx +7 -16
  389. package/src/ui/screens/FAQScreen.tsx +9 -13
  390. package/src/ui/screens/FeedbackScreen.tsx +8 -22
  391. package/src/ui/screens/FileManagementScreen.tsx +191 -188
  392. package/src/ui/screens/HelpSupportScreen.tsx +7 -13
  393. package/src/ui/screens/HistoryViewScreen.tsx +26 -31
  394. package/src/ui/screens/LanguageSelectorScreen.tsx +12 -46
  395. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +8 -16
  396. package/src/ui/screens/LegalDocumentsScreen.tsx +7 -22
  397. package/src/ui/screens/ManageAccountScreen.tsx +96 -165
  398. package/src/ui/screens/NotificationsScreen.tsx +7 -13
  399. package/src/ui/screens/PaymentGatewayScreen.tsx +3 -10
  400. package/src/ui/screens/PreferencesScreen.tsx +7 -13
  401. package/src/ui/screens/PremiumSubscriptionScreen.tsx +52 -90
  402. package/src/ui/screens/PrivacySettingsScreen.tsx +9 -21
  403. package/src/ui/screens/ProfileScreen.tsx +9 -11
  404. package/src/ui/screens/SavesCollectionsScreen.tsx +7 -13
  405. package/src/ui/screens/SearchSettingsScreen.tsx +9 -21
  406. package/src/ui/screens/UserLinksScreen.tsx +7 -14
  407. package/src/ui/screens/UserListScreen.tsx +2 -5
  408. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +1 -1
  409. package/src/ui/screens/trust/TrustAboutScreen.tsx +10 -17
  410. package/src/ui/screens/trust/TrustCenterScreen.tsx +9 -28
  411. package/src/ui/screens/trust/TrustFAQScreen.tsx +15 -18
  412. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +3 -5
  413. package/src/ui/screens/trust/TrustRewardsScreen.tsx +11 -26
  414. package/src/ui/screens/trust/TrustRulesScreen.tsx +10 -13
  415. package/src/ui/types/navigation.ts +8 -0
  416. package/lib/commonjs/ui/components/Header.js +0 -305
  417. package/lib/commonjs/ui/components/Header.js.map +0 -1
  418. package/lib/commonjs/ui/components/OxyAccountDialog.js.map +0 -1
  419. package/lib/module/ui/components/Header.js +0 -299
  420. package/lib/module/ui/components/Header.js.map +0 -1
  421. package/lib/module/ui/components/OxyAccountDialog.js.map +0 -1
  422. package/lib/typescript/commonjs/ui/components/Header.d.ts +0 -33
  423. package/lib/typescript/commonjs/ui/components/Header.d.ts.map +0 -1
  424. package/lib/typescript/commonjs/ui/components/OxyAccountDialog.d.ts.map +0 -1
  425. package/lib/typescript/module/ui/components/Header.d.ts +0 -33
  426. package/lib/typescript/module/ui/components/Header.d.ts.map +0 -1
  427. package/lib/typescript/module/ui/components/OxyAccountDialog.d.ts.map +0 -1
  428. package/src/ui/components/Header.tsx +0 -224
@@ -2,26 +2,23 @@ import type React from 'react';
2
2
  import { useCallback, useMemo, useState } from 'react';
3
3
  import {
4
4
  View,
5
- ScrollView,
6
5
  TouchableOpacity,
7
6
  ActivityIndicator,
8
- Platform,
9
- KeyboardAvoidingView,
10
7
  } from 'react-native';
11
8
  import { Ionicons } from '@expo/vector-icons';
12
9
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
13
- import { toast, Dialog, useDialogControl } from '@oxyhq/bloom';
10
+ import { toast } from '@oxyhq/bloom';
11
+ import { surfaces } from '@oxyhq/bloom/surfaces';
14
12
  import { useTheme } from '@oxyhq/bloom/theme';
15
- import { H1, Text } from '@oxyhq/bloom/typography';
13
+ import { Text } from '@oxyhq/bloom/typography';
16
14
  import { Button } from '@oxyhq/bloom/button';
17
15
  import { TextField, TextFieldInput } from '@oxyhq/bloom/text-field';
18
16
  import { Divider } from '@oxyhq/bloom/divider';
19
17
  import type { AccountMember, AccountRole } from '@oxyhq/core';
20
- import { logger as loggerUtil } from '@oxyhq/core';
21
18
  import type { BaseScreenProps } from '../types/navigation';
22
- import Header from '../components/Header';
23
19
  import { useOxy } from '../context/OxyContext';
24
20
  import { useI18n } from '../hooks/useI18n';
21
+ import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
25
22
 
26
23
  /** Roles assignable via invite / role change — everything except `owner`. */
27
24
  type AssignableRole = Exclude<AccountRole, 'owner'>;
@@ -45,6 +42,11 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
45
42
  const bloomTheme = useTheme();
46
43
  const colors = bloomTheme.colors;
47
44
  const { t } = useI18n();
45
+
46
+ useSurfaceHeader({
47
+ title: t('accounts.members.title') || 'Members',
48
+ subtitle: t('accounts.members.subtitle') || 'People with access to this account.',
49
+ });
48
50
  const { oxyServices, canUsePrivateApi } = useOxy();
49
51
  const queryClient = useQueryClient();
50
52
 
@@ -155,11 +157,6 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
155
157
  },
156
158
  });
157
159
 
158
- const [memberToRemove, setMemberToRemove] = useState<AccountMember | null>(null);
159
- const [memberToPromote, setMemberToPromote] = useState<AccountMember | null>(null);
160
- const removeDialog = useDialogControl();
161
- const transferDialog = useDialogControl();
162
-
163
160
  const handleInvite = useCallback(() => {
164
161
  const usernameOrEmail = inviteIdentifier.trim();
165
162
  if (!usernameOrEmail) {
@@ -177,53 +174,46 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
177
174
  updateMutation.mutate({ memberId: member._id, role });
178
175
  }, [updateMutation]);
179
176
 
180
- const confirmRemove = useCallback((member: AccountMember) => {
181
- setMemberToRemove(member);
182
- removeDialog.open();
183
- }, [removeDialog]);
184
-
185
- const confirmTransfer = useCallback((member: AccountMember) => {
186
- setMemberToPromote(member);
187
- transferDialog.open();
188
- }, [transferDialog]);
189
-
190
- const title = t('accounts.members.title') || 'Members';
177
+ const confirmRemove = useCallback(async (member: AccountMember) => {
178
+ const confirmed = await surfaces.confirm({
179
+ title: t('accounts.members.removeConfirm.title') || 'Remove member',
180
+ message:
181
+ t('accounts.members.removeConfirm.description')
182
+ || 'Remove this member from the account? They will lose all access.',
183
+ confirmLabel: t('accounts.members.actions.remove') || 'Remove',
184
+ cancelLabel: t('common.cancel') || 'Cancel',
185
+ destructive: true,
186
+ });
187
+ if (confirmed) removeMutation.mutate(member._id);
188
+ }, [removeMutation, t]);
189
+
190
+ const confirmTransfer = useCallback(async (member: AccountMember) => {
191
+ const confirmed = await surfaces.confirm({
192
+ title: t('accounts.members.transferConfirm.title') || 'Transfer ownership',
193
+ message:
194
+ t('accounts.members.transferConfirm.description')
195
+ || 'Transfer ownership of this account to this member? You will be demoted to admin. This cannot be undone.',
196
+ confirmLabel: t('accounts.members.actions.transfer') || 'Transfer ownership',
197
+ cancelLabel: t('common.cancel') || 'Cancel',
198
+ destructive: true,
199
+ });
200
+ if (confirmed) transferMutation.mutate(member.memberUserId);
201
+ }, [transferMutation, t]);
191
202
 
192
203
  if (!id) {
193
204
  return (
194
- <View className="flex-1 bg-bg">
195
- <Header title={title} onBack={goBack} onClose={onClose} showBackButton showCloseButton elevation="subtle" />
196
- <View className="flex-1 items-center justify-center px-screen-margin">
205
+ <>
206
+ <View className="items-center justify-center px-screen-margin py-space-40">
197
207
  <Text className="text-body font-body text-text-secondary text-center">
198
208
  {t('accounts.members.errors.missingAccount') || 'No account selected.'}
199
209
  </Text>
200
210
  </View>
201
- </View>
211
+ </>
202
212
  );
203
213
  }
204
214
 
205
215
  return (
206
- <View className="flex-1 bg-bg">
207
- <Header title={title} onBack={goBack} onClose={onClose} showBackButton showCloseButton elevation="subtle" />
208
-
209
- <KeyboardAvoidingView
210
- className="flex-1"
211
- behavior={Platform.OS === 'ios' ? 'padding' : undefined}
212
- keyboardVerticalOffset={Platform.OS === 'ios' ? 88 : 0}
213
- >
214
- <ScrollView
215
- className="flex-1"
216
- contentContainerClassName="px-screen-margin pt-space-24 pb-space-32 gap-space-24"
217
- showsVerticalScrollIndicator={false}
218
- keyboardShouldPersistTaps="handled"
219
- >
220
- <View className="gap-space-8">
221
- <H1 className="text-headerBold font-headerBold text-text">{title}</H1>
222
- <Text className="text-body font-body text-text-secondary">
223
- {t('accounts.members.subtitle') || 'People with access to this account.'}
224
- </Text>
225
- </View>
226
-
216
+ <View className="px-screen-margin pt-space-16 pb-space-32 gap-space-24">
227
217
  {!accountQuery.isLoading && !canRead ? (
228
218
  <Text className="text-body font-body text-text-secondary text-center py-space-24">
229
219
  {t('accounts.members.errors.noPermission') || 'You do not have permission to view members.'}
@@ -423,58 +413,7 @@ const AccountMembersScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, acco
423
413
  )}
424
414
  </View>
425
415
  ) : null}
426
- </ScrollView>
427
- </KeyboardAvoidingView>
428
-
429
- <Dialog
430
- control={removeDialog}
431
- title={t('accounts.members.removeConfirm.title') || 'Remove member'}
432
- description={
433
- t('accounts.members.removeConfirm.description')
434
- || 'Remove this member from the account? They will lose all access.'
435
- }
436
- actions={[
437
- {
438
- label: t('accounts.members.actions.remove') || 'Remove',
439
- color: 'destructive',
440
- onPress: () => {
441
- const target = memberToRemove;
442
- setMemberToRemove(null);
443
- if (target) {
444
- removeMutation.mutate(target._id);
445
- } else {
446
- loggerUtil.debug('Remove confirmed with no pending member', { component: 'AccountMembersScreen' });
447
- }
448
- },
449
- },
450
- { label: t('common.cancel') || 'Cancel', color: 'cancel' },
451
- ]}
452
- />
453
- <Dialog
454
- control={transferDialog}
455
- title={t('accounts.members.transferConfirm.title') || 'Transfer ownership'}
456
- description={
457
- t('accounts.members.transferConfirm.description')
458
- || 'Transfer ownership of this account to this member? You will be demoted to admin. This cannot be undone.'
459
- }
460
- actions={[
461
- {
462
- label: t('accounts.members.actions.transfer') || 'Transfer ownership',
463
- color: 'destructive',
464
- onPress: () => {
465
- const target = memberToPromote;
466
- setMemberToPromote(null);
467
- if (target) {
468
- transferMutation.mutate(target.memberUserId);
469
- } else {
470
- loggerUtil.debug('Transfer confirmed with no pending member', { component: 'AccountMembersScreen' });
471
- }
472
- },
473
- },
474
- { label: t('common.cancel') || 'Cancel', color: 'cancel' },
475
- ]}
476
- />
477
- </View>
416
+ </View>
478
417
  );
479
418
  };
480
419
 
@@ -2,24 +2,22 @@ import type React from 'react';
2
2
  import { useCallback, useMemo, useState } from 'react';
3
3
  import {
4
4
  View,
5
- ScrollView,
6
5
  ActivityIndicator,
7
- Platform,
8
- KeyboardAvoidingView,
9
6
  } from 'react-native';
10
7
  import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
11
- import { toast, Dialog, useDialogControl } from '@oxyhq/bloom';
8
+ import { toast } from '@oxyhq/bloom';
9
+ import { surfaces } from '@oxyhq/bloom/surfaces';
12
10
  import { useTheme } from '@oxyhq/bloom/theme';
13
- import { H1, Text } from '@oxyhq/bloom/typography';
11
+ import { Text } from '@oxyhq/bloom/typography';
14
12
  import { Button } from '@oxyhq/bloom/button';
15
13
  import { TextField, TextFieldInput } from '@oxyhq/bloom/text-field';
16
14
  import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
17
15
  import type { UpdateAccountInput } from '@oxyhq/core';
18
16
  import type { BaseScreenProps } from '../types/navigation';
19
- import Header from '../components/Header';
20
17
  import { SettingsIcon } from '../components/SettingsIcon';
21
18
  import { useOxy } from '../context/OxyContext';
22
19
  import { useI18n } from '../hooks/useI18n';
20
+ import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
23
21
 
24
22
  const DISPLAY_NAME_MAX = 50;
25
23
  const BIO_MAX = 160;
@@ -38,6 +36,7 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
38
36
  const bloomTheme = useTheme();
39
37
  const colors = bloomTheme.colors;
40
38
  const { t } = useI18n();
39
+
41
40
  const { oxyServices, canUsePrivateApi, user, accounts, switchToAccount } = useOxy();
42
41
  const queryClient = useQueryClient();
43
42
 
@@ -109,7 +108,18 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
109
108
  },
110
109
  });
111
110
 
112
- const archiveDialog = useDialogControl();
111
+ const handleArchive = useCallback(async () => {
112
+ const confirmed = await surfaces.confirm({
113
+ title: t('accounts.settings.archive.confirmTitle') || 'Archive account',
114
+ message:
115
+ t('accounts.settings.archive.confirmDescription')
116
+ || 'Archive this account? It will be deactivated and its members will lose access.',
117
+ confirmLabel: t('accounts.settings.archive.title') || 'Archive account',
118
+ cancelLabel: t('common.cancel') || 'Cancel',
119
+ destructive: true,
120
+ });
121
+ if (confirmed) archiveMutation.mutate();
122
+ }, [archiveMutation, t]);
113
123
 
114
124
  const handleSave = useCallback(() => {
115
125
  const trimmed = displayName.trim();
@@ -129,49 +139,35 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
129
139
  return username ? `@${username}` : '';
130
140
  }, [node?.account?.username]);
131
141
 
142
+ // The nav large title is the account's handle once loaded (falls back to the
143
+ // generic screen title before the account resolves).
144
+ useSurfaceHeader({
145
+ title: accountHandle || title,
146
+ subtitle: t('accounts.settings.subtitle') || 'Manage this account’s profile, members, and access.',
147
+ });
148
+
132
149
  if (!id) {
133
150
  return (
134
- <View className="flex-1 bg-bg">
135
- <Header title={title} onBack={goBack} onClose={onClose} showBackButton showCloseButton elevation="subtle" />
136
- <View className="flex-1 items-center justify-center px-screen-margin">
151
+ <>
152
+ <View className="items-center justify-center px-screen-margin py-space-40">
137
153
  <Text className="text-body font-body text-text-secondary text-center">
138
154
  {t('accounts.settings.errors.missingAccount') || 'No account selected.'}
139
155
  </Text>
140
156
  </View>
141
- </View>
157
+ </>
142
158
  );
143
159
  }
144
160
 
145
161
  return (
146
- <View className="flex-1 bg-bg">
147
- <Header title={title} onBack={goBack} onClose={onClose} showBackButton showCloseButton elevation="subtle" />
162
+ <>
148
163
 
149
- <KeyboardAvoidingView
150
- className="flex-1"
151
- behavior={Platform.OS === 'ios' ? 'padding' : undefined}
152
- keyboardVerticalOffset={Platform.OS === 'ios' ? 88 : 0}
153
- >
154
- <ScrollView
155
- className="flex-1"
156
- contentContainerClassName="px-screen-margin pt-space-24 pb-space-32 gap-space-24"
157
- showsVerticalScrollIndicator={false}
158
- keyboardShouldPersistTaps="handled"
159
- >
164
+ <View className="px-screen-margin pt-space-24 pb-space-32 gap-space-24">
160
165
  {accountQuery.isLoading ? (
161
166
  <View className="items-center py-space-32">
162
167
  <ActivityIndicator color={colors.primary} />
163
168
  </View>
164
169
  ) : (
165
170
  <>
166
- <View className="gap-space-8">
167
- <H1 className="text-headerBold font-headerBold text-text" numberOfLines={1}>
168
- {accountHandle || title}
169
- </H1>
170
- <Text className="text-body font-body text-text-secondary">
171
- {t('accounts.settings.subtitle') || 'Manage this account’s profile, members, and access.'}
172
- </Text>
173
- </View>
174
-
175
171
  {/* Profile edit */}
176
172
  {canUpdate ? (
177
173
  <View className="gap-space-16 p-space-16 rounded-radius-20 bg-fill">
@@ -233,32 +229,14 @@ const AccountSettingsScreen: React.FC<BaseScreenProps> = ({ onClose, goBack, nav
233
229
  icon={<SettingsIcon name="archive-arrow-down" color={colors.error} />}
234
230
  title={t('accounts.settings.archive.title') || 'Archive account'}
235
231
  description={t('accounts.settings.archive.subtitle') || 'Deactivate this account'}
236
- onPress={() => archiveDialog.open()}
232
+ onPress={handleArchive}
237
233
  />
238
234
  </SettingsListGroup>
239
235
  ) : null}
240
236
  </>
241
237
  )}
242
- </ScrollView>
243
- </KeyboardAvoidingView>
244
-
245
- <Dialog
246
- control={archiveDialog}
247
- title={t('accounts.settings.archive.confirmTitle') || 'Archive account'}
248
- description={
249
- t('accounts.settings.archive.confirmDescription')
250
- || 'Archive this account? It will be deactivated and its members will lose access.'
251
- }
252
- actions={[
253
- {
254
- label: t('accounts.settings.archive.title') || 'Archive account',
255
- color: 'destructive',
256
- onPress: () => archiveMutation.mutate(),
257
- },
258
- { label: t('common.cancel') || 'Cancel', color: 'cancel' },
259
- ]}
260
- />
261
- </View>
238
+ </View>
239
+ </>
262
240
  );
263
241
  };
264
242
 
@@ -1,13 +1,11 @@
1
1
  import React, { useState, useCallback } from 'react';
2
2
  import {
3
3
  View,
4
- ScrollView,
5
4
  StyleSheet,
6
- Platform,
7
- KeyboardAvoidingView,
8
5
  } from 'react-native';
9
6
  import type { BaseScreenProps } from '../types/navigation';
10
- import { Dialog, toast, useDialogControl } from '@oxyhq/bloom';
7
+ import { toast } from '@oxyhq/bloom';
8
+ import { surfaces } from '@oxyhq/bloom/surfaces';
11
9
  import { useTheme } from '@oxyhq/bloom/theme';
12
10
  import { H4, Text } from '@oxyhq/bloom/typography';
13
11
  import { Button } from '@oxyhq/bloom/button';
@@ -15,8 +13,8 @@ import { TextField, TextFieldInput } from '@oxyhq/bloom/text-field';
15
13
  import { IconCircle } from '@oxyhq/bloom/icon-circle';
16
14
  import { BenefitList, BenefitRow } from '@oxyhq/bloom/benefit-list';
17
15
  import * as Icons from '@oxyhq/bloom/icons';
18
- import Header from '../components/Header';
19
16
  import { useI18n } from '../hooks/useI18n';
17
+ import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
20
18
  import { useOxy } from '../context/OxyContext';
21
19
 
22
20
  const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
@@ -26,21 +24,13 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
26
24
  // Use useOxy() hook for OxyContext values
27
25
  const { oxyServices } = useOxy();
28
26
  const { t } = useI18n();
27
+
28
+ useSurfaceHeader({ title: t('accountVerification.title') || 'Account Verification' });
29
29
  const bloomTheme = useTheme();
30
30
 
31
31
  const [reason, setReason] = useState('');
32
32
  const [evidence, setEvidence] = useState('');
33
33
  const [isSubmitting, setIsSubmitting] = useState(false);
34
- const [successMessage, setSuccessMessage] = useState('');
35
-
36
- // Dialog controls
37
- const successDialog = useDialogControl();
38
-
39
- const handleSuccessAcknowledged = useCallback(() => {
40
- setReason('');
41
- setEvidence('');
42
- goBack?.();
43
- }, [goBack]);
44
34
 
45
35
  const handleSubmit = useCallback(async () => {
46
36
  if (!reason.trim()) {
@@ -60,10 +50,18 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
60
50
  evidence.trim() || undefined
61
51
  );
62
52
 
63
- setSuccessMessage(
64
- t('accountVerification.successMessage') || `Your verification request has been submitted. Request ID: ${result.requestId}`
65
- );
66
- successDialog.open();
53
+ // Acknowledgement surface — dismiss (button OR backdrop) resets and
54
+ // returns; there is no negative action.
55
+ await surfaces.confirm({
56
+ title: t('accountVerification.successTitle') || 'Request Submitted',
57
+ message:
58
+ t('accountVerification.successMessage') || `Your verification request has been submitted. Request ID: ${result.requestId}`,
59
+ confirmLabel: t('accountVerification.ok') || 'OK',
60
+ hideCancel: true,
61
+ });
62
+ setReason('');
63
+ setEvidence('');
64
+ goBack?.();
67
65
  } catch (error: unknown) {
68
66
  if (__DEV__) {
69
67
  console.error('Failed to submit verification request:', error);
@@ -74,28 +72,14 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
74
72
  } finally {
75
73
  setIsSubmitting(false);
76
74
  }
77
- }, [reason, evidence, oxyServices, t, successDialog]);
75
+ }, [reason, evidence, oxyServices, t, goBack]);
78
76
 
79
77
  const canSubmit = Boolean(reason.trim()) && !isSubmitting;
80
78
 
81
79
  return (
82
- <KeyboardAvoidingView
83
- className="flex-1 bg-bg"
84
- behavior={Platform.OS === 'ios' ? 'padding' : undefined}
85
- >
86
- <Header
87
- title={t('accountVerification.title') || 'Account Verification'}
88
- onBack={goBack || onClose}
89
- variant="minimal"
90
- elevation="subtle"
91
- />
92
-
93
- <ScrollView
94
- className="flex-1 px-screen-margin"
95
- showsVerticalScrollIndicator={false}
96
- contentContainerClassName="pb-space-32"
97
- keyboardShouldPersistTaps="handled"
98
- >
80
+ <>
81
+
82
+ <View className="px-screen-margin pb-space-32">
99
83
  {/* Hero */}
100
84
  <View className="items-center py-space-24 gap-space-12">
101
85
  <IconCircle icon={Icons.Verified_Stroke2_Corner2_Rounded} />
@@ -185,20 +169,8 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
185
169
  {t('accountVerification.note') || 'Note: Verification requests are reviewed manually and may take several days. We will notify you once your request has been reviewed.'}
186
170
  </Text>
187
171
  </View>
188
- </ScrollView>
189
-
190
- <Dialog
191
- control={successDialog}
192
- title={t('accountVerification.successTitle') || 'Request Submitted'}
193
- description={successMessage}
194
- actions={[
195
- {
196
- label: t('accountVerification.ok') || 'OK',
197
- onPress: handleSuccessAcknowledged,
198
- },
199
- ]}
200
- />
201
- </KeyboardAvoidingView>
172
+ </View>
173
+ </>
202
174
  );
203
175
  };
204
176
 
@@ -5,7 +5,6 @@ import {
5
5
  Platform,
6
6
  Dimensions,
7
7
  Clipboard,
8
- ScrollView,
9
8
  ActivityIndicator,
10
9
  } from 'react-native';
11
10
  import type { BaseScreenProps } from '../types/navigation';
@@ -13,10 +12,10 @@ import { packageInfo } from '@oxyhq/core';
13
12
  import { toast } from '@oxyhq/bloom';
14
13
  import OxyServicesLogo from '../../assets/icons/OxyServices';
15
14
  import { SettingsIcon } from '../components/SettingsIcon';
16
- import Header from '../components/Header';
17
15
  import { useTheme } from '@oxyhq/bloom/theme';
18
16
  import { useOxy } from '../context/OxyContext';
19
17
  import { useI18n } from '../hooks/useI18n';
18
+ import { useSurfaceHeader } from '../hooks/useSurfaceHeader';
20
19
  import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
21
20
 
22
21
  interface SystemInfo {
@@ -37,6 +36,8 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
37
36
  // Use useOxy() hook for OxyContext values
38
37
  const { user, sessions, oxyServices, isAuthenticated } = useOxy();
39
38
  const { t } = useI18n();
39
+
40
+ useSurfaceHeader({ title: t('appInfo.title') });
40
41
  const [systemInfo, setSystemInfo] = useState<SystemInfo | null>(null);
41
42
  const [isRunningSystemCheck, setIsRunningSystemCheck] = useState(false);
42
43
  const [connectionStatus, setConnectionStatus] = useState<'checking' | 'connected' | 'disconnected' | 'unknown'>('unknown');
@@ -148,16 +149,9 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
148
149
  };
149
150
 
150
151
  return (
151
- <View className="flex-1 bg-bg">
152
- <Header
153
- title={t('appInfo.title')}
154
- onBack={goBack || onClose}
155
- variant="minimal"
156
- elevation="subtle"
157
- />
152
+ <>
158
153
 
159
- <ScrollView className="flex-1" showsVerticalScrollIndicator={false}>
160
- <View className="px-screen-margin py-space-16 pb-space-24">
154
+ <View className="px-screen-margin py-space-16 pb-space-24">
161
155
  {/* Package Information */}
162
156
  <SettingsListGroup title={t('appInfo.sections.package')}>
163
157
  <SettingsListItem
@@ -353,8 +347,7 @@ const AppInfoScreen: React.FC<BaseScreenProps> = ({
353
347
  />
354
348
  </SettingsListGroup>
355
349
  </View>
356
- </ScrollView>
357
- </View>
350
+ </>
358
351
  );
359
352
  };
360
353
 
@@ -72,10 +72,6 @@ export interface AvatarCropScreenProps extends BaseScreenProps {
72
72
  sourceWidth?: number;
73
73
  /** Natural height of the source image (optional — measured if absent). */
74
74
  sourceHeight?: number;
75
- /** Called with the cropped file once the user confirms. */
76
- onConfirm?: (result: AvatarCropResult) => void | Promise<void>;
77
- /** Called if the user cancels without confirming. */
78
- onCancel?: () => void;
79
75
  }
80
76
 
81
77
  /** Side length (in dp) of the crop viewport. The output is always 512x512px. */
@@ -296,13 +292,10 @@ async function hapticSelection(): Promise<void> {
296
292
  }
297
293
 
298
294
  const AvatarCropScreen: React.FC<AvatarCropScreenProps> = ({
299
- goBack,
300
- onClose,
295
+ dismiss,
301
296
  imageUri,
302
297
  sourceWidth,
303
298
  sourceHeight,
304
- onConfirm,
305
- onCancel,
306
299
  }) => {
307
300
  const theme = useTheme();
308
301
  const { t } = useI18n();
@@ -765,16 +758,15 @@ const AvatarCropScreen: React.FC<AvatarCropScreenProps> = ({
765
758
 
766
759
  void hapticNotification('success');
767
760
 
768
- await onConfirm?.({
761
+ // Resolve the surface's present() promise with the cropped JPEG and
762
+ // close it. The awaiting caller (`useAvatarPicker`) handles the
763
+ // upload + any success toast.
764
+ dismiss?.({
769
765
  uri: result.uri,
770
766
  width: result.width,
771
767
  height: result.height,
772
768
  mime: 'image/jpeg',
773
769
  });
774
-
775
- // Close the sheet on success. The caller is responsible for any
776
- // success toast (uploads typically toast their own outcome).
777
- onClose?.();
778
770
  } catch (err) {
779
771
  const normalizedError = normalizeCropError(err);
780
772
  logger.error('handleConfirm failed', normalizedError, { component: LOG_COMPONENT });
@@ -786,12 +778,11 @@ const AvatarCropScreen: React.FC<AvatarCropScreenProps> = ({
786
778
  preparedImageCleanup?.();
787
779
  setIsProcessing(false);
788
780
  }
789
- }, [baseFit, imageUri, naturalSize, onClose, onConfirm, t]);
781
+ }, [baseFit, imageUri, naturalSize, dismiss, t]);
790
782
 
791
783
  const handleCancel = useCallback(() => {
792
- onCancel?.();
793
- goBack?.();
794
- }, [goBack, onCancel]);
784
+ dismiss?.();
785
+ }, [dismiss]);
795
786
 
796
787
  const topInset = Platform.OS === 'ios' ? Math.max(insets.top, 12) : Math.max(insets.top, 16);
797
788
  const bottomInset = Math.max(insets.bottom, 16);