@oxy.so/services 3.0.0 → 4.0.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 (363) hide show
  1. package/LICENSE +675 -201
  2. package/NOTICE +215 -3
  3. package/README.md +1 -3
  4. package/lib/commonjs/assets/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
  5. package/lib/commonjs/assets/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
  6. package/lib/commonjs/assets/assets/fonts/icons/manifest.json +5 -11
  7. package/lib/commonjs/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
  8. package/lib/commonjs/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
  9. package/lib/commonjs/assets/fonts/icons/manifest.json +5 -11
  10. package/lib/commonjs/ui/components/FollowButton.js +15 -28
  11. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  12. package/lib/commonjs/ui/components/FollowTargetButton.js +17 -13
  13. package/lib/commonjs/ui/components/FollowTargetButton.js.map +1 -1
  14. package/lib/commonjs/ui/components/OxyAuthPrompt.js +3 -2
  15. package/lib/commonjs/ui/components/OxyAuthPrompt.js.map +1 -1
  16. package/lib/commonjs/ui/components/OxyConsentScreen.js +4 -2
  17. package/lib/commonjs/ui/components/OxyConsentScreen.js.map +1 -1
  18. package/lib/commonjs/ui/components/OxySignInButton.js +1 -1
  19. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  20. package/lib/commonjs/ui/components/OxySignInRequestSurface.js +2 -1
  21. package/lib/commonjs/ui/components/OxySignInRequestSurface.js.map +1 -1
  22. package/lib/commonjs/ui/components/ProfileButton.js +67 -267
  23. package/lib/commonjs/ui/components/ProfileButton.js.map +1 -1
  24. package/lib/commonjs/ui/components/ProfileSummaryCard.js +2 -2
  25. package/lib/commonjs/ui/components/ProfileSummaryCard.js.map +1 -1
  26. package/lib/commonjs/ui/components/SurfaceHeaderAction.js +9 -49
  27. package/lib/commonjs/ui/components/SurfaceHeaderAction.js.map +1 -1
  28. package/lib/commonjs/ui/components/SurfaceScreen.js +3 -2
  29. package/lib/commonjs/ui/components/SurfaceScreen.js.map +1 -1
  30. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js +2 -1
  31. package/lib/commonjs/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  32. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js +2 -1
  33. package/lib/commonjs/ui/components/authChooser/SignInEntryView.js.map +1 -1
  34. package/lib/commonjs/ui/components/authChooser/SignUpView.js +4 -2
  35. package/lib/commonjs/ui/components/authChooser/SignUpView.js.map +1 -1
  36. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js +2 -1
  37. package/lib/commonjs/ui/components/authChooser/requestSurfaces.js.map +1 -1
  38. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +20 -14
  39. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  40. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +48 -85
  41. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  42. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +35 -31
  43. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  44. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +9 -6
  45. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  46. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +22 -19
  47. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  48. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +6 -3
  49. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  50. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +6 -3
  51. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  52. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +7 -5
  53. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  54. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +20 -17
  55. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  56. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js +2 -1
  57. package/lib/commonjs/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  58. package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js +5 -3
  59. package/lib/commonjs/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
  60. package/lib/commonjs/ui/icons/subsetGlyphMaps.js +0 -6
  61. package/lib/commonjs/ui/icons/subsetGlyphMaps.js.map +1 -1
  62. package/lib/commonjs/ui/screens/AccountMembersScreen.js +36 -60
  63. package/lib/commonjs/ui/screens/AccountMembersScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +2 -1
  65. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +16 -7
  67. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/AvatarCropScreen.js +7 -6
  69. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  70. package/lib/commonjs/ui/screens/CreateAccountScreen.js +2 -1
  71. package/lib/commonjs/ui/screens/CreateAccountScreen.js.map +1 -1
  72. package/lib/commonjs/ui/screens/FeedbackScreen.js +18 -9
  73. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  74. package/lib/commonjs/ui/screens/FileManagementScreen.js +99 -200
  75. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  76. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +8 -9
  77. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +19 -8
  79. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +2 -1
  81. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +20 -10
  83. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +4 -2
  85. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/ProfileScreen.js +2 -1
  87. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  88. package/lib/commonjs/ui/screens/UserListScreen.js +31 -33
  89. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  90. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +22 -11
  91. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  92. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js +7 -18
  93. package/lib/commonjs/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  94. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js +7 -16
  95. package/lib/commonjs/ui/screens/fileManagement/FileListSection.js.map +1 -1
  96. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js +6 -6
  97. package/lib/commonjs/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  98. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js +23 -66
  99. package/lib/commonjs/ui/screens/fileManagement/UploadBar.js.map +1 -1
  100. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +17 -8
  101. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +2 -1
  103. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +3 -2
  105. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  106. package/lib/module/assets/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
  107. package/lib/module/assets/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
  108. package/lib/module/assets/assets/fonts/icons/manifest.json +5 -11
  109. package/lib/module/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
  110. package/lib/module/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
  111. package/lib/module/assets/fonts/icons/manifest.json +5 -11
  112. package/lib/module/ui/components/FollowButton.js +15 -28
  113. package/lib/module/ui/components/FollowButton.js.map +1 -1
  114. package/lib/module/ui/components/FollowTargetButton.js +15 -12
  115. package/lib/module/ui/components/FollowTargetButton.js.map +1 -1
  116. package/lib/module/ui/components/OxyAuthPrompt.js +2 -1
  117. package/lib/module/ui/components/OxyAuthPrompt.js.map +1 -1
  118. package/lib/module/ui/components/OxyConsentScreen.js +4 -2
  119. package/lib/module/ui/components/OxyConsentScreen.js.map +1 -1
  120. package/lib/module/ui/components/OxySignInButton.js +1 -1
  121. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  122. package/lib/module/ui/components/OxySignInRequestSurface.js +2 -1
  123. package/lib/module/ui/components/OxySignInRequestSurface.js.map +1 -1
  124. package/lib/module/ui/components/ProfileButton.js +70 -269
  125. package/lib/module/ui/components/ProfileButton.js.map +1 -1
  126. package/lib/module/ui/components/ProfileSummaryCard.js +2 -2
  127. package/lib/module/ui/components/ProfileSummaryCard.js.map +1 -1
  128. package/lib/module/ui/components/SurfaceHeaderAction.js +8 -48
  129. package/lib/module/ui/components/SurfaceHeaderAction.js.map +1 -1
  130. package/lib/module/ui/components/SurfaceScreen.js +2 -1
  131. package/lib/module/ui/components/SurfaceScreen.js.map +1 -1
  132. package/lib/module/ui/components/authChooser/AccountsMenuView.js +2 -1
  133. package/lib/module/ui/components/authChooser/AccountsMenuView.js.map +1 -1
  134. package/lib/module/ui/components/authChooser/SignInEntryView.js +2 -1
  135. package/lib/module/ui/components/authChooser/SignInEntryView.js.map +1 -1
  136. package/lib/module/ui/components/authChooser/SignUpView.js +4 -2
  137. package/lib/module/ui/components/authChooser/SignUpView.js.map +1 -1
  138. package/lib/module/ui/components/authChooser/requestSurfaces.js +2 -1
  139. package/lib/module/ui/components/authChooser/requestSurfaces.js.map +1 -1
  140. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +12 -6
  141. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  142. package/lib/module/ui/components/fileManagement/FileViewer.js +38 -75
  143. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  144. package/lib/module/ui/components/fileManagement/UploadPreview.js +31 -27
  145. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  146. package/lib/module/ui/components/modals/DeleteAccountModal.js +6 -3
  147. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  148. package/lib/module/ui/components/payment/PaymentDetailsStep.js +6 -3
  149. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  150. package/lib/module/ui/components/payment/PaymentMethodStep.js +6 -3
  151. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  152. package/lib/module/ui/components/payment/PaymentReviewStep.js +6 -3
  153. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  154. package/lib/module/ui/components/payment/PaymentSuccessStep.js +4 -2
  155. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  156. package/lib/module/ui/components/payment/PaymentSummaryStep.js +6 -3
  157. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  158. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js +2 -1
  159. package/lib/module/ui/components/photogrid/JustifiedPhotoGrid.js.map +1 -1
  160. package/lib/module/ui/components/surfaces/ActionSheetSurface.js +4 -2
  161. package/lib/module/ui/components/surfaces/ActionSheetSurface.js.map +1 -1
  162. package/lib/module/ui/icons/subsetGlyphMaps.js +0 -6
  163. package/lib/module/ui/icons/subsetGlyphMaps.js.map +1 -1
  164. package/lib/module/ui/screens/AccountMembersScreen.js +37 -61
  165. package/lib/module/ui/screens/AccountMembersScreen.js.map +1 -1
  166. package/lib/module/ui/screens/AccountSettingsScreen.js +2 -1
  167. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  168. package/lib/module/ui/screens/AccountVerificationScreen.js +15 -7
  169. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  170. package/lib/module/ui/screens/AvatarCropScreen.js +2 -1
  171. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  172. package/lib/module/ui/screens/CreateAccountScreen.js +2 -1
  173. package/lib/module/ui/screens/CreateAccountScreen.js.map +1 -1
  174. package/lib/module/ui/screens/FeedbackScreen.js +18 -9
  175. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  176. package/lib/module/ui/screens/FileManagementScreen.js +91 -192
  177. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  178. package/lib/module/ui/screens/LanguageSelectorScreen.js +9 -10
  179. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  180. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +18 -7
  181. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  182. package/lib/module/ui/screens/PaymentGatewayScreen.js +2 -1
  183. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  184. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +20 -10
  185. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  186. package/lib/module/ui/screens/PrivacySettingsScreen.js +4 -2
  187. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  188. package/lib/module/ui/screens/ProfileScreen.js +2 -1
  189. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  190. package/lib/module/ui/screens/UserListScreen.js +32 -34
  191. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  192. package/lib/module/ui/screens/WelcomeNewUserScreen.js +22 -11
  193. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  194. package/lib/module/ui/screens/fileManagement/FileLibraryError.js +6 -17
  195. package/lib/module/ui/screens/fileManagement/FileLibraryError.js.map +1 -1
  196. package/lib/module/ui/screens/fileManagement/FileListSection.js +5 -14
  197. package/lib/module/ui/screens/fileManagement/FileListSection.js.map +1 -1
  198. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js +3 -3
  199. package/lib/module/ui/screens/fileManagement/PhotoPickerSection.js.map +1 -1
  200. package/lib/module/ui/screens/fileManagement/UploadBar.js +24 -66
  201. package/lib/module/ui/screens/fileManagement/UploadBar.js.map +1 -1
  202. package/lib/module/ui/screens/trust/TrustAboutScreen.js +16 -7
  203. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  204. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +2 -1
  205. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  206. package/lib/module/ui/screens/trust/TrustRulesScreen.js +2 -1
  207. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  208. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  209. package/lib/typescript/commonjs/ui/components/FollowTargetButton.d.ts.map +1 -1
  210. package/lib/typescript/commonjs/ui/components/OxyAuthPrompt.d.ts.map +1 -1
  211. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +1 -1
  212. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  213. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts +1 -20
  214. package/lib/typescript/commonjs/ui/components/ProfileButton.d.ts.map +1 -1
  215. package/lib/typescript/commonjs/ui/components/ProfileSummaryCard.d.ts.map +1 -1
  216. package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts +1 -5
  217. package/lib/typescript/commonjs/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
  218. package/lib/typescript/commonjs/ui/components/SurfaceScreen.d.ts.map +1 -1
  219. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  220. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  221. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  222. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  223. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  224. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  225. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  226. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  227. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  228. package/lib/typescript/commonjs/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
  230. package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts +1 -1
  231. package/lib/typescript/commonjs/ui/icons/Ionicons.d.ts.map +1 -1
  232. package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts +1 -1
  233. package/lib/typescript/commonjs/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
  234. package/lib/typescript/commonjs/ui/icons/subsetGlyphMaps.d.ts +0 -6
  235. package/lib/typescript/commonjs/ui/icons/subsetGlyphMaps.d.ts.map +1 -1
  236. package/lib/typescript/commonjs/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  237. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  238. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  239. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  240. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  241. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  242. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts +0 -2
  244. package/lib/typescript/commonjs/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -1
  245. package/lib/typescript/commonjs/ui/screens/fileManagement/FileListSection.d.ts.map +1 -1
  246. package/lib/typescript/commonjs/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  247. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts +1 -14
  248. package/lib/typescript/commonjs/ui/screens/fileManagement/UploadBar.d.ts.map +1 -1
  249. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  250. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  251. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  252. package/lib/typescript/module/ui/components/FollowTargetButton.d.ts.map +1 -1
  253. package/lib/typescript/module/ui/components/OxyAuthPrompt.d.ts.map +1 -1
  254. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +1 -1
  255. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  256. package/lib/typescript/module/ui/components/ProfileButton.d.ts +1 -20
  257. package/lib/typescript/module/ui/components/ProfileButton.d.ts.map +1 -1
  258. package/lib/typescript/module/ui/components/ProfileSummaryCard.d.ts.map +1 -1
  259. package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts +1 -5
  260. package/lib/typescript/module/ui/components/SurfaceHeaderAction.d.ts.map +1 -1
  261. package/lib/typescript/module/ui/components/SurfaceScreen.d.ts.map +1 -1
  262. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  263. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  264. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  265. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  266. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  267. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  268. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  269. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  270. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  271. package/lib/typescript/module/ui/components/photogrid/JustifiedPhotoGrid.d.ts.map +1 -1
  272. package/lib/typescript/module/ui/components/surfaces/ActionSheetSurface.d.ts.map +1 -1
  273. package/lib/typescript/module/ui/icons/Ionicons.d.ts +1 -1
  274. package/lib/typescript/module/ui/icons/Ionicons.d.ts.map +1 -1
  275. package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts +1 -1
  276. package/lib/typescript/module/ui/icons/MaterialCommunityIcons.d.ts.map +1 -1
  277. package/lib/typescript/module/ui/icons/subsetGlyphMaps.d.ts +0 -6
  278. package/lib/typescript/module/ui/icons/subsetGlyphMaps.d.ts.map +1 -1
  279. package/lib/typescript/module/ui/screens/AccountMembersScreen.d.ts.map +1 -1
  280. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  281. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  282. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  283. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  284. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  285. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  286. package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts +0 -2
  287. package/lib/typescript/module/ui/screens/fileManagement/FileLibraryError.d.ts.map +1 -1
  288. package/lib/typescript/module/ui/screens/fileManagement/FileListSection.d.ts.map +1 -1
  289. package/lib/typescript/module/ui/screens/fileManagement/PhotoPickerSection.d.ts.map +1 -1
  290. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts +1 -14
  291. package/lib/typescript/module/ui/screens/fileManagement/UploadBar.d.ts.map +1 -1
  292. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  293. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  294. package/package.json +7 -7
  295. package/src/assets/fonts/icons/OxyServicesIonicons.ttf +0 -0
  296. package/src/assets/fonts/icons/OxyServicesMaterialCommunityIcons.ttf +0 -0
  297. package/src/assets/fonts/icons/manifest.json +5 -11
  298. package/src/ui/components/FollowButton.tsx +14 -29
  299. package/src/ui/components/FollowTargetButton.tsx +14 -12
  300. package/src/ui/components/OxyAuthPrompt.tsx +2 -7
  301. package/src/ui/components/OxyConsentScreen.tsx +2 -2
  302. package/src/ui/components/OxySignInButton.tsx +2 -2
  303. package/src/ui/components/OxySignInRequestSurface.tsx +1 -1
  304. package/src/ui/components/ProfileButton.tsx +30 -297
  305. package/src/ui/components/ProfileSummaryCard.tsx +1 -2
  306. package/src/ui/components/SurfaceHeaderAction.tsx +7 -49
  307. package/src/ui/components/SurfaceScreen.tsx +2 -1
  308. package/src/ui/components/authChooser/AccountsMenuView.tsx +1 -1
  309. package/src/ui/components/authChooser/SignInEntryView.tsx +1 -1
  310. package/src/ui/components/authChooser/SignUpView.tsx +2 -2
  311. package/src/ui/components/authChooser/requestSurfaces.tsx +1 -1
  312. package/src/ui/components/fileManagement/FileDetailsModal.tsx +8 -6
  313. package/src/ui/components/fileManagement/FileViewer.tsx +21 -50
  314. package/src/ui/components/fileManagement/UploadPreview.tsx +12 -29
  315. package/src/ui/components/modals/DeleteAccountModal.tsx +4 -3
  316. package/src/ui/components/payment/PaymentDetailsStep.tsx +4 -3
  317. package/src/ui/components/payment/PaymentMethodStep.tsx +4 -3
  318. package/src/ui/components/payment/PaymentReviewStep.tsx +4 -3
  319. package/src/ui/components/payment/PaymentSuccessStep.tsx +3 -2
  320. package/src/ui/components/payment/PaymentSummaryStep.tsx +4 -3
  321. package/src/ui/components/photogrid/JustifiedPhotoGrid.tsx +2 -1
  322. package/src/ui/components/surfaces/ActionSheetSurface.tsx +3 -2
  323. package/src/ui/icons/subsetGlyphMaps.ts +0 -6
  324. package/src/ui/screens/AccountMembersScreen.tsx +17 -65
  325. package/src/ui/screens/AccountSettingsScreen.tsx +1 -1
  326. package/src/ui/screens/AccountVerificationScreen.tsx +14 -7
  327. package/src/ui/screens/AvatarCropScreen.tsx +2 -10
  328. package/src/ui/screens/CreateAccountScreen.tsx +1 -1
  329. package/src/ui/screens/FeedbackScreen.tsx +9 -9
  330. package/src/ui/screens/FileManagementScreen.tsx +37 -184
  331. package/src/ui/screens/LanguageSelectorScreen.tsx +5 -13
  332. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +17 -7
  333. package/src/ui/screens/PaymentGatewayScreen.tsx +1 -1
  334. package/src/ui/screens/PremiumSubscriptionScreen.tsx +10 -10
  335. package/src/ui/screens/PrivacySettingsScreen.tsx +2 -2
  336. package/src/ui/screens/ProfileScreen.tsx +1 -1
  337. package/src/ui/screens/UserListScreen.tsx +17 -44
  338. package/src/ui/screens/WelcomeNewUserScreen.tsx +11 -11
  339. package/src/ui/screens/fileManagement/FileLibraryError.tsx +6 -14
  340. package/src/ui/screens/fileManagement/FileListSection.tsx +4 -16
  341. package/src/ui/screens/fileManagement/PhotoPickerSection.tsx +2 -13
  342. package/src/ui/screens/fileManagement/UploadBar.tsx +17 -56
  343. package/src/ui/screens/trust/TrustAboutScreen.tsx +16 -7
  344. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +1 -1
  345. package/src/ui/screens/trust/TrustRulesScreen.tsx +2 -1
  346. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js +0 -61
  347. package/lib/commonjs/ui/components/fileManagement/AnimatedButton.js.map +0 -1
  348. package/lib/commonjs/ui/components/internal/PinInput.js +0 -118
  349. package/lib/commonjs/ui/components/internal/PinInput.js.map +0 -1
  350. package/lib/module/ui/components/fileManagement/AnimatedButton.js +0 -55
  351. package/lib/module/ui/components/fileManagement/AnimatedButton.js.map +0 -1
  352. package/lib/module/ui/components/internal/PinInput.js +0 -113
  353. package/lib/module/ui/components/internal/PinInput.js.map +0 -1
  354. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts +0 -17
  355. package/lib/typescript/commonjs/ui/components/fileManagement/AnimatedButton.d.ts.map +0 -1
  356. package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts +0 -23
  357. package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts.map +0 -1
  358. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts +0 -17
  359. package/lib/typescript/module/ui/components/fileManagement/AnimatedButton.d.ts.map +0 -1
  360. package/lib/typescript/module/ui/components/internal/PinInput.d.ts +0 -23
  361. package/lib/typescript/module/ui/components/internal/PinInput.d.ts.map +0 -1
  362. package/src/ui/components/fileManagement/AnimatedButton.tsx +0 -64
  363. package/src/ui/components/internal/PinInput.tsx +0 -123
@@ -1,5 +1,6 @@
1
+ import { Button } from '@oxy.so/bloom/button';
1
2
  import React, { useCallback, useMemo, useState } from 'react';
2
- import { View, StyleSheet, TouchableOpacity } from 'react-native';
3
+ import { View, StyleSheet } from 'react-native';
3
4
  import type { BaseScreenProps } from '../types/navigation';
4
5
  import { useTheme } from '@oxy.so/bloom/theme';
5
6
  import Ionicons from '../icons/Ionicons';
@@ -196,19 +197,10 @@ const LanguageSelectorScreen: React.FC<LanguageSelectorScreenProps> = () => {
196
197
  </Text>
197
198
  </View>
198
199
  ) : canRemove ? (
199
- <TouchableOpacity
200
- onPress={() => handleRemove(entry.code)}
201
- disabled={isBusy}
202
- hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}
203
- accessibilityRole="button"
200
+ <Button appearance="plain" tone="neutral" size="small" iconOnly stopPropagation
201
+ onPress={() => handleRemove(entry.code)} disabled={isBusy}
204
202
  accessibilityLabel={`${t('language.remove')} ${entry.name}`}
205
- >
206
- <Ionicons
207
- name="close-circle"
208
- size={REMOVE_ICON_SIZE}
209
- color={bloomTheme.colors.textSecondary}
210
- />
211
- </TouchableOpacity>
203
+ icon={<Ionicons name="close-circle" size={REMOVE_ICON_SIZE} color={bloomTheme.colors.textSecondary} />} />
212
204
  ) : undefined
213
205
  }
214
206
  showChevron={false}
@@ -10,7 +10,17 @@ import {
10
10
  AccordionTrigger,
11
11
  AccordionContent,
12
12
  } from '@oxy.so/bloom/accordion';
13
- import * as Icons from '@oxy.so/bloom/icons';
13
+ // Per glyph, never `@oxy.so/bloom/icons`. That barrel re-exports all 461 Remix
14
+ // glyphs and Metro does not tree-shake, so one import of it here re-ships every
15
+ // glyph — 313,123 B, measured — to every app in this package's graph, and no
16
+ // consumer can opt out of what a dependency asks for.
17
+ import { RiAtLine } from '@oxy.so/bloom/icons/RiAtLine';
18
+ import { RiKey2Line } from '@oxy.so/bloom/icons/RiKey2Line';
19
+ import { RiListUnordered } from '@oxy.so/bloom/icons/RiListUnordered';
20
+ import { RiResetRightLine } from '@oxy.so/bloom/icons/RiResetRightLine';
21
+ import { RiSparklingLine } from '@oxy.so/bloom/icons/RiSparklingLine';
22
+ // `Props` has no per-glyph subpath and needs none: `import type` is erased
23
+ // before any bundler sees it, so the barrel is named here and never loaded.
14
24
  import type { Props as IconProps } from '@oxy.so/bloom/icons';
15
25
  import type { BaseScreenProps } from '../types/navigation';
16
26
  import { useI18n } from '../hooks/useI18n';
@@ -28,31 +38,31 @@ const INFO_SECTIONS: InfoSection[] = [
28
38
  id: 'what',
29
39
  titleKey: 'learnMoreUsernames.sections.what.title',
30
40
  contentKey: 'learnMoreUsernames.sections.what.content',
31
- Icon: Icons.RiAtLine,
41
+ Icon: RiAtLine,
32
42
  },
33
43
  {
34
44
  id: 'rules',
35
45
  titleKey: 'learnMoreUsernames.sections.rules.title',
36
46
  contentKey: 'learnMoreUsernames.sections.rules.content',
37
- Icon: Icons.RiListUnordered,
47
+ Icon: RiListUnordered,
38
48
  },
39
49
  {
40
50
  id: 'unique',
41
51
  titleKey: 'learnMoreUsernames.sections.unique.title',
42
52
  contentKey: 'learnMoreUsernames.sections.unique.content',
43
- Icon: Icons.RiKey2Line,
53
+ Icon: RiKey2Line,
44
54
  },
45
55
  {
46
56
  id: 'change',
47
57
  titleKey: 'learnMoreUsernames.sections.change.title',
48
58
  contentKey: 'learnMoreUsernames.sections.change.content',
49
- Icon: Icons.RiResetRightLine,
59
+ Icon: RiResetRightLine,
50
60
  },
51
61
  {
52
62
  id: 'tips',
53
63
  titleKey: 'learnMoreUsernames.sections.tips.title',
54
64
  contentKey: 'learnMoreUsernames.sections.tips.content',
55
- Icon: Icons.RiSparklingLine,
65
+ Icon: RiSparklingLine,
56
66
  },
57
67
  ];
58
68
 
@@ -84,7 +94,7 @@ const LearnMoreUsernamesScreen: React.FC<BaseScreenProps> = ({
84
94
  <>
85
95
  <View className="px-screen-margin pb-space-32">
86
96
  <View className="items-center py-space-24 gap-space-12">
87
- <IconCircle icon={Icons.RiAtLine} />
97
+ <IconCircle icon={RiAtLine} />
88
98
  <Text className="font-sans text-body text-text-secondary text-center">
89
99
  {t('learnMoreUsernames.introText')}
90
100
  </Text>
@@ -195,7 +195,7 @@ const PaymentGatewayScreen: React.FC<PaymentGatewayScreenProps> = (props) => {
195
195
  {t('payment.errors.invalidAmount')}
196
196
  </H4>
197
197
  <Button
198
- variant="primary"
198
+ appearance="solid" tone="accent"
199
199
  onPress={handleClose}
200
200
  size="small"
201
201
  icon={<Ionicons name="close" size={16} />}
@@ -599,7 +599,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
599
599
  <View className="flex-row gap-space-12">
600
600
  {subscription.cancelAtPeriodEnd ? (
601
601
  <Button
602
- variant="primary"
602
+ appearance="solid" tone="accent"
603
603
  onPress={handleReactivateSubscription}
604
604
  className="flex-1"
605
605
  accessibilityLabel={t('premium.actions.reactivate') || 'Reactivate'}
@@ -608,7 +608,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
608
608
  </Button>
609
609
  ) : (
610
610
  <Button
611
- variant="destructive"
611
+ appearance="solid" tone="danger"
612
612
  onPress={handleCancelSubscription}
613
613
  className="flex-1"
614
614
  accessibilityLabel={t('premium.actions.cancelSubBtn') || 'Cancel Subscription'}
@@ -618,7 +618,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
618
618
  )}
619
619
 
620
620
  <Button
621
- variant="outline"
621
+ appearance="subtle" tone="neutral"
622
622
  onPress={() => navigate?.('PaymentGateway')}
623
623
  className="flex-1"
624
624
  accessibilityLabel={t('premium.actions.manageBilling') || 'Manage Billing'}
@@ -752,7 +752,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
752
752
 
753
753
  {isCurrentPlan ? (
754
754
  <Button
755
- variant="secondary"
755
+ appearance="subtle" tone="neutral"
756
756
  disabled
757
757
  icon={<Ionicons name="checkmark-circle" size={18} color={colors.success} />}
758
758
  accessibilityLabel={t('premium.plan.current') || 'Current Plan'}
@@ -762,7 +762,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
762
762
  </Button>
763
763
  ) : !availability.available ? (
764
764
  <Button
765
- variant="secondary"
765
+ appearance="subtle" tone="neutral"
766
766
  disabled
767
767
  accessibilityLabel={t('premium.plan.notAvailableInApp') || 'Not Available in Current App'}
768
768
  className="w-full"
@@ -895,7 +895,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
895
895
 
896
896
  {isIncludedInCurrentPlan ? (
897
897
  <Button
898
- variant="primary"
898
+ appearance="solid" tone="accent"
899
899
  disabled
900
900
  icon={<Ionicons name="checkmark-circle" size={16} color={colors.primaryForeground} />}
901
901
  accessibilityLabel={t('premium.feature.includedInPlan') || 'Included in your plan'}
@@ -906,7 +906,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
906
906
  ) : isSubscribed ? (
907
907
  <View className="flex-row gap-space-8">
908
908
  <Button
909
- variant="secondary"
909
+ appearance="subtle" tone="neutral"
910
910
  disabled
911
911
  icon={<Ionicons name="checkmark" size={16} color={colors.success} />}
912
912
  accessibilityLabel={t('premium.feature.subscribed') || 'Subscribed'}
@@ -915,7 +915,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
915
915
  {t('premium.feature.subscribed') || 'Subscribed'}
916
916
  </Button>
917
917
  <Button
918
- variant="outline"
918
+ appearance="subtle" tone="neutral"
919
919
  onPress={() => handleFeatureUnsubscribe(feature.id)}
920
920
  accessibilityLabel={t('premium.actions.unsubscribe') || 'Unsubscribe'}
921
921
  className="flex-1"
@@ -925,7 +925,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
925
925
  </View>
926
926
  ) : canPurchase ? (
927
927
  <Button
928
- variant="primary"
928
+ appearance="solid" tone="accent"
929
929
  onPress={() => handleFeatureSubscribe(feature.id)}
930
930
  disabled={processingPayment}
931
931
  loading={processingPayment}
@@ -936,7 +936,7 @@ const PremiumSubscriptionScreen: React.FC<BaseScreenProps> = ({
936
936
  </Button>
937
937
  ) : (
938
938
  <Button
939
- variant="secondary"
939
+ appearance="subtle" tone="neutral"
940
940
  disabled
941
941
  accessibilityLabel={t('premium.feature.plansOnly') || 'Only available in subscription plans'}
942
942
  className="w-full"
@@ -367,7 +367,7 @@ const PrivacySettingsScreen: React.FC<BaseScreenProps> = ({
367
367
  title={displayName}
368
368
  rightElement={
369
369
  <Button
370
- variant="destructive"
370
+ appearance="solid" tone="danger"
371
371
  size="small"
372
372
  onPress={() => handleUnblock(userId)}
373
373
  >
@@ -401,7 +401,7 @@ const PrivacySettingsScreen: React.FC<BaseScreenProps> = ({
401
401
  description={t('privacySettings.restrictedDescription') || 'Limited interactions'}
402
402
  rightElement={
403
403
  <Button
404
- variant="secondary"
404
+ appearance="subtle" tone="neutral"
405
405
  size="small"
406
406
  onPress={() => handleUnrestrict(userId)}
407
407
  >
@@ -214,7 +214,7 @@ const ProfileScreen: React.FC<ProfileScreenProps> = ({ userId, username, theme,
214
214
  <View style={styles.actionButtonWrapper}>
215
215
  {isOwnProfile ? (
216
216
  <Button
217
- variant="secondary"
217
+ appearance="subtle" tone="neutral"
218
218
  size="small"
219
219
  onPress={() => navigate?.('ManageAccount')}
220
220
  >
@@ -5,14 +5,13 @@ import {
5
5
  StyleSheet,
6
6
  ActivityIndicator,
7
7
  FlatList,
8
- TouchableOpacity,
9
8
  RefreshControl,
10
9
  } from 'react-native';
11
10
  import type { BaseScreenProps } from '../types/navigation';
12
11
  import { useTheme } from '@oxy.so/bloom/theme';
13
12
  import { H6, Text } from '@oxy.so/bloom/typography';
14
13
  import { Button } from '@oxy.so/bloom/button';
15
- import { Avatar } from '@oxy.so/bloom/avatar';
14
+ import { ContactRow } from '@oxy.so/bloom/chat-people';
16
15
  import FollowButton from '../components/FollowButton';
17
16
  import Ionicons from '../icons/Ionicons';
18
17
  import { useI18n } from '../hooks/useI18n';
@@ -36,7 +35,6 @@ interface UserListScreenProps extends BaseScreenProps {
36
35
  }
37
36
 
38
37
  const PAGE_SIZE = 20;
39
- const AVATAR_SIZE = 48;
40
38
  const EMPTY_ICON_SIZE = 64;
41
39
  const ERROR_ICON_SIZE = 48;
42
40
 
@@ -161,42 +159,21 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
161
159
  const handle = getAccountFallbackHandle(item);
162
160
 
163
161
  return (
164
- <TouchableOpacity
165
- style={styles.userItem}
166
- className="px-screen-margin py-space-12 gap-space-12"
167
- onPress={() => handleUserPress(item)}
168
- activeOpacity={0.7}
169
- accessibilityRole="button"
170
- accessibilityLabel={displayName}
171
- >
172
- <Avatar
173
- source={
174
- item.avatar
175
- ? oxyServices.getFileDownloadUrl(item.avatar, 'thumb')
176
- : undefined
177
- }
178
- name={displayName}
179
- size={AVATAR_SIZE}
180
- />
181
- <View style={styles.userInfo}>
182
- <Text className="text-text font-medium text-base" numberOfLines={1}>
183
- {displayName}
184
- </Text>
185
- {handle ? (
186
- <Text className="text-text-secondary text-sm mt-space-2" numberOfLines={1}>
162
+ <View className="px-screen-margin flex-row items-center gap-space-12">
163
+ <ContactRow id={itemUserId || displayName} name={displayName}
164
+ subtitle={handle ? (item.username ? `@${handle}` : handle) : undefined}
165
+ avatar={item.avatar ? oxyServices.getFileDownloadUrl(item.avatar, 'thumb') : undefined}
166
+ horizontalInset={0} style={{ flex: 1 }}
167
+ onPress={() => handleUserPress(item)}
168
+ identitySlot={<View style={styles.userInfo}>
169
+ <Text variant="body-medium" numberOfLines={1}>{displayName}</Text>
170
+ {handle ? <Text className="text-text-secondary text-sm mt-space-2" numberOfLines={1}>
187
171
  {item.username ? `@${handle}` : handle}
188
- </Text>
189
- ) : null}
190
- {description ? (
191
- <Text className="text-text-secondary text-sm mt-space-4" numberOfLines={2}>
192
- {description}
193
- </Text>
194
- ) : null}
195
- </View>
196
- {!isCurrentUser && itemUserId ? (
197
- <FollowButton userId={itemUserId} size="small" />
198
- ) : null}
199
- </TouchableOpacity>
172
+ </Text> : null}
173
+ {description ? <Text className="text-text-secondary text-sm mt-space-4" numberOfLines={2}>{description}</Text> : null}
174
+ </View>} />
175
+ {!isCurrentUser && itemUserId ? <FollowButton userId={itemUserId} size="small" /> : null}
176
+ </View>
200
177
  );
201
178
  },
202
179
  [handleUserPress, currentUserId, oxyServices]
@@ -257,7 +234,7 @@ const UserListScreen: React.FC<UserListScreenProps> = ({
257
234
  <View style={styles.center} className="px-space-32 gap-space-16">
258
235
  <Ionicons name="alert-circle" size={ERROR_ICON_SIZE} color={bloomTheme.colors.error} />
259
236
  <Text className="text-text-secondary text-base text-center">{error}</Text>
260
- <Button variant="primary" onPress={() => fetchUsers(0)}>
237
+ <Button appearance="solid" tone="accent" onPress={() => fetchUsers(0)}>
261
238
  {t('common.retry') || 'Retry'}
262
239
  </Button>
263
240
  </View>
@@ -304,17 +281,13 @@ const styles = StyleSheet.create({
304
281
  listContent: {
305
282
  flexGrow: 1,
306
283
  },
307
- userItem: {
308
- flexDirection: 'row',
309
- alignItems: 'center',
310
- },
311
284
  userInfo: {
312
285
  flex: 1,
313
286
  },
314
287
  // Inset the hairline separator to align with the start of the user's text
315
288
  // content (avatar width + screen margin + gap).
316
289
  separator: {
317
- marginLeft: 76,
290
+ marginLeft: 72,
318
291
  },
319
292
  emptyContainer: {
320
293
  flex: 1,
@@ -182,10 +182,10 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: User }> = ({
182
182
  if (currentStep === totalSteps - 1) {
183
183
  return (
184
184
  <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
185
- <Button variant="secondary" onPress={prevStep} size="small">
185
+ <Button appearance="subtle" tone="neutral" onPress={prevStep} size="small">
186
186
  {t('welcomeNew.actions.back') || 'Back'}
187
187
  </Button>
188
- <Button variant="primary" onPress={finish} size="small">
188
+ <Button appearance="solid" tone="accent" onPress={finish} size="small">
189
189
  {t('welcomeNew.actions.enter') || 'Enter'}
190
190
  </Button>
191
191
  </View>
@@ -195,11 +195,11 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: User }> = ({
195
195
  return (
196
196
  <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
197
197
  {avatarStepIndex > 0 && (
198
- <Button variant="secondary" onPress={skipToAvatar} size="small">
198
+ <Button appearance="subtle" tone="neutral" onPress={skipToAvatar} size="small">
199
199
  {t('welcomeNew.actions.skip') || 'Skip'}
200
200
  </Button>
201
201
  )}
202
- <Button variant="primary" onPress={nextStep} size="small">
202
+ <Button appearance="solid" tone="accent" onPress={nextStep} size="small">
203
203
  {t('welcomeNew.actions.next') || 'Next'}
204
204
  </Button>
205
205
  </View>
@@ -208,10 +208,10 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: User }> = ({
208
208
  if (nameStepIndex >= 0 && currentStep === nameStepIndex) {
209
209
  return (
210
210
  <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
211
- <Button variant="secondary" onPress={prevStep} size="small">
211
+ <Button appearance="subtle" tone="neutral" onPress={prevStep} size="small">
212
212
  {t('welcomeNew.actions.back') || 'Back'}
213
213
  </Button>
214
- <Button variant="primary" onPress={submitName} size="small" disabled={!firstName.trim() || savingName} loading={savingName}>
214
+ <Button appearance="solid" tone="accent" onPress={submitName} size="small" disabled={!firstName.trim() || savingName} loading={savingName}>
215
215
  {t('welcomeNew.actions.continue') || 'Continue'}
216
216
  </Button>
217
217
  </View>
@@ -220,10 +220,10 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: User }> = ({
220
220
  if (step.showAvatar) {
221
221
  return (
222
222
  <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
223
- <Button variant="secondary" onPress={prevStep} size="small">
223
+ <Button appearance="subtle" tone="neutral" onPress={prevStep} size="small">
224
224
  {t('welcomeNew.actions.back') || 'Back'}
225
225
  </Button>
226
- <Button variant="primary" onPress={nextStep} size="small">
226
+ <Button appearance="solid" tone="accent" onPress={nextStep} size="small">
227
227
  {avatarUri ? (t('welcomeNew.actions.continue') || 'Continue') : (t('welcomeNew.actions.skip') || 'Skip')}
228
228
  </Button>
229
229
  </View>
@@ -231,10 +231,10 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: User }> = ({
231
231
  }
232
232
  return (
233
233
  <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
234
- <Button variant="secondary" onPress={prevStep} size="small">
234
+ <Button appearance="subtle" tone="neutral" onPress={prevStep} size="small">
235
235
  {t('welcomeNew.actions.back') || 'Back'}
236
236
  </Button>
237
- <Button variant="primary" onPress={nextStep} size="small">
237
+ <Button appearance="solid" tone="accent" onPress={nextStep} size="small">
238
238
  {t('welcomeNew.actions.next') || 'Next'}
239
239
  </Button>
240
240
  </View>
@@ -296,7 +296,7 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: User }> = ({
296
296
  placeholderColor={`${colors.primary}20`}
297
297
  style={styles.avatar}
298
298
  />
299
- <Button variant="primary" size="small" onPress={openAvatarPicker}>
299
+ <Button appearance="solid" tone="accent" size="small" onPress={openAvatarPicker}>
300
300
  {avatarUri ? (t('welcomeNew.avatar.change') || 'Change Avatar') : (t('welcomeNew.avatar.add') || 'Add Avatar')}
301
301
  </Button>
302
302
  </View>
@@ -1,5 +1,7 @@
1
1
  import type React from 'react';
2
- import { View, Text, TouchableOpacity } from 'react-native';
2
+ import { View } from 'react-native';
3
+ import { Button } from '@oxy.so/bloom/button';
4
+ import { Text } from '@oxy.so/bloom/typography';
3
5
  import Ionicons from '../../icons/Ionicons';
4
6
 
5
7
  export interface FileLibraryErrorProps {
@@ -11,8 +13,6 @@ export interface FileLibraryErrorProps {
11
13
  iconColor: string;
12
14
  titleColor: string;
13
15
  descriptionColor: string;
14
- /** Retry button background (button label/icon are always white). */
15
- buttonColor: string;
16
16
  }
17
17
 
18
18
  /**
@@ -30,7 +30,6 @@ const FileLibraryError: React.FC<FileLibraryErrorProps> = ({
30
30
  iconColor,
31
31
  titleColor,
32
32
  descriptionColor,
33
- buttonColor,
34
33
  }) => (
35
34
  <View className="items-center py-[40px] px-[24px]">
36
35
  <Ionicons name="cloud-offline-outline" size={64} color={iconColor} />
@@ -40,16 +39,9 @@ const FileLibraryError: React.FC<FileLibraryErrorProps> = ({
40
39
  <Text className="text-[16px] text-center leading-[24px] mb-[32px]" style={{ color: descriptionColor }}>
41
40
  {description}
42
41
  </Text>
43
- <TouchableOpacity
44
- className="flex-row items-center px-[24px] py-[12px] rounded-[24px] gap-[8px]"
45
- style={{ backgroundColor: buttonColor }}
46
- onPress={onRetry}
47
- accessibilityRole="button"
48
- accessibilityLabel={retryLabel}
49
- >
50
- <Ionicons name="refresh" size={20} color="#FFFFFF" />
51
- <Text className="text-white text-[16px] font-semibold">{retryLabel}</Text>
52
- </TouchableOpacity>
42
+ <Button onPress={onRetry} accessibilityLabel={retryLabel}>
43
+ {retryLabel}
44
+ </Button>
53
45
  </View>
54
46
  );
55
47
 
@@ -1,12 +1,7 @@
1
1
  import type React from 'react';
2
- import {
3
- View,
4
- Text,
5
- TouchableOpacity,
6
- ScrollView,
7
- RefreshControl,
8
- ActivityIndicator,
9
- } from 'react-native';
2
+ import { View, ScrollView, RefreshControl, ActivityIndicator } from 'react-native';
3
+ import { Button } from '@oxy.so/bloom/button';
4
+ import { Text } from '@oxy.so/bloom/typography';
10
5
  import Ionicons from '../../icons/Ionicons';
11
6
  import type { FileMetadata } from '@oxy.so/core';
12
7
  import { SettingsListGroup, SettingsListItem } from '@oxy.so/bloom/settings-list';
@@ -88,14 +83,7 @@ const FileListSection: React.FC<FileListSectionProps> = ({
88
83
  <Text className="text-[16px] text-center leading-[24px] mb-space-32" style={{ color: colors.textSecondary }}>
89
84
  {t('fileManagement.noResults.description', { query: searchQuery })}
90
85
  </Text>
91
- <TouchableOpacity
92
- className="flex-row items-center px-space-24 py-space-12 rounded-[24px] gap-space-8"
93
- style={{ backgroundColor: colors.primary }}
94
- onPress={onClearSearch}
95
- >
96
- <Ionicons name="refresh" size={20} color="#FFFFFF" />
97
- <Text className="text-white text-[16px] font-semibold">{t('fileManagement.clearSearch')}</Text>
98
- </TouchableOpacity>
86
+ <Button onPress={onClearSearch}>{t('fileManagement.clearSearch')}</Button>
99
87
  </View>
100
88
  ) : filteredFiles.length === 0 ? renderEmptyState() : (
101
89
  <>
@@ -1,16 +1,6 @@
1
1
  import React, { useCallback, useMemo, useRef, useState } from 'react';
2
- import {
3
- View,
4
- Text,
5
- TouchableOpacity,
6
- ActivityIndicator,
7
- RefreshControl,
8
- FlatList,
9
- Platform,
10
- Animated,
11
- useWindowDimensions,
12
- type LayoutChangeEvent,
13
- } from 'react-native';
2
+ import { View, TouchableOpacity, ActivityIndicator, RefreshControl, FlatList, Platform, Animated, useWindowDimensions, type LayoutChangeEvent } from 'react-native';
3
+ import { Text } from '@oxy.so/bloom/typography';
14
4
  import { Image as ExpoImage } from 'expo-image';
15
5
  import Ionicons from '../../icons/Ionicons';
16
6
  import MaterialCommunityIcons from '../../icons/MaterialCommunityIcons';
@@ -535,7 +525,6 @@ const PhotoPickerView: React.FC<PhotoPickerViewProps> = ({
535
525
  iconColor="#FF6B6B"
536
526
  titleColor="#FFFFFF"
537
527
  descriptionColor="rgba(255,255,255,0.7)"
538
- buttonColor={primaryColor}
539
528
  />
540
529
  </View>
541
530
  ) : isEmpty && loading ? (
@@ -1,69 +1,30 @@
1
1
  import type React from 'react';
2
- import { View, Text, ActivityIndicator, StyleSheet, Platform, type ViewStyle } from 'react-native';
3
- import Ionicons from '../../icons/Ionicons';
2
+ import { View } from 'react-native';
3
+ import { Text } from '@oxy.so/bloom/typography';
4
+ import { Card } from '@oxy.so/bloom/card';
5
+ import { Loading } from '@oxy.so/bloom/loading';
6
+ import { Meter } from '@oxy.so/bloom/stat-bar';
4
7
 
5
8
  export interface UploadBarProps {
6
- /** Aggregate upload progress, or null when indeterminate. */
7
9
  uploadProgress: { current: number; total: number } | null;
8
- /** Bloom dark-mode flag (drives banner + track colors). */
9
- isDark: boolean;
10
- /** Theme colors used by the banner. */
11
- colors: { primary: string; text: string; border: string };
12
10
  t: (key: string, vars?: Record<string, string | number>) => string;
13
11
  }
14
12
 
15
- // The banner drop-shadow has no Bloom/Tailwind token equivalent, so it stays an
16
- // inline style. `boxShadow` on web (RN-Web deprecated the `shadow*` props);
17
- // RN `shadow*`/`elevation` on native.
18
- const shadowStyle = StyleSheet.create({
19
- banner: Platform.select({
20
- web: { boxShadow: '0px 2px 6px rgba(0, 0, 0, 0.1)' },
21
- default: {
22
- shadowColor: '#000',
23
- shadowOpacity: 0.1,
24
- shadowRadius: 6,
25
- shadowOffset: { width: 0, height: 2 },
26
- elevation: 2,
27
- },
28
- }) as ViewStyle,
29
- });
30
-
31
- /**
32
- * The non-blocking "Uploading…" banner overlay shown at the bottom of the file
33
- * manager while uploads are in flight. Purely presentational — the orchestrator
34
- * gates rendering on `!selectMode && uploading`.
35
- */
36
- const UploadBar: React.FC<UploadBarProps> = ({ uploadProgress, isDark, colors, t }) => (
37
- <View
38
- className="absolute top-[72px] left-0 right-0 items-center z-50"
39
- style={{ pointerEvents: 'none' }}
40
- >
41
- <View
42
- className="flex-row items-center px-3.5 py-2.5 rounded-[24px] gap-2.5 border min-w-[200px]"
43
- style={[shadowStyle.banner, { backgroundColor: isDark ? '#222831EE' : '#FFFFFFEE', borderColor: colors.border }]}
44
- >
45
- <Ionicons name="cloud-upload" size={18} color={colors.primary} />
13
+ /** Upload state is app-owned; surface, spinner and determinate meter are Bloom. */
14
+ const UploadBar: React.FC<UploadBarProps> = ({ uploadProgress, t }) => (
15
+ <View pointerEvents="none" className="absolute top-[72px] left-0 right-0 items-center z-50">
16
+ <Card appearance="solid" elevation="s" radius="radius-max" className="flex-row items-center px-3.5 py-2.5 gap-2.5 min-w-[200px]">
46
17
  <View className="flex-1 gap-1.5">
47
- <Text className="text-[13px] font-medium" style={{ color: colors.text }}>
48
- {t('fileManagement.uploading')}{uploadProgress ? ` ${uploadProgress.current}/${uploadProgress.total}` : '...'}
18
+ <Text variant="caption-1-medium">
19
+ {t('fileManagement.uploading')}{uploadProgress ? ` ${uploadProgress.current}/${uploadProgress.total}` : '…'}
49
20
  </Text>
50
- {uploadProgress && uploadProgress.total > 0 && (
51
- <View
52
- className="h-[3px] rounded-[2px] overflow-hidden"
53
- style={{ backgroundColor: isDark ? 'rgba(255,255,255,0.1)' : 'rgba(0,0,0,0.1)' }}
54
- >
55
- <View
56
- className="h-full rounded-[2px]"
57
- style={{
58
- width: `${(uploadProgress.current / uploadProgress.total) * 100}%`,
59
- backgroundColor: colors.primary,
60
- }}
61
- />
62
- </View>
63
- )}
21
+ {uploadProgress && uploadProgress.total > 0 ? (
22
+ <Meter value={uploadProgress.current} max={uploadProgress.total} height={3}
23
+ accessibilityLabel={t('fileManagement.uploading')} />
24
+ ) : null}
64
25
  </View>
65
- <ActivityIndicator size="small" color={colors.primary} />
66
- </View>
26
+ <Loading size="small" />
27
+ </Card>
67
28
  </View>
68
29
  );
69
30