@oxyhq/services 6.9.44 → 6.9.46

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 (342) hide show
  1. package/lib/commonjs/ui/components/OxyPayButton.js +4 -2
  2. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -1
  3. package/lib/commonjs/ui/components/OxyProvider.js +6 -5
  4. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  5. package/lib/commonjs/ui/components/OxySignInButton.js +83 -82
  6. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  7. package/lib/commonjs/ui/components/SignInModal.js +271 -102
  8. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  9. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js +76 -121
  10. package/lib/commonjs/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  11. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +24 -15
  12. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  13. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +32 -18
  14. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  15. package/lib/commonjs/ui/components/icon/OxyIcon.js +5 -4
  16. package/lib/commonjs/ui/components/icon/OxyIcon.js.map +1 -1
  17. package/lib/commonjs/ui/components/index.js +0 -35
  18. package/lib/commonjs/ui/components/index.js.map +1 -1
  19. package/lib/commonjs/ui/components/internal/PinInput.js +3 -2
  20. package/lib/commonjs/ui/components/internal/PinInput.js.map +1 -1
  21. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js +83 -219
  22. package/lib/commonjs/ui/components/modals/DeleteAccountModal.js.map +1 -1
  23. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -13
  24. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  25. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +50 -28
  26. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  27. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +83 -48
  28. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  29. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +11 -10
  30. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  31. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +38 -23
  32. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  33. package/lib/commonjs/ui/constants/theme.js +2 -2
  34. package/lib/commonjs/ui/constants/theme.js.map +1 -1
  35. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +4 -3
  36. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  37. package/lib/commonjs/ui/screens/AccountCenterScreen.js +13 -13
  38. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +117 -142
  40. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +112 -78
  42. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +213 -144
  44. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +26 -14
  46. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/FeedbackScreen.js +57 -51
  48. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/FileManagementScreen.js +108 -86
  50. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/HistoryViewScreen.js +109 -130
  52. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +15 -8
  54. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +60 -54
  56. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +12 -9
  58. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +66 -93
  60. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +159 -190
  62. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  63. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +20 -22
  64. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  65. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +16 -17
  66. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  67. package/lib/commonjs/ui/screens/SessionManagementScreen.js +127 -70
  68. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  69. package/lib/commonjs/ui/screens/UserLinksScreen.js +13 -29
  70. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  71. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +110 -52
  72. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +3 -5
  74. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  75. package/lib/commonjs/ui/utils/fileManagement.js +0 -21
  76. package/lib/commonjs/ui/utils/fileManagement.js.map +1 -1
  77. package/lib/module/ui/components/OxyPayButton.js +4 -2
  78. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  79. package/lib/module/ui/components/OxyProvider.js +6 -5
  80. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  81. package/lib/module/ui/components/OxySignInButton.js +84 -83
  82. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  83. package/lib/module/ui/components/SignInModal.js +271 -100
  84. package/lib/module/ui/components/SignInModal.js.map +1 -1
  85. package/lib/module/ui/components/fileManagement/FileDetailsModal.js +76 -122
  86. package/lib/module/ui/components/fileManagement/FileDetailsModal.js.map +1 -1
  87. package/lib/module/ui/components/fileManagement/FileViewer.js +24 -15
  88. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  89. package/lib/module/ui/components/fileManagement/UploadPreview.js +32 -19
  90. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  91. package/lib/module/ui/components/icon/OxyIcon.js +5 -4
  92. package/lib/module/ui/components/icon/OxyIcon.js.map +1 -1
  93. package/lib/module/ui/components/index.js +0 -5
  94. package/lib/module/ui/components/index.js.map +1 -1
  95. package/lib/module/ui/components/internal/PinInput.js +3 -2
  96. package/lib/module/ui/components/internal/PinInput.js.map +1 -1
  97. package/lib/module/ui/components/modals/DeleteAccountModal.js +83 -220
  98. package/lib/module/ui/components/modals/DeleteAccountModal.js.map +1 -1
  99. package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -13
  100. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  101. package/lib/module/ui/components/payment/PaymentMethodStep.js +49 -26
  102. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  103. package/lib/module/ui/components/payment/PaymentReviewStep.js +84 -48
  104. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  105. package/lib/module/ui/components/payment/PaymentSuccessStep.js +11 -9
  106. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  107. package/lib/module/ui/components/payment/PaymentSummaryStep.js +38 -22
  108. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  109. package/lib/module/ui/constants/theme.js +2 -2
  110. package/lib/module/ui/constants/theme.js.map +1 -1
  111. package/lib/module/ui/context/hooks/useAuthOperations.js +4 -3
  112. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  113. package/lib/module/ui/screens/AccountCenterScreen.js +12 -13
  114. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  115. package/lib/module/ui/screens/AccountOverviewScreen.js +117 -142
  116. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  117. package/lib/module/ui/screens/AccountSettingsScreen.js +112 -78
  118. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  119. package/lib/module/ui/screens/AccountSwitcherScreen.js +213 -145
  120. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  121. package/lib/module/ui/screens/AccountVerificationScreen.js +28 -16
  122. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  123. package/lib/module/ui/screens/FeedbackScreen.js +48 -42
  124. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  125. package/lib/module/ui/screens/FileManagementScreen.js +110 -88
  126. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  127. package/lib/module/ui/screens/HistoryViewScreen.js +110 -131
  128. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  129. package/lib/module/ui/screens/LanguageSelectorScreen.js +16 -9
  130. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  131. package/lib/module/ui/screens/LegalDocumentsScreen.js +61 -55
  132. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  133. package/lib/module/ui/screens/PaymentGatewayScreen.js +12 -9
  134. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  135. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +66 -94
  136. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  137. package/lib/module/ui/screens/PrivacySettingsScreen.js +161 -192
  138. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  139. package/lib/module/ui/screens/SavesCollectionsScreen.js +21 -23
  140. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  141. package/lib/module/ui/screens/SearchSettingsScreen.js +17 -18
  142. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  143. package/lib/module/ui/screens/SessionManagementScreen.js +128 -72
  144. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  145. package/lib/module/ui/screens/UserLinksScreen.js +15 -31
  146. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  147. package/lib/module/ui/screens/WelcomeNewUserScreen.js +110 -52
  148. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  149. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +4 -6
  150. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  151. package/lib/module/ui/utils/fileManagement.js +0 -20
  152. package/lib/module/ui/utils/fileManagement.js.map +1 -1
  153. package/lib/typescript/commonjs/ui/components/OxyPayButton.d.ts.map +1 -1
  154. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  155. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts +0 -1
  156. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  157. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  158. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts +3 -4
  159. package/lib/typescript/commonjs/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  160. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  161. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts +2 -3
  162. package/lib/typescript/commonjs/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  163. package/lib/typescript/commonjs/ui/components/icon/OxyIcon.d.ts.map +1 -1
  164. package/lib/typescript/commonjs/ui/components/index.d.ts +0 -5
  165. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  166. package/lib/typescript/commonjs/ui/components/internal/PinInput.d.ts.map +1 -1
  167. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts +2 -2
  168. package/lib/typescript/commonjs/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  169. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  170. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  171. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  172. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  173. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  174. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  175. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +1 -1
  176. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  177. package/lib/typescript/commonjs/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  178. package/lib/typescript/commonjs/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  179. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  180. package/lib/typescript/commonjs/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  181. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  182. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  183. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  184. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  185. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  186. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  187. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  188. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  189. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  190. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  191. package/lib/typescript/commonjs/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  192. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  193. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  194. package/lib/typescript/commonjs/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  195. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts +0 -4
  196. package/lib/typescript/commonjs/ui/utils/fileManagement.d.ts.map +1 -1
  197. package/lib/typescript/module/ui/components/OxyPayButton.d.ts.map +1 -1
  198. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  199. package/lib/typescript/module/ui/components/OxySignInButton.d.ts +0 -1
  200. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  201. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  202. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts +3 -4
  203. package/lib/typescript/module/ui/components/fileManagement/FileDetailsModal.d.ts.map +1 -1
  204. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  205. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts +2 -3
  206. package/lib/typescript/module/ui/components/fileManagement/UploadPreview.d.ts.map +1 -1
  207. package/lib/typescript/module/ui/components/icon/OxyIcon.d.ts.map +1 -1
  208. package/lib/typescript/module/ui/components/index.d.ts +0 -5
  209. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  210. package/lib/typescript/module/ui/components/internal/PinInput.d.ts.map +1 -1
  211. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts +2 -2
  212. package/lib/typescript/module/ui/components/modals/DeleteAccountModal.d.ts.map +1 -1
  213. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  214. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  215. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  216. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  217. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  218. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  219. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +1 -1
  220. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  221. package/lib/typescript/module/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  222. package/lib/typescript/module/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  223. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  224. package/lib/typescript/module/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  225. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  226. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  227. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  228. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  229. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  230. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  231. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  232. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  233. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  234. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  235. package/lib/typescript/module/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  236. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  237. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  238. package/lib/typescript/module/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  239. package/lib/typescript/module/ui/utils/fileManagement.d.ts +0 -4
  240. package/lib/typescript/module/ui/utils/fileManagement.d.ts.map +1 -1
  241. package/package.json +3 -3
  242. package/src/ui/components/OxyPayButton.tsx +5 -3
  243. package/src/ui/components/OxyProvider.tsx +6 -5
  244. package/src/ui/components/OxySignInButton.tsx +82 -81
  245. package/src/ui/components/SignInModal.tsx +186 -42
  246. package/src/ui/components/fileManagement/FileDetailsModal.tsx +69 -99
  247. package/src/ui/components/fileManagement/FileViewer.tsx +25 -15
  248. package/src/ui/components/fileManagement/UploadPreview.tsx +58 -46
  249. package/src/ui/components/icon/OxyIcon.tsx +5 -4
  250. package/src/ui/components/index.ts +0 -5
  251. package/src/ui/components/internal/PinInput.tsx +4 -3
  252. package/src/ui/components/modals/DeleteAccountModal.tsx +79 -221
  253. package/src/ui/components/payment/PaymentDetailsStep.tsx +16 -19
  254. package/src/ui/components/payment/PaymentMethodStep.tsx +33 -35
  255. package/src/ui/components/payment/PaymentReviewStep.tsx +63 -67
  256. package/src/ui/components/payment/PaymentSuccessStep.tsx +4 -12
  257. package/src/ui/components/payment/PaymentSummaryStep.tsx +26 -33
  258. package/src/ui/constants/theme.ts +2 -2
  259. package/src/ui/context/hooks/useAuthOperations.ts +4 -3
  260. package/src/ui/screens/AccountCenterScreen.tsx +36 -139
  261. package/src/ui/screens/AccountOverviewScreen.tsx +107 -163
  262. package/src/ui/screens/AccountSettingsScreen.tsx +142 -156
  263. package/src/ui/screens/AccountSwitcherScreen.tsx +226 -199
  264. package/src/ui/screens/AccountVerificationScreen.tsx +34 -25
  265. package/src/ui/screens/FeedbackScreen.tsx +50 -38
  266. package/src/ui/screens/FileManagementScreen.tsx +88 -88
  267. package/src/ui/screens/HistoryViewScreen.tsx +79 -207
  268. package/src/ui/screens/LanguageSelectorScreen.tsx +19 -7
  269. package/src/ui/screens/LegalDocumentsScreen.tsx +46 -63
  270. package/src/ui/screens/PaymentGatewayScreen.tsx +11 -12
  271. package/src/ui/screens/PremiumSubscriptionScreen.tsx +73 -93
  272. package/src/ui/screens/PrivacySettingsScreen.tsx +81 -193
  273. package/src/ui/screens/SavesCollectionsScreen.tsx +23 -23
  274. package/src/ui/screens/SearchSettingsScreen.tsx +11 -19
  275. package/src/ui/screens/SessionManagementScreen.tsx +130 -76
  276. package/src/ui/screens/UserLinksScreen.tsx +15 -32
  277. package/src/ui/screens/WelcomeNewUserScreen.tsx +46 -20
  278. package/src/ui/screens/karma/KarmaFAQScreen.tsx +4 -6
  279. package/src/ui/utils/fileManagement.ts +0 -30
  280. package/lib/commonjs/ui/components/GroupedItem.js +0 -138
  281. package/lib/commonjs/ui/components/GroupedItem.js.map +0 -1
  282. package/lib/commonjs/ui/components/GroupedSection.js +0 -41
  283. package/lib/commonjs/ui/components/GroupedSection.js.map +0 -1
  284. package/lib/commonjs/ui/components/Section.js +0 -39
  285. package/lib/commonjs/ui/components/Section.js.map +0 -1
  286. package/lib/commonjs/ui/components/SectionTitle.js +0 -29
  287. package/lib/commonjs/ui/components/SectionTitle.js.map +0 -1
  288. package/lib/commonjs/ui/components/SettingRow.js +0 -90
  289. package/lib/commonjs/ui/components/SettingRow.js.map +0 -1
  290. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +0 -206
  291. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +0 -1
  292. package/lib/commonjs/ui/utils/confirmAction.js +0 -28
  293. package/lib/commonjs/ui/utils/confirmAction.js.map +0 -1
  294. package/lib/module/ui/components/GroupedItem.js +0 -135
  295. package/lib/module/ui/components/GroupedItem.js.map +0 -1
  296. package/lib/module/ui/components/GroupedSection.js +0 -37
  297. package/lib/module/ui/components/GroupedSection.js.map +0 -1
  298. package/lib/module/ui/components/Section.js +0 -34
  299. package/lib/module/ui/components/Section.js.map +0 -1
  300. package/lib/module/ui/components/SectionTitle.js +0 -25
  301. package/lib/module/ui/components/SectionTitle.js.map +0 -1
  302. package/lib/module/ui/components/SettingRow.js +0 -85
  303. package/lib/module/ui/components/SettingRow.js.map +0 -1
  304. package/lib/module/ui/components/internal/GroupedPillButtons.js +0 -202
  305. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +0 -1
  306. package/lib/module/ui/utils/confirmAction.js +0 -25
  307. package/lib/module/ui/utils/confirmAction.js.map +0 -1
  308. package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts +0 -24
  309. package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts.map +0 -1
  310. package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts +0 -30
  311. package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts.map +0 -1
  312. package/lib/typescript/commonjs/ui/components/Section.d.ts +0 -12
  313. package/lib/typescript/commonjs/ui/components/Section.d.ts.map +0 -1
  314. package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts +0 -10
  315. package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts.map +0 -1
  316. package/lib/typescript/commonjs/ui/components/SettingRow.d.ts +0 -20
  317. package/lib/typescript/commonjs/ui/components/SettingRow.d.ts.map +0 -1
  318. package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts +0 -24
  319. package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
  320. package/lib/typescript/commonjs/ui/utils/confirmAction.d.ts +0 -7
  321. package/lib/typescript/commonjs/ui/utils/confirmAction.d.ts.map +0 -1
  322. package/lib/typescript/module/ui/components/GroupedItem.d.ts +0 -24
  323. package/lib/typescript/module/ui/components/GroupedItem.d.ts.map +0 -1
  324. package/lib/typescript/module/ui/components/GroupedSection.d.ts +0 -30
  325. package/lib/typescript/module/ui/components/GroupedSection.d.ts.map +0 -1
  326. package/lib/typescript/module/ui/components/Section.d.ts +0 -12
  327. package/lib/typescript/module/ui/components/Section.d.ts.map +0 -1
  328. package/lib/typescript/module/ui/components/SectionTitle.d.ts +0 -10
  329. package/lib/typescript/module/ui/components/SectionTitle.d.ts.map +0 -1
  330. package/lib/typescript/module/ui/components/SettingRow.d.ts +0 -20
  331. package/lib/typescript/module/ui/components/SettingRow.d.ts.map +0 -1
  332. package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts +0 -24
  333. package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
  334. package/lib/typescript/module/ui/utils/confirmAction.d.ts +0 -7
  335. package/lib/typescript/module/ui/utils/confirmAction.d.ts.map +0 -1
  336. package/src/ui/components/GroupedItem.tsx +0 -161
  337. package/src/ui/components/GroupedSection.tsx +0 -60
  338. package/src/ui/components/Section.tsx +0 -42
  339. package/src/ui/components/SectionTitle.tsx +0 -27
  340. package/src/ui/components/SettingRow.tsx +0 -98
  341. package/src/ui/components/internal/GroupedPillButtons.tsx +0 -250
  342. package/src/ui/utils/confirmAction.ts +0 -23
@@ -7,11 +7,13 @@ import {
7
7
  TextInput,
8
8
  TouchableOpacity,
9
9
  ActivityIndicator,
10
- Alert,
11
10
  } from 'react-native';
12
11
  import type { BaseScreenProps } from '../types/navigation';
13
12
  import { toast } from '../../lib/sonner';
14
- import { Header, Section } from '../components';
13
+ import * as Prompt from '@oxyhq/bloom/prompt';
14
+ import { usePromptControl } from '@oxyhq/bloom/prompt';
15
+ import { Header } from '../components';
16
+ import { SettingsListGroup } from '@oxyhq/bloom/settings-list';
15
17
  import { useI18n } from '../hooks/useI18n';
16
18
  import { useTheme } from '@oxyhq/bloom/theme';
17
19
  import { useOxy } from '../context/OxyContext';
@@ -27,9 +29,19 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
27
29
  const [reason, setReason] = useState('');
28
30
  const [evidence, setEvidence] = useState('');
29
31
  const [isSubmitting, setIsSubmitting] = useState(false);
32
+ const [successMessage, setSuccessMessage] = useState('');
30
33
 
31
34
  const bloomTheme = useTheme();
32
35
 
36
+ // Prompt controls
37
+ const successPrompt = usePromptControl();
38
+
39
+ const handleSuccessAcknowledged = useCallback(() => {
40
+ setReason('');
41
+ setEvidence('');
42
+ goBack?.();
43
+ }, [goBack]);
44
+
33
45
  const handleSubmit = useCallback(async () => {
34
46
  if (!reason.trim()) {
35
47
  toast.error(t('accountVerification.reasonRequired') || 'Please provide a reason for verification');
@@ -48,20 +60,10 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
48
60
  evidence.trim() || undefined
49
61
  );
50
62
 
51
- Alert.alert(
52
- t('accountVerification.successTitle') || 'Request Submitted',
53
- t('accountVerification.successMessage') || `Your verification request has been submitted. Request ID: ${result.requestId}`,
54
- [
55
- {
56
- text: t('accountVerification.ok') || 'OK',
57
- onPress: () => {
58
- setReason('');
59
- setEvidence('');
60
- goBack?.();
61
- },
62
- },
63
- ]
63
+ setSuccessMessage(
64
+ t('accountVerification.successMessage') || `Your verification request has been submitted. Request ID: ${result.requestId}`
64
65
  );
66
+ successPrompt.open();
65
67
  } catch (error: unknown) {
66
68
  if (__DEV__) {
67
69
  console.error('Failed to submit verification request:', error);
@@ -72,7 +74,7 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
72
74
  } finally {
73
75
  setIsSubmitting(false);
74
76
  }
75
- }, [reason, evidence, oxyServices, t, goBack]);
77
+ }, [reason, evidence, oxyServices, t, successPrompt]);
76
78
 
77
79
  return (
78
80
  <View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
@@ -85,13 +87,13 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
85
87
  />
86
88
 
87
89
  <ScrollView style={styles.content}>
88
- <Section isFirst={true}>
90
+ <SettingsListGroup>
89
91
  <Text style={styles.description} className="text-muted-foreground">
90
92
  {t('accountVerification.description') || 'Request a verified badge for your account. Verified accounts help establish authenticity and credibility.'}
91
93
  </Text>
92
- </Section>
94
+ </SettingsListGroup>
93
95
 
94
- <Section title={t('accountVerification.sections.request') || 'VERIFICATION REQUEST'} >
96
+ <SettingsListGroup title={t('accountVerification.sections.request') || 'VERIFICATION REQUEST'}>
95
97
  <View style={styles.inputGroup}>
96
98
  <Text style={styles.label} className="text-foreground">
97
99
  {t('accountVerification.reasonLabel') || 'Reason for Verification *'}
@@ -133,9 +135,9 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
133
135
  editable={!isSubmitting}
134
136
  />
135
137
  </View>
136
- </Section>
138
+ </SettingsListGroup>
137
139
 
138
- <Section >
140
+ <SettingsListGroup>
139
141
  <TouchableOpacity
140
142
  style={styles.submitButton}
141
143
  className={isSubmitting ? 'bg-muted-foreground' : 'bg-primary'}
@@ -150,14 +152,22 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
150
152
  </Text>
151
153
  )}
152
154
  </TouchableOpacity>
153
- </Section>
155
+ </SettingsListGroup>
154
156
 
155
- <Section >
157
+ <SettingsListGroup>
156
158
  <Text style={styles.note} className="text-muted-foreground">
157
159
  {t('accountVerification.note') || 'Note: Verification requests are reviewed manually and may take several days. We will notify you once your request has been reviewed.'}
158
160
  </Text>
159
- </Section>
161
+ </SettingsListGroup>
160
162
  </ScrollView>
163
+ <Prompt.Basic
164
+ control={successPrompt}
165
+ title={t('accountVerification.successTitle') || 'Request Submitted'}
166
+ description={successMessage}
167
+ onConfirm={handleSuccessAcknowledged}
168
+ confirmButtonCta={t('accountVerification.ok') || 'OK'}
169
+ showCancel={false}
170
+ />
161
171
  </View>
162
172
  );
163
173
  };
@@ -214,4 +224,3 @@ const styles = StyleSheet.create({
214
224
  });
215
225
 
216
226
  export default React.memo(AccountVerificationScreen);
217
-
@@ -17,7 +17,8 @@ import { normalizeTheme } from '../utils/themeUtils';
17
17
  import { Ionicons } from '@expo/vector-icons';
18
18
  import { toast } from '../../lib/sonner';
19
19
  import { packageInfo } from '@oxyhq/core';
20
- import { GroupedSection } from '../components';
20
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
21
+ import { SettingsIcon } from '../components/SettingsIcon';
21
22
  import { useI18n } from '../hooks/useI18n';
22
23
  import { useOxy } from '../context/OxyContext';
23
24
 
@@ -143,40 +144,20 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
143
144
  }
144
145
  }, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
145
146
 
146
- const feedbackTypeItems = useMemo(() => FEEDBACK_TYPES.map(type => ({
147
- id: type.id,
148
- icon: type.icon,
149
- iconColor: type.color,
150
- title: type.label,
151
- subtitle: type.description,
152
- onPress: () => { updateField('type', type.id); updateField('category', ''); },
153
- selected: feedbackData.type === type.id,
154
- showChevron: false,
155
- multiRow: true,
156
- dense: true,
157
- })), [feedbackData.type, updateField]);
158
-
159
- const categoryItems = useMemo(() => (feedbackData.type ? (CATEGORIES[feedbackData.type] || []).map(cat => ({
160
- id: cat,
161
- icon: feedbackData.category === cat ? 'check-circle' : 'ellipse-outline',
162
- iconColor: feedbackData.category === cat ? colors.primary : colors.secondaryText,
163
- title: cat,
164
- onPress: () => updateField('category', cat),
165
- selected: feedbackData.category === cat,
166
- showChevron: false,
167
- dense: true,
168
- })) : []), [feedbackData.type, feedbackData.category, colors.primary, colors.secondaryText, updateField]);
169
-
170
- const priorityItems = useMemo(() => PRIORITY_LEVELS.map(p => ({
171
- id: p.id,
172
- icon: p.icon,
173
- iconColor: p.color,
174
- title: p.label,
175
- onPress: () => updateField('priority', p.id),
176
- selected: feedbackData.priority === p.id,
177
- showChevron: false,
178
- dense: true,
179
- })), [feedbackData.priority, updateField]);
147
+ const feedbackTypeData = useMemo(() => FEEDBACK_TYPES.map(type => ({
148
+ ...type,
149
+ isSelected: feedbackData.type === type.id,
150
+ })), [feedbackData.type]);
151
+
152
+ const categoryData = useMemo(() => (feedbackData.type ? (CATEGORIES[feedbackData.type] || []).map(cat => ({
153
+ name: cat,
154
+ isSelected: feedbackData.category === cat,
155
+ })) : []), [feedbackData.type, feedbackData.category]);
156
+
157
+ const priorityData = useMemo(() => PRIORITY_LEVELS.map(p => ({
158
+ ...p,
159
+ isSelected: feedbackData.priority === p.id,
160
+ })), [feedbackData.priority]);
180
161
 
181
162
  const renderTypeStep = () => (
182
163
  <Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
@@ -189,7 +170,18 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
189
170
  </Text>
190
171
  </View>
191
172
  <View style={styles.fullBleed}>
192
- <GroupedSection items={feedbackTypeItems} />
173
+ <SettingsListGroup>
174
+ {feedbackTypeData.map(type => (
175
+ <SettingsListItem
176
+ key={type.id}
177
+ icon={<SettingsIcon name={type.icon} color={type.color} />}
178
+ title={type.label}
179
+ description={type.description}
180
+ onPress={() => { updateField('type', type.id); updateField('category', ''); }}
181
+ showChevron={false}
182
+ />
183
+ ))}
184
+ </SettingsListGroup>
193
185
  </View>
194
186
 
195
187
  {feedbackData.type && (
@@ -198,7 +190,17 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
198
190
  {t('feedback.category.label') || 'Category'}
199
191
  </Text>
200
192
  <View style={styles.fullBleed}>
201
- <GroupedSection items={categoryItems} />
193
+ <SettingsListGroup>
194
+ {categoryData.map(cat => (
195
+ <SettingsListItem
196
+ key={cat.name}
197
+ icon={<SettingsIcon name={cat.isSelected ? 'check-circle' : 'ellipse-outline'} color={cat.isSelected ? colors.primary : colors.secondaryText} />}
198
+ title={cat.name}
199
+ onPress={() => updateField('category', cat.name)}
200
+ showChevron={false}
201
+ />
202
+ ))}
203
+ </SettingsListGroup>
202
204
  </View>
203
205
  </View>
204
206
  )}
@@ -274,7 +276,17 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
274
276
  {t('feedback.priority.label') || 'Priority Level'}
275
277
  </Text>
276
278
  <View style={styles.fullBleed}>
277
- <GroupedSection items={priorityItems} />
279
+ <SettingsListGroup>
280
+ {priorityData.map(p => (
281
+ <SettingsListItem
282
+ key={p.id}
283
+ icon={<SettingsIcon name={p.icon} color={p.color} />}
284
+ title={p.label}
285
+ onPress={() => updateField('priority', p.id)}
286
+ showChevron={false}
287
+ />
288
+ ))}
289
+ </SettingsListGroup>
278
290
  </View>
279
291
  </View>
280
292
 
@@ -11,7 +11,6 @@ import {
11
11
  Image,
12
12
  Animated,
13
13
  Easing,
14
- Alert,
15
14
  } from 'react-native';
16
15
  import { Image as ExpoImage } from 'expo-image';
17
16
  import type { FileManagementScreenProps } from '../types/fileManagement';
@@ -29,6 +28,8 @@ const loadDocumentPicker = async () => {
29
28
  }
30
29
  };
31
30
  import { toast } from '../../lib/sonner';
31
+ import * as Prompt from '@oxyhq/bloom/prompt';
32
+ import { usePromptControl } from '@oxyhq/bloom/prompt';
32
33
  import { Ionicons } from '@expo/vector-icons';
33
34
  // @ts-ignore - MaterialCommunityIcons is available at runtime
34
35
  import { MaterialCommunityIcons } from '@expo/vector-icons';
@@ -36,13 +37,12 @@ import type { FileMetadata } from '@oxyhq/core';
36
37
  import { useFileStore, useFiles, useUploading as useUploadingStore, useUploadAggregateProgress, useDeleting as useDeletingStore } from '../stores/fileStore';
37
38
  import Header from '../components/Header';
38
39
  import JustifiedPhotoGrid from '../components/photogrid/JustifiedPhotoGrid';
39
- import { GroupedSection } from '../components';
40
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
40
41
  import { useTheme } from '@oxyhq/bloom/theme';
41
42
  import { useOxy } from '../context/OxyContext';
42
43
  import { useI18n } from '../hooks/useI18n';
43
44
  import { useUploadFile } from '../hooks/mutations/useAccountMutations';
44
45
  import {
45
- confirmAction,
46
46
  convertDocumentPickerAssetToFile,
47
47
  formatFileSize,
48
48
  getFileIcon,
@@ -51,6 +51,7 @@ import {
51
51
  import { FileViewer } from '../components/fileManagement/FileViewer';
52
52
  import { FileDetailsModal } from '../components/fileManagement/FileDetailsModal';
53
53
  import { UploadPreview } from '../components/fileManagement/UploadPreview';
54
+ import { useDialogControl } from '@oxyhq/bloom/dialog';
54
55
  import { fileManagementStyles } from '../components/fileManagement/styles';
55
56
  import type { OnConfirmFileSelection } from '../types/fileManagement';
56
57
 
@@ -133,6 +134,11 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
133
134
  const { user, oxyServices } = useOxy();
134
135
  const { t } = useI18n();
135
136
  const uploadFileMutation = useUploadFile();
137
+ // Prompt controls
138
+ const fileDeletePrompt = usePromptControl();
139
+ const bulkDeletePrompt = usePromptControl();
140
+ const visibilityChangePrompt = usePromptControl();
141
+ const [pendingDeleteFile, setPendingDeleteFile] = useState<{ id: string; name: string } | null>(null);
136
142
  const files = useFiles();
137
143
  // Ensure containerWidth is a number (TypeScript guard)
138
144
  const safeContainerWidth: number = typeof containerWidth === 'number' ? containerWidth : 400;
@@ -143,7 +149,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
143
149
  const [refreshing, setRefreshing] = useState(false);
144
150
  const [paging, setPaging] = useState({ offset: 0, limit: 40, total: 0, hasMore: true, loadingMore: false });
145
151
  const [selectedFile, setSelectedFile] = useState<FileMetadata | null>(null);
146
- const [showFileDetails, setShowFileDetails] = useState(false);
152
+ const fileDetailsControl = useDialogControl();
147
153
  // In selectMode we never open the detailed viewer
148
154
  const [openedFile, setOpenedFile] = useState<FileMetadata | null>(null);
149
155
  const [fileContent, setFileContent] = useState<string | null>(null);
@@ -889,18 +895,14 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
889
895
  }
890
896
  };
891
897
 
892
- const handleFileDelete = async (fileId: string, filename: string) => {
893
- // Use platform-aware confirmation dialog
894
- const confirmed = await confirmAction(
895
- t('fileManagement.confirms.deleteFile', { filename }),
896
- t('fileManagement.deleteFile'),
897
- t('fileManagement.confirm'),
898
- t('common.cancel')
899
- );
898
+ const confirmFileDelete = useCallback((fileId: string, filename: string) => {
899
+ setPendingDeleteFile({ id: fileId, name: filename });
900
+ fileDeletePrompt.open();
901
+ }, [fileDeletePrompt]);
900
902
 
901
- if (!confirmed) {
902
- return;
903
- }
903
+ const handleFileDelete = useCallback(async () => {
904
+ if (!pendingDeleteFile) return;
905
+ const { id: fileId } = pendingDeleteFile;
904
906
 
905
907
  try {
906
908
  storeSetDeleting(fileId);
@@ -927,24 +929,17 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
927
929
  }
928
930
  } finally {
929
931
  storeSetDeleting(null);
932
+ setPendingDeleteFile(null);
930
933
  }
931
- };
934
+ }, [pendingDeleteFile, storeSetDeleting, oxyServices, loadFiles, t]);
932
935
 
933
- const handleBulkDelete = useCallback(async () => {
936
+ const confirmBulkDelete = useCallback(() => {
934
937
  if (selectedIds.size === 0) return;
938
+ bulkDeletePrompt.open();
939
+ }, [selectedIds.size, bulkDeletePrompt]);
935
940
 
936
- const fileMap: Record<string, FileMetadata> = {};
937
- files.forEach(f => { fileMap[f.id] = f; });
938
- const selectedFiles = Array.from(selectedIds).map(id => fileMap[id]).filter(Boolean);
939
-
940
- const confirmed = await confirmAction(
941
- t('fileManagement.confirms.deleteFiles', { count: selectedFiles.length }),
942
- t('fileManagement.deleteFiles'),
943
- t('fileManagement.confirm'),
944
- t('common.cancel')
945
- );
946
-
947
- if (!confirmed) return;
941
+ const handleBulkDelete = useCallback(async () => {
942
+ if (selectedIds.size === 0) return;
948
943
 
949
944
  try {
950
945
  const deletePromises = Array.from(selectedIds).map(async (fileId) => {
@@ -1119,7 +1114,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1119
1114
 
1120
1115
  const showFileDetailsModal = (file: FileMetadata) => {
1121
1116
  setSelectedFile(file);
1122
- setShowFileDetails(true);
1117
+ fileDetailsControl.open();
1123
1118
  };
1124
1119
 
1125
1120
  const renderSimplePhotoItem = useCallback((photo: FileMetadata, index: number) => {
@@ -1350,9 +1345,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1350
1345
  {/* Always show delete button for debugging */}
1351
1346
  <TouchableOpacity
1352
1347
  style={[fileManagementStyles.actionButton, { backgroundColor: bloomTheme.isDark ? '#400000' : '#FFEBEE' }]}
1353
- onPress={() => {
1354
- handleFileDelete(file.id, file.filename);
1355
- }}
1348
+ onPress={() => confirmFileDelete(file.id, file.filename)}
1356
1349
  disabled={deleting === file.id}
1357
1350
  >
1358
1351
  {deleting === file.id ? (
@@ -1367,8 +1360,8 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1367
1360
  );
1368
1361
  };
1369
1362
 
1370
- // GroupedSection-based file items (for 'all' view) replacing legacy flat list look
1371
- // biome-ignore lint/suspicious/noExplicitAny: GroupedSection items have dynamic props
1363
+ // SettingsListItem-based file items (for 'all' view)
1364
+ // biome-ignore lint/suspicious/noExplicitAny: file items have dynamic props
1372
1365
  const groupedFileItems: any[] = useMemo(() => {
1373
1366
  // filteredFiles is already sorted, so just use it directly
1374
1367
  const sortedFiles = filteredFiles;
@@ -1385,11 +1378,11 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1385
1378
  const hasPreview = isImage || isPDF || isVideo;
1386
1379
  const isSelected = selectedIds.has(file.id);
1387
1380
 
1388
- // Create customIcon for preview thumbnails (36x36 to match GroupedItem iconContainer)
1389
- let customIcon: React.ReactNode | undefined;
1381
+ // Create icon for preview thumbnails (36x36)
1382
+ let fileIcon: React.ReactNode | undefined;
1390
1383
  if (hasPreview) {
1391
1384
  if (isImage) {
1392
- customIcon = (
1385
+ fileIcon = (
1393
1386
  <View style={{ width: 36, height: 36, borderRadius: 18, overflow: 'hidden' }}>
1394
1387
  <ExpoImage
1395
1388
  source={{ uri: getSafeDownloadUrlCallback(file, 'thumb') }}
@@ -1405,7 +1398,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1405
1398
  </View>
1406
1399
  );
1407
1400
  } else if (isVideo) {
1408
- customIcon = (
1401
+ fileIcon = (
1409
1402
  <View style={{ width: 36, height: 36, borderRadius: 18, overflow: 'hidden', backgroundColor: '#000000', position: 'relative' }}>
1410
1403
  <ExpoImage
1411
1404
  source={{ uri: getSafeDownloadUrlCallback(file, 'thumb') }}
@@ -1424,7 +1417,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1424
1417
  </View>
1425
1418
  );
1426
1419
  } else if (isPDF) {
1427
- customIcon = (
1420
+ fileIcon = (
1428
1421
  <View style={{ width: 36, height: 36, borderRadius: 18, alignItems: 'center', justifyContent: 'center', backgroundColor: '#FF6B6B20' }}>
1429
1422
  <Ionicons name="document" size={20} color={colors.primary} />
1430
1423
  </View>
@@ -1434,12 +1427,9 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1434
1427
 
1435
1428
  return {
1436
1429
  id: file.id,
1437
- customIcon: customIcon,
1438
- icon: !hasPreview ? getFileIcon(file.contentType) : undefined,
1439
- iconColor: colors.primary,
1430
+ icon: fileIcon ?? (!hasPreview ? <Ionicons name={getFileIcon(file.contentType)} size={20} color={colors.primary} /> : undefined),
1440
1431
  title: file.filename,
1441
- subtitle: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
1442
- theme: theme as 'light' | 'dark',
1432
+ description: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
1443
1433
  onPress: () => {
1444
1434
  // Support selection in regular mode with long press or if already selecting
1445
1435
  if (!selectMode && selectedIds.size > 0) {
@@ -1449,20 +1439,8 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1449
1439
  handleFileOpen(file);
1450
1440
  }
1451
1441
  },
1452
- onLongPress: !selectMode ? () => {
1453
- // Enable selection mode on long press
1454
- if (selectedIds.size === 0) {
1455
- setSelectedIds(new Set([file.id]));
1456
- } else {
1457
- toggleSelect(file);
1458
- }
1459
- } : undefined,
1460
- showChevron: false,
1461
- dense: true,
1462
- multiRow: !!file.metadata?.description,
1463
- selected: (selectMode || selectedIds.size > 0) && isSelected,
1464
1442
  // Hide action buttons when selecting (in selectMode or bulk operations mode)
1465
- customContent: (!selectMode && selectedIds.size === 0) ? (
1443
+ rightElement: (!selectMode && selectedIds.size === 0) ? (
1466
1444
  <View style={fileManagementStyles.groupedActions}>
1467
1445
  {(isImage || isVideo || file.contentType.includes('pdf')) && (
1468
1446
  <TouchableOpacity
@@ -1480,7 +1458,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1480
1458
  </TouchableOpacity>
1481
1459
  <TouchableOpacity
1482
1460
  style={[fileManagementStyles.groupedActionBtn, { backgroundColor: bloomTheme.isDark ? '#400000' : '#FFEBEE' }]}
1483
- onPress={() => handleFileDelete(file.id, file.filename)}
1461
+ onPress={() => confirmFileDelete(file.id, file.filename)}
1484
1462
  disabled={deleting === file.id}
1485
1463
  >
1486
1464
  {deleting === file.id ? (
@@ -1491,14 +1469,9 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1491
1469
  </TouchableOpacity>
1492
1470
  </View>
1493
1471
  ) : undefined,
1494
- customContentBelow: file.metadata?.description ? (
1495
- <Text style={[fileManagementStyles.groupedDescription, { color: bloomTheme.isDark ? '#AAAAAA' : '#666666' }]} numberOfLines={2}>
1496
- {file.metadata.description}
1497
- </Text>
1498
- ) : undefined,
1499
1472
  };
1500
1473
  });
1501
- }, [filteredFiles, theme, deleting, handleFileDownload, handleFileDelete, handleFileOpen, getSafeDownloadUrlCallback, selectMode, selectedIds]);
1474
+ }, [filteredFiles, theme, deleting, handleFileDownload, confirmFileDelete, handleFileOpen, getSafeDownloadUrlCallback, selectMode, selectedIds]);
1502
1475
 
1503
1476
  // Scroll to selected file after selection
1504
1477
  useEffect(() => {
@@ -1843,7 +1816,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1843
1816
  );
1844
1817
  };
1845
1818
 
1846
- // Skeleton file item matching GroupedSection structure
1819
+ // Skeleton file item matching SettingsListItem structure
1847
1820
  const SkeletonFileItem = ({ index }: { index: number }) => (
1848
1821
  <View
1849
1822
  style={[
@@ -1915,7 +1888,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1915
1888
  ))}
1916
1889
  </View>
1917
1890
 
1918
- {/* File List Skeleton - Matching GroupedSection */}
1891
+ {/* File List Skeleton - Matching SettingsListItem */}
1919
1892
  <ScrollView
1920
1893
  style={fileManagementStyles.scrollView}
1921
1894
  contentContainerStyle={fileManagementStyles.scrollContainer}
@@ -1952,15 +1925,14 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1952
1925
  onToggleDetails={() => setShowFileDetailsInViewer(!showFileDetailsInViewer)}
1953
1926
  onClose={handleCloseFile}
1954
1927
  onDownload={handleFileDownload}
1955
- onDelete={handleFileDelete}
1928
+ onDelete={confirmFileDelete}
1956
1929
  isOwner={user?.id === targetUserId}
1957
1930
  />
1958
1931
  <FileDetailsModal
1959
- visible={showFileDetails}
1932
+ control={fileDetailsControl}
1960
1933
  file={selectedFile}
1961
- onClose={() => setShowFileDetails(false)}
1962
1934
  onDownload={handleFileDownload}
1963
- onDelete={handleFileDelete}
1935
+ onDelete={confirmFileDelete}
1964
1936
  isOwner={user?.id === targetUserId}
1965
1937
  />
1966
1938
  </>
@@ -1981,7 +1953,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1981
1953
  titleAlignment="left"
1982
1954
  />
1983
1955
  <UploadPreview
1984
- visible={true}
1985
1956
  pendingFiles={pendingFiles}
1986
1957
  onConfirm={handleConfirmUpload}
1987
1958
  onCancel={handleCancelUpload}
@@ -2019,24 +1990,14 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2019
1990
  {
2020
1991
  key: 'delete',
2021
1992
  text: t('fileManagement.delete', { count: selectedIds.size }),
2022
- onPress: handleBulkDelete,
1993
+ onPress: confirmBulkDelete,
2023
1994
  icon: 'delete',
2024
1995
  },
2025
1996
  {
2026
1997
  key: 'visibility',
2027
1998
  text: t('fileManagement.visibility'),
2028
1999
  onPress: () => {
2029
- // Show visibility options menu
2030
- Alert.alert(
2031
- t('fileManagement.changeVisibility'),
2032
- t('fileManagement.changeVisibilityConfirm', { count: selectedIds.size }),
2033
- [
2034
- { text: t('common.cancel'), style: 'cancel' },
2035
- { text: t('fileManagement.private'), onPress: () => handleBulkVisibilityChange('private') },
2036
- { text: t('fileManagement.public'), onPress: () => handleBulkVisibilityChange('public') },
2037
- { text: t('fileManagement.unlisted'), onPress: () => handleBulkVisibilityChange('unlisted') },
2038
- ]
2039
- );
2000
+ visibilityChangePrompt.open();
2040
2001
  },
2041
2002
  icon: 'eye',
2042
2003
  }
@@ -2259,7 +2220,19 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2259
2220
  </View>
2260
2221
  ) : filteredFiles.length === 0 ? renderEmptyState() : (
2261
2222
  <>
2262
- <GroupedSection items={groupedFileItems} />
2223
+ <SettingsListGroup>
2224
+ {groupedFileItems.map(item => (
2225
+ <SettingsListItem
2226
+ key={item.id}
2227
+ icon={item.icon}
2228
+ title={item.title}
2229
+ description={item.description}
2230
+ onPress={item.onPress}
2231
+ showChevron={false}
2232
+ rightElement={item.rightElement}
2233
+ />
2234
+ ))}
2235
+ </SettingsListGroup>
2263
2236
  {paging.loadingMore && (
2264
2237
  <View style={fileManagementStyles.loadingMoreBar}>
2265
2238
  <ActivityIndicator size="small" color={colors.primary} />
@@ -2273,11 +2246,10 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2273
2246
 
2274
2247
  {!selectMode && (
2275
2248
  <FileDetailsModal
2276
- visible={showFileDetails}
2249
+ control={fileDetailsControl}
2277
2250
  file={selectedFile}
2278
- onClose={() => setShowFileDetails(false)}
2279
2251
  onDownload={handleFileDownload}
2280
- onDelete={handleFileDelete}
2252
+ onDelete={confirmFileDelete}
2281
2253
  isOwner={user?.id === targetUserId}
2282
2254
  />
2283
2255
  )}
@@ -2312,6 +2284,34 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2312
2284
 
2313
2285
  {/* Selection bar removed; actions are now in header */}
2314
2286
  {/* Global loadingMore bar removed; now inline in scroll areas */}
2287
+ <Prompt.Basic
2288
+ control={fileDeletePrompt}
2289
+ title={t('fileManagement.deleteFile') || 'Delete File'}
2290
+ description={pendingDeleteFile ? t('fileManagement.confirms.deleteFile', { filename: pendingDeleteFile.name }) : ''}
2291
+ onConfirm={handleFileDelete}
2292
+ confirmButtonCta={t('fileManagement.confirm') || 'Delete'}
2293
+ confirmButtonColor='negative'
2294
+ />
2295
+ <Prompt.Basic
2296
+ control={bulkDeletePrompt}
2297
+ title={t('fileManagement.deleteFiles') || 'Delete Files'}
2298
+ description={t('fileManagement.confirms.deleteFiles', { count: selectedIds.size })}
2299
+ onConfirm={handleBulkDelete}
2300
+ confirmButtonCta={t('fileManagement.confirm') || 'Delete'}
2301
+ confirmButtonColor='negative'
2302
+ />
2303
+ <Prompt.Outer control={visibilityChangePrompt}>
2304
+ <Prompt.Content>
2305
+ <Prompt.TitleText>{t('fileManagement.changeVisibility') || 'Change Visibility'}</Prompt.TitleText>
2306
+ <Prompt.DescriptionText>{t('fileManagement.changeVisibilityConfirm', { count: selectedIds.size })}</Prompt.DescriptionText>
2307
+ </Prompt.Content>
2308
+ <Prompt.Actions>
2309
+ <Prompt.Action cta={t('fileManagement.private') || 'Private'} onPress={() => handleBulkVisibilityChange('private')} color='primary' />
2310
+ <Prompt.Action cta={t('fileManagement.public') || 'Public'} onPress={() => handleBulkVisibilityChange('public')} color='primary_subtle' />
2311
+ <Prompt.Action cta={t('fileManagement.unlisted') || 'Unlisted'} onPress={() => handleBulkVisibilityChange('unlisted')} color='primary_subtle' />
2312
+ <Prompt.Cancel cta={t('common.cancel') || 'Cancel'} />
2313
+ </Prompt.Actions>
2314
+ </Prompt.Outer>
2315
2315
  </View>
2316
2316
  );
2317
2317
  };