@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,7 +7,6 @@ import {
7
7
  StyleSheet,
8
8
  ScrollView,
9
9
  ActivityIndicator,
10
- Alert,
11
10
  Platform,
12
11
  RefreshControl,
13
12
  } from 'react-native';
@@ -15,8 +14,11 @@ import type { BaseScreenProps } from '../types/navigation';
15
14
  import { screenContentStyle } from '../constants/spacing';
16
15
  import { toast } from '../../lib/sonner';
17
16
  import type { ClientSession } from '@oxyhq/core';
18
- import { confirmAction } from '../utils/confirmAction';
19
- import { Header, GroupedSection } from '../components';
17
+ import * as Prompt from '@oxyhq/bloom/prompt';
18
+ import { usePromptControl } from '@oxyhq/bloom/prompt';
19
+ import { Header } from '../components';
20
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
21
+ import { SettingsIcon } from '../components/SettingsIcon';
20
22
  import { useTheme } from '@oxyhq/bloom/theme';
21
23
  import { useOxy } from '../context/OxyContext';
22
24
  import { useI18n } from '../hooks/useI18n';
@@ -52,6 +54,12 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
52
54
  const [actionLoading, setActionLoading] = useState<string | null>(null);
53
55
  const [switchLoading, setSwitchLoading] = useState<string | null>(null);
54
56
  const [lastRefreshed, setLastRefreshed] = useState<Date | null>(null);
57
+ const [pendingLogoutSessionId, setPendingLogoutSessionId] = useState<string | null>(null);
58
+
59
+ // Prompt controls
60
+ const logoutSessionPrompt = usePromptControl();
61
+ const logoutOtherSessionsPrompt = usePromptControl();
62
+ const logoutAllSessionsPrompt = usePromptControl();
55
63
 
56
64
  // Use bloom theme for non-style color props (ActivityIndicator, icon colors, etc.)
57
65
  const bloomTheme = useTheme();
@@ -75,39 +83,37 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
75
83
  if (__DEV__) {
76
84
  console.error('Failed to load sessions:', error);
77
85
  }
78
- if (Platform.OS === 'web') {
79
- toast.error(t('sessionManagement.toasts.loadFailed'));
80
- } else {
81
- Alert.alert(
82
- 'Error',
83
- t('sessionManagement.toasts.loadFailed'),
84
- [{ text: 'OK' }]
85
- );
86
- }
86
+ toast.error(t('sessionManagement.toasts.loadFailed'));
87
87
  } finally {
88
88
  setLoading(false);
89
89
  setRefreshing(false);
90
90
  }
91
91
  }, [refreshSessions]);
92
92
 
93
- // Memoized logout session handler - prevents unnecessary re-renders
94
- const handleLogoutSession = useCallback(async (sessionId: string) => {
95
- confirmAction(t('sessionManagement.confirms.logoutSession'), async () => {
96
- try {
97
- setActionLoading(sessionId);
98
- await logout(sessionId);
99
- await refreshSessions();
100
- toast.success(t('sessionManagement.toasts.logoutSuccess'));
101
- } catch (error) {
102
- if (__DEV__) {
103
- console.error('Logout session failed:', error);
104
- }
105
- toast.error(t('sessionManagement.toasts.logoutFailed'));
106
- } finally {
107
- setActionLoading(null);
93
+ // Confirm logout session - opens prompt
94
+ const confirmLogoutSession = useCallback((sessionId: string) => {
95
+ setPendingLogoutSessionId(sessionId);
96
+ logoutSessionPrompt.open();
97
+ }, [logoutSessionPrompt]);
98
+
99
+ // Handle logout session - executes after prompt confirmation
100
+ const handleLogoutSession = useCallback(async () => {
101
+ if (!pendingLogoutSessionId) return;
102
+ try {
103
+ setActionLoading(pendingLogoutSessionId);
104
+ await logout(pendingLogoutSessionId);
105
+ await refreshSessions();
106
+ toast.success(t('sessionManagement.toasts.logoutSuccess'));
107
+ } catch (error) {
108
+ if (__DEV__) {
109
+ console.error('Logout session failed:', error);
108
110
  }
109
- });
110
- }, [logout, refreshSessions]);
111
+ toast.error(t('sessionManagement.toasts.logoutFailed'));
112
+ } finally {
113
+ setActionLoading(null);
114
+ setPendingLogoutSessionId(null);
115
+ }
116
+ }, [pendingLogoutSessionId, logout, refreshSessions, t]);
111
117
 
112
118
  // Memoized bulk action items - prevents unnecessary re-renders when dependencies haven't changed
113
119
  const otherSessionsCount = useMemo(() =>
@@ -115,55 +121,55 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
115
121
  [userSessions, activeSessionId]
116
122
  );
117
123
 
118
- // Memoized logout other sessions handler - prevents unnecessary re-renders
119
- const handleLogoutOtherSessions = useCallback(async () => {
124
+ // Confirm logout other sessions - opens prompt
125
+ const confirmLogoutOtherSessions = useCallback(() => {
120
126
  if (otherSessionsCount === 0) {
121
127
  toast.info(t('sessionManagement.toasts.noOtherSessions'));
122
128
  return;
123
129
  }
124
- confirmAction(
125
- t('sessionManagement.confirms.logoutOthers', { count: otherSessionsCount }),
126
- async () => {
127
- try {
128
- setActionLoading('others');
129
- for (const session of userSessions) {
130
- if (session.sessionId !== activeSessionId) {
131
- await logout(session.sessionId);
132
- }
133
- }
134
- await refreshSessions();
135
- toast.success(t('sessionManagement.toasts.logoutOthersSuccess'));
136
- } catch (error) {
137
- if (__DEV__) {
138
- console.error('Logout other sessions failed:', error);
139
- }
140
- toast.error(t('sessionManagement.toasts.logoutOthersFailed'));
141
- } finally {
142
- setActionLoading(null);
130
+ logoutOtherSessionsPrompt.open();
131
+ }, [otherSessionsCount, logoutOtherSessionsPrompt, t]);
132
+
133
+ // Handle logout other sessions - executes after prompt confirmation
134
+ const handleLogoutOtherSessions = useCallback(async () => {
135
+ try {
136
+ setActionLoading('others');
137
+ for (const session of userSessions) {
138
+ if (session.sessionId !== activeSessionId) {
139
+ await logout(session.sessionId);
143
140
  }
144
141
  }
145
- );
146
- }, [otherSessionsCount, userSessions, activeSessionId, logout, refreshSessions]);
142
+ await refreshSessions();
143
+ toast.success(t('sessionManagement.toasts.logoutOthersSuccess'));
144
+ } catch (error) {
145
+ if (__DEV__) {
146
+ console.error('Logout other sessions failed:', error);
147
+ }
148
+ toast.error(t('sessionManagement.toasts.logoutOthersFailed'));
149
+ } finally {
150
+ setActionLoading(null);
151
+ }
152
+ }, [userSessions, activeSessionId, logout, refreshSessions, t]);
153
+
154
+ // Confirm logout all sessions - opens prompt
155
+ const confirmLogoutAllSessions = useCallback(() => {
156
+ logoutAllSessionsPrompt.open();
157
+ }, [logoutAllSessionsPrompt]);
147
158
 
148
- // Memoized logout all sessions handler - prevents unnecessary re-renders
159
+ // Handle logout all sessions - executes after prompt confirmation
149
160
  const handleLogoutAllSessions = useCallback(async () => {
150
- confirmAction(
151
- t('sessionManagement.confirms.logoutAll'),
152
- async () => {
153
- try {
154
- setActionLoading('all');
155
- await logoutAll();
156
- } catch (error) {
157
- if (__DEV__) {
158
- console.error('Logout all sessions failed:', error);
159
- }
160
- toast.error(t('sessionManagement.toasts.logoutAllFailed'));
161
- } finally {
162
- setActionLoading(null);
163
- }
161
+ try {
162
+ setActionLoading('all');
163
+ await logoutAll();
164
+ } catch (error) {
165
+ if (__DEV__) {
166
+ console.error('Logout all sessions failed:', error);
164
167
  }
165
- );
166
- }, [logoutAll]);
168
+ toast.error(t('sessionManagement.toasts.logoutAllFailed'));
169
+ } finally {
170
+ setActionLoading(null);
171
+ }
172
+ }, [logoutAll, t]);
167
173
 
168
174
  // Memoized relative time formatter - prevents function recreation on every render
169
175
  const formatRelative = useCallback((dateString?: string) => {
@@ -240,7 +246,7 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
240
246
  )}
241
247
  </TouchableOpacity>
242
248
  <TouchableOpacity
243
- onPress={() => handleLogoutSession(session.sessionId)}
249
+ onPress={() => confirmLogoutSession(session.sessionId)}
244
250
  style={[styles.sessionPillButton, { backgroundColor: isDarkTheme ? LOGOUT_BUTTON_BG.dark : LOGOUT_BUTTON_BG.light, borderColor: dangerColor }]}
245
251
  disabled={actionLoading === session.sessionId || switchLoading === session.sessionId}
246
252
  >
@@ -260,7 +266,7 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
260
266
  dense: true,
261
267
  };
262
268
  });
263
- }, [userSessions, activeSessionId, formatRelative, successColor, primaryColor, isDarkTheme, switchLoading, actionLoading, handleSwitchSession, handleLogoutSession, dangerColor]);
269
+ }, [userSessions, activeSessionId, formatRelative, successColor, primaryColor, isDarkTheme, switchLoading, actionLoading, handleSwitchSession, confirmLogoutSession, dangerColor]);
264
270
 
265
271
  const bulkItems = useMemo(() => [
266
272
  {
@@ -269,7 +275,7 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
269
275
  iconColor: primaryColor,
270
276
  title: t('sessionManagement.logoutOthers.title'),
271
277
  subtitle: otherSessionsCount === 0 ? t('sessionManagement.logoutOthers.noOtherSessions') : t('sessionManagement.logoutOthers.subtitle'),
272
- onPress: handleLogoutOtherSessions,
278
+ onPress: confirmLogoutOtherSessions,
273
279
  showChevron: false,
274
280
  customContent: actionLoading === 'others' ? <ActivityIndicator size="small" color={primaryColor} /> : undefined,
275
281
  disabled: actionLoading === 'others' || otherSessionsCount === 0,
@@ -281,13 +287,13 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
281
287
  iconColor: dangerColor,
282
288
  title: t('sessionManagement.logoutAll.title'),
283
289
  subtitle: t('sessionManagement.logoutAll.subtitle'),
284
- onPress: handleLogoutAllSessions,
290
+ onPress: confirmLogoutAllSessions,
285
291
  showChevron: false,
286
292
  customContent: actionLoading === 'all' ? <ActivityIndicator size="small" color={dangerColor} /> : undefined,
287
293
  disabled: actionLoading === 'all',
288
294
  dense: true,
289
295
  },
290
- ], [otherSessionsCount, primaryColor, dangerColor, handleLogoutOtherSessions, handleLogoutAllSessions, actionLoading]);
296
+ ], [otherSessionsCount, primaryColor, dangerColor, confirmLogoutOtherSessions, confirmLogoutAllSessions, actionLoading]);
291
297
 
292
298
  if (loading) {
293
299
  return (
@@ -324,11 +330,35 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
324
330
  <Text style={[styles.metaText, { color: '#777', marginBottom: 6 }]}>{t('sessionManagement.lastRefreshed', { time: formatRelative(lastRefreshed.toISOString()) })}</Text>
325
331
  )}
326
332
  <View style={styles.fullBleed}>
327
- <GroupedSection items={sessionItems} />
333
+ <SettingsListGroup>
334
+ {sessionItems.map(item => (
335
+ <SettingsListItem
336
+ key={item.id}
337
+ icon={<SettingsIcon name={item.icon} color={item.iconColor} />}
338
+ title={item.title}
339
+ description={item.subtitle}
340
+ showChevron={false}
341
+ rightElement={item.customContentBelow}
342
+ />
343
+ ))}
344
+ </SettingsListGroup>
328
345
  </View>
329
346
  <View style={styles.sectionSpacer} />
330
347
  <View style={styles.fullBleed}>
331
- <GroupedSection items={bulkItems} />
348
+ <SettingsListGroup>
349
+ {bulkItems.map(item => (
350
+ <SettingsListItem
351
+ key={item.id}
352
+ icon={<SettingsIcon name={item.icon} color={item.iconColor} />}
353
+ title={item.title}
354
+ description={item.subtitle}
355
+ onPress={item.onPress}
356
+ showChevron={false}
357
+ disabled={item.disabled}
358
+ rightElement={item.customContent}
359
+ />
360
+ ))}
361
+ </SettingsListGroup>
332
362
  </View>
333
363
  </>
334
364
  ) : (
@@ -342,6 +372,30 @@ const SessionManagementScreen: React.FC<BaseScreenProps> = ({
342
372
  <Text style={styles.closeButtonText} className="text-primary">{t('sessionManagement.close')}</Text>
343
373
  </TouchableOpacity>
344
374
  </View>
375
+ <Prompt.Basic
376
+ control={logoutSessionPrompt}
377
+ title={t('sessionManagement.confirms.logoutSessionTitle') || 'Log Out Session'}
378
+ description={t('sessionManagement.confirms.logoutSession')}
379
+ onConfirm={handleLogoutSession}
380
+ confirmButtonCta={t('sessionManagement.logout') || 'Log Out'}
381
+ confirmButtonColor='negative'
382
+ />
383
+ <Prompt.Basic
384
+ control={logoutOtherSessionsPrompt}
385
+ title={t('sessionManagement.confirms.logoutOthersTitle') || 'Log Out Other Sessions'}
386
+ description={t('sessionManagement.confirms.logoutOthers', { count: otherSessionsCount })}
387
+ onConfirm={handleLogoutOtherSessions}
388
+ confirmButtonCta={t('sessionManagement.logoutOthers.title') || 'Log Out Others'}
389
+ confirmButtonColor='negative'
390
+ />
391
+ <Prompt.Basic
392
+ control={logoutAllSessionsPrompt}
393
+ title={t('sessionManagement.confirms.logoutAllTitle') || 'Log Out All Sessions'}
394
+ description={t('sessionManagement.confirms.logoutAll')}
395
+ onConfirm={handleLogoutAllSessions}
396
+ confirmButtonCta={t('sessionManagement.logoutAll.title') || 'Log Out All'}
397
+ confirmButtonColor='negative'
398
+ />
345
399
  </View>
346
400
  );
347
401
  };
@@ -1,8 +1,9 @@
1
1
  import type React from 'react';
2
- import { View, Text, StyleSheet, ScrollView, TouchableOpacity, Image, Linking } from 'react-native';
3
- import { Ionicons } from '@expo/vector-icons';
2
+ import { View, StyleSheet, ScrollView, Linking } from 'react-native';
4
3
  import type { BaseScreenProps } from '../types/navigation';
5
- import { Header, GroupedSection } from '../components';
4
+ import { Header } from '../components';
5
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
6
+ import { SettingsIcon } from '../components/SettingsIcon';
6
7
  import { useTheme } from '@oxyhq/bloom/theme';
7
8
  import { useI18n } from '../hooks/useI18n';
8
9
 
@@ -37,18 +38,6 @@ const UserLinksScreen: React.FC<UserLinksScreenProps> = ({
37
38
  }
38
39
  };
39
40
 
40
- const groupedItems = links.map((link) => ({
41
- id: link.id,
42
- icon: link.image ? undefined : 'link',
43
- iconColor: '#32D74B',
44
- image: link.image || undefined,
45
- imageSize: 40,
46
- title: link.title || link.url,
47
- subtitle: link.description || link.url,
48
- onPress: () => handleLinkPress(link.url),
49
- multiRow: true,
50
- }));
51
-
52
41
  return (
53
42
  <View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
54
43
  <Header
@@ -59,14 +48,17 @@ const UserLinksScreen: React.FC<UserLinksScreenProps> = ({
59
48
  />
60
49
 
61
50
  <ScrollView style={styles.content}>
62
- <View style={styles.section}>
63
- <Text style={styles.sectionTitle} className="text-foreground">{t('userLinks.title')}</Text>
64
-
65
- <GroupedSection
66
- items={groupedItems}
67
-
68
- />
69
- </View>
51
+ <SettingsListGroup title={t('userLinks.title')}>
52
+ {links.map((link) => (
53
+ <SettingsListItem
54
+ key={link.id}
55
+ icon={<SettingsIcon name="link" color="#32D74B" />}
56
+ title={link.title || link.url}
57
+ description={link.description || link.url}
58
+ onPress={() => handleLinkPress(link.url)}
59
+ />
60
+ ))}
61
+ </SettingsListGroup>
70
62
  </ScrollView>
71
63
  </View>
72
64
  );
@@ -81,15 +73,6 @@ const styles = StyleSheet.create({
81
73
  flex: 1,
82
74
  padding: 16,
83
75
  },
84
- section: {
85
- marginBottom: 24,
86
- },
87
- sectionTitle: {
88
- fontSize: 16,
89
- fontWeight: '600',
90
- color: '#333',
91
- marginBottom: 12,
92
- },
93
76
  });
94
77
 
95
78
  export default UserLinksScreen;
@@ -10,7 +10,7 @@ import { useAuthStore } from '../stores/authStore';
10
10
  import { useTheme } from '@oxyhq/bloom/theme';
11
11
  import { fontFamilies } from '../styles/fonts';
12
12
  import { normalizeTheme } from '../utils/themeUtils';
13
- import GroupedPillButtons from '../components/internal/GroupedPillButtons';
13
+ import { Button } from '@oxyhq/bloom/button';
14
14
  import { useI18n } from '../hooks/useI18n';
15
15
  import { useOxy } from '../context/OxyContext';
16
16
  import { useUpdateProfile } from '../hooks/mutations/useAccountMutations';
@@ -177,30 +177,56 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: any }> = ({
177
177
  }, [navigate, updateProfileMutation, oxyServices, currentStep, avatarStepIndex, animateToStepCallback, t]);
178
178
 
179
179
  const step = steps[currentStep];
180
- const pillButtons = useMemo(() => {
180
+ const renderActionButtons = useCallback(() => {
181
181
  if (currentStep === totalSteps - 1) {
182
- return [
183
- { text: t('welcomeNew.actions.back') || 'Back', onPress: prevStep, icon: 'arrow-back', variant: 'transparent' },
184
- { text: t('welcomeNew.actions.enter') || 'Enter', onPress: finish, icon: 'log-in-outline', variant: 'primary' },
185
- ];
182
+ return (
183
+ <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
184
+ <Button variant="secondary" onPress={prevStep} size="small" icon={<Ionicons name="arrow-back" size={16} />}>
185
+ {t('welcomeNew.actions.back') || 'Back'}
186
+ </Button>
187
+ <Button variant="primary" onPress={finish} size="small" icon={<Ionicons name="log-in-outline" size={16} />} iconPosition="right">
188
+ {t('welcomeNew.actions.enter') || 'Enter'}
189
+ </Button>
190
+ </View>
191
+ );
186
192
  }
187
193
  if (currentStep === 0) {
188
- const arr: any[] = [];
189
- if (avatarStepIndex > 0) arr.push({ text: t('welcomeNew.actions.skip') || 'Skip', onPress: skipToAvatar, icon: 'play-skip-forward', variant: 'transparent' });
190
- arr.push({ text: t('welcomeNew.actions.next') || 'Next', onPress: nextStep, icon: 'arrow-forward', variant: 'primary' });
191
- return arr;
194
+ return (
195
+ <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
196
+ {avatarStepIndex > 0 && (
197
+ <Button variant="secondary" onPress={skipToAvatar} size="small" icon={<Ionicons name="play-skip-forward" size={16} />}>
198
+ {t('welcomeNew.actions.skip') || 'Skip'}
199
+ </Button>
200
+ )}
201
+ <Button variant="primary" onPress={nextStep} size="small" icon={<Ionicons name="arrow-forward" size={16} />} iconPosition="right">
202
+ {t('welcomeNew.actions.next') || 'Next'}
203
+ </Button>
204
+ </View>
205
+ );
192
206
  }
193
207
  if (step.showAvatar) {
194
- return [
195
- { text: t('welcomeNew.actions.back') || 'Back', onPress: prevStep, icon: 'arrow-back', variant: 'transparent' },
196
- { text: avatarUri ? (t('welcomeNew.actions.continue') || 'Continue') : (t('welcomeNew.actions.skip') || 'Skip'), onPress: nextStep, icon: 'arrow-forward', variant: 'primary' },
197
- ];
208
+ return (
209
+ <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
210
+ <Button variant="secondary" onPress={prevStep} size="small" icon={<Ionicons name="arrow-back" size={16} />}>
211
+ {t('welcomeNew.actions.back') || 'Back'}
212
+ </Button>
213
+ <Button variant="primary" onPress={nextStep} size="small" icon={<Ionicons name="arrow-forward" size={16} />} iconPosition="right">
214
+ {avatarUri ? (t('welcomeNew.actions.continue') || 'Continue') : (t('welcomeNew.actions.skip') || 'Skip')}
215
+ </Button>
216
+ </View>
217
+ );
198
218
  }
199
- return [
200
- { text: t('welcomeNew.actions.back') || 'Back', onPress: prevStep, icon: 'arrow-back', variant: 'transparent' },
201
- { text: t('welcomeNew.actions.next') || 'Next', onPress: nextStep, icon: 'arrow-forward', variant: 'primary' },
202
- ];
203
- }, [currentStep, totalSteps, prevStep, nextStep, finish, skipToAvatar, avatarStepIndex, step.showAvatar, avatarUri]);
219
+ return (
220
+ <View style={{ flexDirection: 'row', gap: 8, justifyContent: 'flex-end' }}>
221
+ <Button variant="secondary" onPress={prevStep} size="small" icon={<Ionicons name="arrow-back" size={16} />}>
222
+ {t('welcomeNew.actions.back') || 'Back'}
223
+ </Button>
224
+ <Button variant="primary" onPress={nextStep} size="small" icon={<Ionicons name="arrow-forward" size={16} />} iconPosition="right">
225
+ {t('welcomeNew.actions.next') || 'Next'}
226
+ </Button>
227
+ </View>
228
+ );
229
+ }, [currentStep, totalSteps, prevStep, nextStep, finish, skipToAvatar, avatarStepIndex, step.showAvatar, avatarUri, t]);
204
230
 
205
231
  return (
206
232
  <View style={styles.container}>
@@ -247,7 +273,7 @@ const WelcomeNewUserScreen: React.FC<BaseScreenProps & { newUser?: any }> = ({
247
273
  </View>
248
274
  )}
249
275
  <View style={styles.sectionSpacing}>
250
- <GroupedPillButtons buttons={pillButtons} colors={colors} />
276
+ {renderActionButtons()}
251
277
  </View>
252
278
  </View>
253
279
  </Animated.View>
@@ -2,7 +2,8 @@ import React, { useState, useMemo, useCallback } from 'react';
2
2
  import { View, Text, StyleSheet, ScrollView, Platform, TextInput, LayoutAnimation } from 'react-native';
3
3
  import type { BaseScreenProps } from '../../types/navigation';
4
4
  import { Ionicons } from '@expo/vector-icons';
5
- import { Header, GroupedItem } from '../../components';
5
+ import { Header } from '../../components';
6
+ import { SettingsListItem } from '@oxyhq/bloom/settings-list';
6
7
  import { useI18n } from '../../hooks/useI18n';
7
8
  import { useTheme } from '@oxyhq/bloom/theme';
8
9
  import { normalizeColorScheme } from '../../utils/themeUtils';
@@ -86,18 +87,15 @@ const KarmaFAQScreen: React.FC<BaseScreenProps> = ({ goBack, theme }) => {
86
87
  <View style={styles.groupedSectionContainer}>
87
88
  {filteredFaqs.map((faq, idx) => {
88
89
  const isExpanded = expanded === faq.id;
89
- const isFirst = idx === 0;
90
90
  const isLast = idx === filteredFaqs.length - 1;
91
91
 
92
92
  return (
93
93
  <View key={faq.id} style={[styles.faqItemWrapper, { marginBottom: idx < filteredFaqs.length - 1 ? 4 : 0 }]}>
94
- <GroupedItem
94
+ <SettingsListItem
95
95
  title={faq.q}
96
96
  onPress={() => handleToggle(faq.id)}
97
- isFirst={isFirst}
98
- isLast={isLast && !isExpanded}
99
97
  showChevron={false}
100
- customContent={
98
+ rightElement={
101
99
  <Ionicons
102
100
  name={isExpanded ? 'chevron-up' : 'chevron-down'}
103
101
  size={20}
@@ -1,4 +1,3 @@
1
- import { Alert } from 'react-native';
2
1
  import type { FileMetadata } from '@oxyhq/core';
3
2
  import { File as ExpoFile } from 'expo-file-system';
4
3
  import { toast } from '../../lib/sonner';
@@ -39,35 +38,6 @@ export function getFileIcon(contentType: string): string {
39
38
  return 'document-outline';
40
39
  }
41
40
 
42
- /**
43
- * Unified confirmation dialog - uses Alert.alert for all platforms
44
- */
45
- export function confirmAction(
46
- message: string,
47
- title?: string,
48
- confirmText = 'OK',
49
- cancelText = 'Cancel'
50
- ): Promise<boolean> {
51
- return new Promise((resolve) => {
52
- Alert.alert(
53
- title || 'Confirm',
54
- message,
55
- [
56
- {
57
- text: cancelText,
58
- style: 'cancel',
59
- onPress: () => resolve(false),
60
- },
61
- {
62
- text: confirmText,
63
- onPress: () => resolve(true),
64
- },
65
- ],
66
- { cancelable: true, onDismiss: () => resolve(false) }
67
- );
68
- });
69
- }
70
-
71
41
  /**
72
42
  * Convert DocumentPicker asset to File object
73
43
  * Handles both web (native File API) and mobile (URI-based) file sources