@oxyhq/services 6.9.45 → 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 (255) hide show
  1. package/lib/commonjs/ui/components/OxyProvider.js +6 -5
  2. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  3. package/lib/commonjs/ui/components/SignInModal.js +271 -102
  4. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  5. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +24 -15
  6. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  7. package/lib/commonjs/ui/components/index.js +0 -35
  8. package/lib/commonjs/ui/components/index.js.map +1 -1
  9. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js +26 -13
  10. package/lib/commonjs/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  11. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js +50 -28
  12. package/lib/commonjs/ui/components/payment/PaymentMethodStep.js.map +1 -1
  13. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js +83 -48
  14. package/lib/commonjs/ui/components/payment/PaymentReviewStep.js.map +1 -1
  15. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js +11 -10
  16. package/lib/commonjs/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  17. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js +38 -23
  18. package/lib/commonjs/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  19. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +4 -3
  20. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  21. package/lib/commonjs/ui/screens/AccountCenterScreen.js +1 -3
  22. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  23. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +47 -63
  24. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  25. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +90 -68
  26. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  27. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +72 -63
  28. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  29. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +5 -5
  30. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  31. package/lib/commonjs/ui/screens/FeedbackScreen.js +57 -51
  32. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  33. package/lib/commonjs/ui/screens/FileManagementScreen.js +25 -36
  34. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  35. package/lib/commonjs/ui/screens/HistoryViewScreen.js +31 -31
  36. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  37. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +15 -8
  38. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  39. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +60 -54
  40. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +12 -9
  42. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +159 -190
  44. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +20 -22
  46. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +16 -17
  48. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/SessionManagementScreen.js +26 -4
  50. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/UserLinksScreen.js +13 -29
  52. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +110 -52
  54. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +3 -5
  56. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  57. package/lib/module/ui/components/OxyProvider.js +6 -5
  58. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  59. package/lib/module/ui/components/SignInModal.js +271 -100
  60. package/lib/module/ui/components/SignInModal.js.map +1 -1
  61. package/lib/module/ui/components/fileManagement/FileViewer.js +24 -15
  62. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  63. package/lib/module/ui/components/index.js +0 -5
  64. package/lib/module/ui/components/index.js.map +1 -1
  65. package/lib/module/ui/components/payment/PaymentDetailsStep.js +26 -13
  66. package/lib/module/ui/components/payment/PaymentDetailsStep.js.map +1 -1
  67. package/lib/module/ui/components/payment/PaymentMethodStep.js +49 -26
  68. package/lib/module/ui/components/payment/PaymentMethodStep.js.map +1 -1
  69. package/lib/module/ui/components/payment/PaymentReviewStep.js +84 -48
  70. package/lib/module/ui/components/payment/PaymentReviewStep.js.map +1 -1
  71. package/lib/module/ui/components/payment/PaymentSuccessStep.js +11 -9
  72. package/lib/module/ui/components/payment/PaymentSuccessStep.js.map +1 -1
  73. package/lib/module/ui/components/payment/PaymentSummaryStep.js +38 -22
  74. package/lib/module/ui/components/payment/PaymentSummaryStep.js.map +1 -1
  75. package/lib/module/ui/context/hooks/useAuthOperations.js +4 -3
  76. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  77. package/lib/module/ui/screens/AccountCenterScreen.js +1 -3
  78. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  79. package/lib/module/ui/screens/AccountOverviewScreen.js +46 -62
  80. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  81. package/lib/module/ui/screens/AccountSettingsScreen.js +90 -68
  82. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  83. package/lib/module/ui/screens/AccountSwitcherScreen.js +73 -64
  84. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  85. package/lib/module/ui/screens/AccountVerificationScreen.js +6 -6
  86. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  87. package/lib/module/ui/screens/FeedbackScreen.js +48 -42
  88. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  89. package/lib/module/ui/screens/FileManagementScreen.js +25 -36
  90. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  91. package/lib/module/ui/screens/HistoryViewScreen.js +32 -32
  92. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  93. package/lib/module/ui/screens/LanguageSelectorScreen.js +16 -9
  94. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  95. package/lib/module/ui/screens/LegalDocumentsScreen.js +61 -55
  96. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  97. package/lib/module/ui/screens/PaymentGatewayScreen.js +12 -9
  98. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  99. package/lib/module/ui/screens/PrivacySettingsScreen.js +161 -192
  100. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  101. package/lib/module/ui/screens/SavesCollectionsScreen.js +21 -23
  102. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  103. package/lib/module/ui/screens/SearchSettingsScreen.js +17 -18
  104. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  105. package/lib/module/ui/screens/SessionManagementScreen.js +27 -5
  106. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  107. package/lib/module/ui/screens/UserLinksScreen.js +15 -31
  108. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  109. package/lib/module/ui/screens/WelcomeNewUserScreen.js +110 -52
  110. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  111. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +4 -6
  112. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  113. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  114. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  115. package/lib/typescript/commonjs/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  116. package/lib/typescript/commonjs/ui/components/index.d.ts +0 -5
  117. package/lib/typescript/commonjs/ui/components/index.d.ts.map +1 -1
  118. package/lib/typescript/commonjs/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  119. package/lib/typescript/commonjs/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  120. package/lib/typescript/commonjs/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  121. package/lib/typescript/commonjs/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  122. package/lib/typescript/commonjs/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  123. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  124. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts +1 -1
  125. package/lib/typescript/commonjs/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  126. package/lib/typescript/commonjs/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  127. package/lib/typescript/commonjs/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  128. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  129. package/lib/typescript/commonjs/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  130. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  131. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  132. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  133. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  134. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  135. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  136. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  137. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  138. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  139. package/lib/typescript/commonjs/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  140. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  141. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  142. package/lib/typescript/commonjs/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  143. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  144. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  145. package/lib/typescript/module/ui/components/fileManagement/FileViewer.d.ts.map +1 -1
  146. package/lib/typescript/module/ui/components/index.d.ts +0 -5
  147. package/lib/typescript/module/ui/components/index.d.ts.map +1 -1
  148. package/lib/typescript/module/ui/components/payment/PaymentDetailsStep.d.ts.map +1 -1
  149. package/lib/typescript/module/ui/components/payment/PaymentMethodStep.d.ts.map +1 -1
  150. package/lib/typescript/module/ui/components/payment/PaymentReviewStep.d.ts.map +1 -1
  151. package/lib/typescript/module/ui/components/payment/PaymentSuccessStep.d.ts.map +1 -1
  152. package/lib/typescript/module/ui/components/payment/PaymentSummaryStep.d.ts.map +1 -1
  153. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  154. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts +1 -1
  155. package/lib/typescript/module/ui/navigation/bottomSheetManager.d.ts.map +1 -1
  156. package/lib/typescript/module/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  157. package/lib/typescript/module/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  158. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  159. package/lib/typescript/module/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  160. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  161. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  162. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  163. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  164. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  165. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  166. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  167. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  168. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  169. package/lib/typescript/module/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  170. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  171. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  172. package/lib/typescript/module/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  173. package/package.json +2 -2
  174. package/src/ui/components/OxyProvider.tsx +6 -5
  175. package/src/ui/components/SignInModal.tsx +186 -42
  176. package/src/ui/components/fileManagement/FileViewer.tsx +25 -15
  177. package/src/ui/components/index.ts +0 -5
  178. package/src/ui/components/payment/PaymentDetailsStep.tsx +16 -19
  179. package/src/ui/components/payment/PaymentMethodStep.tsx +33 -35
  180. package/src/ui/components/payment/PaymentReviewStep.tsx +63 -67
  181. package/src/ui/components/payment/PaymentSuccessStep.tsx +4 -12
  182. package/src/ui/components/payment/PaymentSummaryStep.tsx +26 -33
  183. package/src/ui/context/hooks/useAuthOperations.ts +4 -3
  184. package/src/ui/screens/AccountCenterScreen.tsx +2 -3
  185. package/src/ui/screens/AccountOverviewScreen.tsx +44 -65
  186. package/src/ui/screens/AccountSettingsScreen.tsx +121 -149
  187. package/src/ui/screens/AccountSwitcherScreen.tsx +94 -115
  188. package/src/ui/screens/AccountVerificationScreen.tsx +10 -9
  189. package/src/ui/screens/FeedbackScreen.tsx +50 -38
  190. package/src/ui/screens/FileManagementScreen.tsx +26 -34
  191. package/src/ui/screens/HistoryViewScreen.tsx +29 -10
  192. package/src/ui/screens/LanguageSelectorScreen.tsx +19 -7
  193. package/src/ui/screens/LegalDocumentsScreen.tsx +46 -63
  194. package/src/ui/screens/PaymentGatewayScreen.tsx +11 -12
  195. package/src/ui/screens/PrivacySettingsScreen.tsx +81 -193
  196. package/src/ui/screens/SavesCollectionsScreen.tsx +23 -23
  197. package/src/ui/screens/SearchSettingsScreen.tsx +11 -19
  198. package/src/ui/screens/SessionManagementScreen.tsx +29 -3
  199. package/src/ui/screens/UserLinksScreen.tsx +15 -32
  200. package/src/ui/screens/WelcomeNewUserScreen.tsx +46 -20
  201. package/src/ui/screens/karma/KarmaFAQScreen.tsx +4 -6
  202. package/lib/commonjs/ui/components/GroupedItem.js +0 -138
  203. package/lib/commonjs/ui/components/GroupedItem.js.map +0 -1
  204. package/lib/commonjs/ui/components/GroupedSection.js +0 -41
  205. package/lib/commonjs/ui/components/GroupedSection.js.map +0 -1
  206. package/lib/commonjs/ui/components/Section.js +0 -39
  207. package/lib/commonjs/ui/components/Section.js.map +0 -1
  208. package/lib/commonjs/ui/components/SectionTitle.js +0 -29
  209. package/lib/commonjs/ui/components/SectionTitle.js.map +0 -1
  210. package/lib/commonjs/ui/components/SettingRow.js +0 -96
  211. package/lib/commonjs/ui/components/SettingRow.js.map +0 -1
  212. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +0 -208
  213. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +0 -1
  214. package/lib/module/ui/components/GroupedItem.js +0 -135
  215. package/lib/module/ui/components/GroupedItem.js.map +0 -1
  216. package/lib/module/ui/components/GroupedSection.js +0 -37
  217. package/lib/module/ui/components/GroupedSection.js.map +0 -1
  218. package/lib/module/ui/components/Section.js +0 -34
  219. package/lib/module/ui/components/Section.js.map +0 -1
  220. package/lib/module/ui/components/SectionTitle.js +0 -25
  221. package/lib/module/ui/components/SectionTitle.js.map +0 -1
  222. package/lib/module/ui/components/SettingRow.js +0 -91
  223. package/lib/module/ui/components/SettingRow.js.map +0 -1
  224. package/lib/module/ui/components/internal/GroupedPillButtons.js +0 -204
  225. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +0 -1
  226. package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts +0 -24
  227. package/lib/typescript/commonjs/ui/components/GroupedItem.d.ts.map +0 -1
  228. package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts +0 -30
  229. package/lib/typescript/commonjs/ui/components/GroupedSection.d.ts.map +0 -1
  230. package/lib/typescript/commonjs/ui/components/Section.d.ts +0 -12
  231. package/lib/typescript/commonjs/ui/components/Section.d.ts.map +0 -1
  232. package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts +0 -10
  233. package/lib/typescript/commonjs/ui/components/SectionTitle.d.ts.map +0 -1
  234. package/lib/typescript/commonjs/ui/components/SettingRow.d.ts +0 -20
  235. package/lib/typescript/commonjs/ui/components/SettingRow.d.ts.map +0 -1
  236. package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts +0 -24
  237. package/lib/typescript/commonjs/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
  238. package/lib/typescript/module/ui/components/GroupedItem.d.ts +0 -24
  239. package/lib/typescript/module/ui/components/GroupedItem.d.ts.map +0 -1
  240. package/lib/typescript/module/ui/components/GroupedSection.d.ts +0 -30
  241. package/lib/typescript/module/ui/components/GroupedSection.d.ts.map +0 -1
  242. package/lib/typescript/module/ui/components/Section.d.ts +0 -12
  243. package/lib/typescript/module/ui/components/Section.d.ts.map +0 -1
  244. package/lib/typescript/module/ui/components/SectionTitle.d.ts +0 -10
  245. package/lib/typescript/module/ui/components/SectionTitle.d.ts.map +0 -1
  246. package/lib/typescript/module/ui/components/SettingRow.d.ts +0 -20
  247. package/lib/typescript/module/ui/components/SettingRow.d.ts.map +0 -1
  248. package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts +0 -24
  249. package/lib/typescript/module/ui/components/internal/GroupedPillButtons.d.ts.map +0 -1
  250. package/src/ui/components/GroupedItem.tsx +0 -161
  251. package/src/ui/components/GroupedSection.tsx +0 -60
  252. package/src/ui/components/Section.tsx +0 -42
  253. package/src/ui/components/SectionTitle.tsx +0 -27
  254. package/src/ui/components/SettingRow.tsx +0 -105
  255. package/src/ui/components/internal/GroupedPillButtons.tsx +0 -253
@@ -12,7 +12,8 @@ import type { BaseScreenProps } from '../types/navigation';
12
12
  import { toast } from '../../lib/sonner';
13
13
  import * as Prompt from '@oxyhq/bloom/prompt';
14
14
  import { usePromptControl } from '@oxyhq/bloom/prompt';
15
- import { Header, Section } from '../components';
15
+ import { Header } from '../components';
16
+ import { SettingsListGroup } from '@oxyhq/bloom/settings-list';
16
17
  import { useI18n } from '../hooks/useI18n';
17
18
  import { useTheme } from '@oxyhq/bloom/theme';
18
19
  import { useOxy } from '../context/OxyContext';
@@ -86,13 +87,13 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
86
87
  />
87
88
 
88
89
  <ScrollView style={styles.content}>
89
- <Section isFirst={true}>
90
+ <SettingsListGroup>
90
91
  <Text style={styles.description} className="text-muted-foreground">
91
92
  {t('accountVerification.description') || 'Request a verified badge for your account. Verified accounts help establish authenticity and credibility.'}
92
93
  </Text>
93
- </Section>
94
+ </SettingsListGroup>
94
95
 
95
- <Section title={t('accountVerification.sections.request') || 'VERIFICATION REQUEST'} >
96
+ <SettingsListGroup title={t('accountVerification.sections.request') || 'VERIFICATION REQUEST'}>
96
97
  <View style={styles.inputGroup}>
97
98
  <Text style={styles.label} className="text-foreground">
98
99
  {t('accountVerification.reasonLabel') || 'Reason for Verification *'}
@@ -134,9 +135,9 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
134
135
  editable={!isSubmitting}
135
136
  />
136
137
  </View>
137
- </Section>
138
+ </SettingsListGroup>
138
139
 
139
- <Section >
140
+ <SettingsListGroup>
140
141
  <TouchableOpacity
141
142
  style={styles.submitButton}
142
143
  className={isSubmitting ? 'bg-muted-foreground' : 'bg-primary'}
@@ -151,13 +152,13 @@ const AccountVerificationScreen: React.FC<BaseScreenProps> = ({
151
152
  </Text>
152
153
  )}
153
154
  </TouchableOpacity>
154
- </Section>
155
+ </SettingsListGroup>
155
156
 
156
- <Section >
157
+ <SettingsListGroup>
157
158
  <Text style={styles.note} className="text-muted-foreground">
158
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.'}
159
160
  </Text>
160
- </Section>
161
+ </SettingsListGroup>
161
162
  </ScrollView>
162
163
  <Prompt.Basic
163
164
  control={successPrompt}
@@ -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
 
@@ -37,7 +37,7 @@ import type { FileMetadata } from '@oxyhq/core';
37
37
  import { useFileStore, useFiles, useUploading as useUploadingStore, useUploadAggregateProgress, useDeleting as useDeletingStore } from '../stores/fileStore';
38
38
  import Header from '../components/Header';
39
39
  import JustifiedPhotoGrid from '../components/photogrid/JustifiedPhotoGrid';
40
- import { GroupedSection } from '../components';
40
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
41
41
  import { useTheme } from '@oxyhq/bloom/theme';
42
42
  import { useOxy } from '../context/OxyContext';
43
43
  import { useI18n } from '../hooks/useI18n';
@@ -1360,8 +1360,8 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1360
1360
  );
1361
1361
  };
1362
1362
 
1363
- // GroupedSection-based file items (for 'all' view) replacing legacy flat list look
1364
- // 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
1365
1365
  const groupedFileItems: any[] = useMemo(() => {
1366
1366
  // filteredFiles is already sorted, so just use it directly
1367
1367
  const sortedFiles = filteredFiles;
@@ -1378,11 +1378,11 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1378
1378
  const hasPreview = isImage || isPDF || isVideo;
1379
1379
  const isSelected = selectedIds.has(file.id);
1380
1380
 
1381
- // Create customIcon for preview thumbnails (36x36 to match GroupedItem iconContainer)
1382
- let customIcon: React.ReactNode | undefined;
1381
+ // Create icon for preview thumbnails (36x36)
1382
+ let fileIcon: React.ReactNode | undefined;
1383
1383
  if (hasPreview) {
1384
1384
  if (isImage) {
1385
- customIcon = (
1385
+ fileIcon = (
1386
1386
  <View style={{ width: 36, height: 36, borderRadius: 18, overflow: 'hidden' }}>
1387
1387
  <ExpoImage
1388
1388
  source={{ uri: getSafeDownloadUrlCallback(file, 'thumb') }}
@@ -1398,7 +1398,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1398
1398
  </View>
1399
1399
  );
1400
1400
  } else if (isVideo) {
1401
- customIcon = (
1401
+ fileIcon = (
1402
1402
  <View style={{ width: 36, height: 36, borderRadius: 18, overflow: 'hidden', backgroundColor: '#000000', position: 'relative' }}>
1403
1403
  <ExpoImage
1404
1404
  source={{ uri: getSafeDownloadUrlCallback(file, 'thumb') }}
@@ -1417,7 +1417,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1417
1417
  </View>
1418
1418
  );
1419
1419
  } else if (isPDF) {
1420
- customIcon = (
1420
+ fileIcon = (
1421
1421
  <View style={{ width: 36, height: 36, borderRadius: 18, alignItems: 'center', justifyContent: 'center', backgroundColor: '#FF6B6B20' }}>
1422
1422
  <Ionicons name="document" size={20} color={colors.primary} />
1423
1423
  </View>
@@ -1427,12 +1427,9 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1427
1427
 
1428
1428
  return {
1429
1429
  id: file.id,
1430
- customIcon: customIcon,
1431
- icon: !hasPreview ? getFileIcon(file.contentType) : undefined,
1432
- iconColor: colors.primary,
1430
+ icon: fileIcon ?? (!hasPreview ? <Ionicons name={getFileIcon(file.contentType)} size={20} color={colors.primary} /> : undefined),
1433
1431
  title: file.filename,
1434
- subtitle: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
1435
- theme: theme as 'light' | 'dark',
1432
+ description: `${formatFileSize(file.length)} • ${new Date(file.uploadDate).toLocaleDateString()}`,
1436
1433
  onPress: () => {
1437
1434
  // Support selection in regular mode with long press or if already selecting
1438
1435
  if (!selectMode && selectedIds.size > 0) {
@@ -1442,20 +1439,8 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1442
1439
  handleFileOpen(file);
1443
1440
  }
1444
1441
  },
1445
- onLongPress: !selectMode ? () => {
1446
- // Enable selection mode on long press
1447
- if (selectedIds.size === 0) {
1448
- setSelectedIds(new Set([file.id]));
1449
- } else {
1450
- toggleSelect(file);
1451
- }
1452
- } : undefined,
1453
- showChevron: false,
1454
- dense: true,
1455
- multiRow: !!file.metadata?.description,
1456
- selected: (selectMode || selectedIds.size > 0) && isSelected,
1457
1442
  // Hide action buttons when selecting (in selectMode or bulk operations mode)
1458
- customContent: (!selectMode && selectedIds.size === 0) ? (
1443
+ rightElement: (!selectMode && selectedIds.size === 0) ? (
1459
1444
  <View style={fileManagementStyles.groupedActions}>
1460
1445
  {(isImage || isVideo || file.contentType.includes('pdf')) && (
1461
1446
  <TouchableOpacity
@@ -1484,11 +1469,6 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1484
1469
  </TouchableOpacity>
1485
1470
  </View>
1486
1471
  ) : undefined,
1487
- customContentBelow: file.metadata?.description ? (
1488
- <Text style={[fileManagementStyles.groupedDescription, { color: bloomTheme.isDark ? '#AAAAAA' : '#666666' }]} numberOfLines={2}>
1489
- {file.metadata.description}
1490
- </Text>
1491
- ) : undefined,
1492
1472
  };
1493
1473
  });
1494
1474
  }, [filteredFiles, theme, deleting, handleFileDownload, confirmFileDelete, handleFileOpen, getSafeDownloadUrlCallback, selectMode, selectedIds]);
@@ -1836,7 +1816,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1836
1816
  );
1837
1817
  };
1838
1818
 
1839
- // Skeleton file item matching GroupedSection structure
1819
+ // Skeleton file item matching SettingsListItem structure
1840
1820
  const SkeletonFileItem = ({ index }: { index: number }) => (
1841
1821
  <View
1842
1822
  style={[
@@ -1908,7 +1888,7 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
1908
1888
  ))}
1909
1889
  </View>
1910
1890
 
1911
- {/* File List Skeleton - Matching GroupedSection */}
1891
+ {/* File List Skeleton - Matching SettingsListItem */}
1912
1892
  <ScrollView
1913
1893
  style={fileManagementStyles.scrollView}
1914
1894
  contentContainerStyle={fileManagementStyles.scrollContainer}
@@ -2240,7 +2220,19 @@ const FileManagementScreen: React.FC<FileManagementScreenProps> = ({
2240
2220
  </View>
2241
2221
  ) : filteredFiles.length === 0 ? renderEmptyState() : (
2242
2222
  <>
2243
- <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>
2244
2236
  {paging.loadingMore && (
2245
2237
  <View style={fileManagementStyles.loadingMoreBar}>
2246
2238
  <ActivityIndicator size="small" color={colors.primary} />
@@ -2,7 +2,9 @@ import React, { useState, useCallback } from 'react';
2
2
  import { View, StyleSheet, ScrollView } from 'react-native';
3
3
  import type { BaseScreenProps } from '../types/navigation';
4
4
  import { toast } from '../../lib/sonner';
5
- import { Header, Section, GroupedSection, LoadingState, EmptyState } from '../components';
5
+ import { Header, LoadingState, EmptyState } from '../components';
6
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
7
+ import { SettingsIcon } from '../components/SettingsIcon';
6
8
  import { useI18n } from '../hooks/useI18n';
7
9
  import { useTheme } from '@oxyhq/bloom/theme';
8
10
  import { useColorScheme } from '../hooks/useColorScheme';
@@ -93,17 +95,34 @@ const HistoryViewScreen: React.FC<BaseScreenProps> = ({ onClose, theme, goBack }
93
95
  <View style={[styles.container, { backgroundColor: bloomTheme.colors.background }]}>
94
96
  <Header title={t('history.title') || 'History'} onBack={goBack || onClose} variant="minimal" elevation="subtle" />
95
97
  <ScrollView style={styles.content}>
96
- <Section title={t('history.actions') || 'Actions'} isFirst={true}>
97
- <GroupedSection items={[
98
- { id: 'delete-last-15', icon: 'clock-outline', iconColor: themeColors.iconStorage, title: t('history.deleteLast15Minutes.title') || 'Delete Last 15 Minutes', subtitle: t('history.deleteLast15Minutes.subtitle') || 'Remove recent history entries', onPress: () => deleteLast15Prompt.open(), disabled: isDeleting || history.length === 0 },
99
- { id: 'clear-all', icon: 'delete-outline', iconColor: themeColors.iconSharing, title: t('history.clearAll.title') || 'Clear All History', subtitle: t('history.clearAll.subtitle') || 'Remove all history entries', onPress: () => clearAllPrompt.open(), disabled: isDeleting || history.length === 0 },
100
- ]} />
101
- </Section>
102
- <Section title={t('history.recent') || 'Recent History'}>
98
+ <SettingsListGroup title={t('history.actions') || 'Actions'}>
99
+ <SettingsListItem
100
+ icon={<SettingsIcon name="clock-outline" color={themeColors.iconStorage} />}
101
+ title={t('history.deleteLast15Minutes.title') || 'Delete Last 15 Minutes'}
102
+ description={t('history.deleteLast15Minutes.subtitle') || 'Remove recent history entries'}
103
+ onPress={() => deleteLast15Prompt.open()}
104
+ disabled={isDeleting || history.length === 0}
105
+ />
106
+ <SettingsListItem
107
+ icon={<SettingsIcon name="delete-outline" color={themeColors.iconSharing} />}
108
+ title={t('history.clearAll.title') || 'Clear All History'}
109
+ description={t('history.clearAll.subtitle') || 'Remove all history entries'}
110
+ onPress={() => clearAllPrompt.open()}
111
+ disabled={isDeleting || history.length === 0}
112
+ />
113
+ </SettingsListGroup>
114
+ <SettingsListGroup title={t('history.recent') || 'Recent History'}>
103
115
  {isLoading ? <LoadingState message={t('history.loading') || 'Loading history...'} color={bloomTheme.colors.text} />
104
116
  : history.length === 0 ? <EmptyState message={t('history.empty') || 'No history yet'} textColor={bloomTheme.colors.text} />
105
- : <GroupedSection items={history.map(item => ({ id: item.id, icon: item.type === 'search' ? 'search' : 'globe', iconColor: item.type === 'search' ? themeColors.iconSecurity : themeColors.iconPersonalInfo, title: item.query, subtitle: formatTime(item.timestamp) }))} />}
106
- </Section>
117
+ : history.map(item => (
118
+ <SettingsListItem
119
+ key={item.id}
120
+ icon={<SettingsIcon name={item.type === 'search' ? 'magnify' : 'earth'} color={item.type === 'search' ? themeColors.iconSecurity : themeColors.iconPersonalInfo} />}
121
+ title={item.query}
122
+ description={formatTime(item.timestamp)}
123
+ />
124
+ ))}
125
+ </SettingsListGroup>
107
126
  </ScrollView>
108
127
  <Prompt.Basic control={deleteLast15Prompt} title={t('history.deleteLast15Minutes.title') || 'Delete Last 15 Minutes'} description={t('history.deleteLast15Minutes.confirm') || 'Delete last 15 minutes of history?'} onConfirm={handleDeleteLast15Minutes} confirmButtonCta={t('common.actions.delete') || 'Delete'} confirmButtonColor="negative" />
109
128
  <Prompt.Basic control={clearAllPrompt} title={t('history.clearAll.title') || 'Clear All History'} description={t('history.clearAll.confirm') || 'Clear all history? This cannot be undone.'} onConfirm={handleClearAll} confirmButtonCta={t('history.clearAll.title') || 'Clear All'} confirmButtonColor="negative" />
@@ -12,7 +12,8 @@ import { useTheme } from '@oxyhq/bloom/theme';
12
12
  import { normalizeTheme } from '../utils/themeUtils';
13
13
  import { Ionicons } from '@expo/vector-icons';
14
14
  import { toast } from '../../lib/sonner';
15
- import { Header, GroupedSection } from '../components';
15
+ import { Header } from '../components';
16
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
16
17
  import { useI18n } from '../hooks/useI18n';
17
18
  import { SUPPORTED_LANGUAGES } from '@oxyhq/core';
18
19
  import { useOxy } from '../context/OxyContext';
@@ -98,18 +99,17 @@ const LanguageSelectorScreen: React.FC<LanguageSelectorScreenProps> = ({
98
99
  return {
99
100
  id: language.id,
100
101
  title: language.name,
101
- subtitle: language.nativeName,
102
- customIcon: (
102
+ description: language.nativeName,
103
+ icon: (
103
104
  <View style={[styles.languageFlag, { backgroundColor: `${language.color}15` }]}>
104
105
  <Text style={styles.flagEmoji}>{language.flag}</Text>
105
106
  </View>
106
107
  ),
107
- iconColor: language.color,
108
- selected: isSelected,
109
108
  onPress: () => handleLanguageSelect(language.id),
110
- customContent: isSelected ? (
109
+ rightElement: isSelected ? (
111
110
  <Ionicons name="checkmark-circle" size={24} color={bloomTheme.colors.primary} />
112
111
  ) : undefined,
112
+ showChevron: false,
113
113
  };
114
114
  }),
115
115
  [currentLanguage, handleLanguageSelect, bloomTheme]
@@ -150,7 +150,19 @@ const LanguageSelectorScreen: React.FC<LanguageSelectorScreenProps> = ({
150
150
  <View style={[styles.materialCard, {
151
151
  backgroundColor: bloomTheme.colors.card,
152
152
  }]}>
153
- <GroupedSection items={languageItems} />
153
+ <SettingsListGroup>
154
+ {languageItems.map(item => (
155
+ <SettingsListItem
156
+ key={item.id}
157
+ icon={item.icon}
158
+ title={item.title}
159
+ description={item.description}
160
+ onPress={item.onPress}
161
+ rightElement={item.rightElement}
162
+ showChevron={false}
163
+ />
164
+ ))}
165
+ </SettingsListGroup>
154
166
  </View>
155
167
  </View>
156
168
  </ScrollView>
@@ -7,7 +7,9 @@ import {
7
7
  } from 'react-native';
8
8
  import type { BaseScreenProps } from '../types/navigation';
9
9
  import { toast } from '../../lib/sonner';
10
- import { Header, Section, GroupedSection, LoadingState } from '../components';
10
+ import { Header, LoadingState } from '../components';
11
+ import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
12
+ import { SettingsIcon } from '../components/SettingsIcon';
11
13
  import { useI18n } from '../hooks/useI18n';
12
14
  import { useTheme } from '@oxyhq/bloom/theme';
13
15
  import { useColorScheme } from '../hooks/useColorScheme';
@@ -121,69 +123,50 @@ const LegalDocumentsScreen: React.FC<BaseScreenProps> = ({
121
123
  />
122
124
 
123
125
  <ScrollView style={styles.content}>
124
- <Section title={t('legal.policies') || 'Policies & Guidelines'} isFirst={true}>
125
- <GroupedSection
126
- items={[
127
- {
128
- id: 'privacy-policy',
129
- icon: 'shield-check',
130
- iconColor: themeColors.iconPersonalInfo,
131
- title: t('legal.privacyPolicy.title') || 'Privacy Policy',
132
- subtitle: t('legal.privacyPolicy.subtitle') || 'How we handle your data',
133
- onPress: handleOpenPolicy('privacy'),
134
- },
135
- {
136
- id: 'terms-of-service',
137
- icon: 'file-document',
138
- iconColor: themeColors.iconSecurity,
139
- title: t('legal.termsOfService.title') || 'Terms of Service',
140
- subtitle: t('legal.termsOfService.subtitle') || 'Terms and conditions of use',
141
- onPress: handleOpenPolicy('terms'),
142
- },
143
- {
144
- id: 'community-guidelines',
145
- icon: 'account-group',
146
- iconColor: themeColors.iconData,
147
- title: t('legal.communityGuidelines.title') || 'Community Guidelines',
148
- subtitle: t('legal.communityGuidelines.subtitle') || 'Rules and expectations for our community',
149
- onPress: handleOpenPolicy('community'),
150
- },
151
- {
152
- id: 'data-retention',
153
- icon: 'clock',
154
- iconColor: themeColors.iconStorage,
155
- title: t('legal.dataRetention.title') || 'Data Retention Policy',
156
- subtitle: t('legal.dataRetention.subtitle') || 'How long we keep your data',
157
- onPress: handleOpenPolicy('dataRetention'),
158
- },
159
- {
160
- id: 'content-moderation',
161
- icon: 'eye',
162
- iconColor: themeColors.iconSharing,
163
- title: t('legal.contentModeration.title') || 'Content Moderation Policy',
164
- subtitle: t('legal.contentModeration.subtitle') || 'How we moderate content',
165
- onPress: handleOpenPolicy('contentModeration'),
166
- },
167
- {
168
- id: 'child-safety',
169
- icon: 'heart',
170
- iconColor: '#FF2D55',
171
- title: t('legal.childSafety.title') || 'Child Safety Policy',
172
- subtitle: t('legal.childSafety.subtitle') || 'Protecting minors on our platform',
173
- onPress: handleOpenPolicy('childSafety'),
174
- },
175
- {
176
- id: 'cookie-policy',
177
- icon: 'cookie',
178
- iconColor: '#8E8E93',
179
- title: t('legal.cookiePolicy.title') || 'Cookie Policy',
180
- subtitle: t('legal.cookiePolicy.subtitle') || 'How we use cookies and similar technologies',
181
- onPress: handleOpenPolicy('cookie'),
182
- },
183
- ]}
184
-
126
+ <SettingsListGroup title={t('legal.policies') || 'Policies & Guidelines'}>
127
+ <SettingsListItem
128
+ icon={<SettingsIcon name="shield-check" color={themeColors.iconPersonalInfo} />}
129
+ title={t('legal.privacyPolicy.title') || 'Privacy Policy'}
130
+ description={t('legal.privacyPolicy.subtitle') || 'How we handle your data'}
131
+ onPress={handleOpenPolicy('privacy')}
185
132
  />
186
- </Section>
133
+ <SettingsListItem
134
+ icon={<SettingsIcon name="file-document" color={themeColors.iconSecurity} />}
135
+ title={t('legal.termsOfService.title') || 'Terms of Service'}
136
+ description={t('legal.termsOfService.subtitle') || 'Terms and conditions of use'}
137
+ onPress={handleOpenPolicy('terms')}
138
+ />
139
+ <SettingsListItem
140
+ icon={<SettingsIcon name="account-group" color={themeColors.iconData} />}
141
+ title={t('legal.communityGuidelines.title') || 'Community Guidelines'}
142
+ description={t('legal.communityGuidelines.subtitle') || 'Rules and expectations for our community'}
143
+ onPress={handleOpenPolicy('community')}
144
+ />
145
+ <SettingsListItem
146
+ icon={<SettingsIcon name="clock" color={themeColors.iconStorage} />}
147
+ title={t('legal.dataRetention.title') || 'Data Retention Policy'}
148
+ description={t('legal.dataRetention.subtitle') || 'How long we keep your data'}
149
+ onPress={handleOpenPolicy('dataRetention')}
150
+ />
151
+ <SettingsListItem
152
+ icon={<SettingsIcon name="eye" color={themeColors.iconSharing} />}
153
+ title={t('legal.contentModeration.title') || 'Content Moderation Policy'}
154
+ description={t('legal.contentModeration.subtitle') || 'How we moderate content'}
155
+ onPress={handleOpenPolicy('contentModeration')}
156
+ />
157
+ <SettingsListItem
158
+ icon={<SettingsIcon name="heart" color="#FF2D55" />}
159
+ title={t('legal.childSafety.title') || 'Child Safety Policy'}
160
+ description={t('legal.childSafety.subtitle') || 'Protecting minors on our platform'}
161
+ onPress={handleOpenPolicy('childSafety')}
162
+ />
163
+ <SettingsListItem
164
+ icon={<SettingsIcon name="cookie" color="#8E8E93" />}
165
+ title={t('legal.cookiePolicy.title') || 'Cookie Policy'}
166
+ description={t('legal.cookiePolicy.subtitle') || 'How we use cookies and similar technologies'}
167
+ onPress={handleOpenPolicy('cookie')}
168
+ />
169
+ </SettingsListGroup>
187
170
  </ScrollView>
188
171
  </View>
189
172
  );
@@ -11,7 +11,8 @@ import {
11
11
  import type { BaseScreenProps } from '../types/navigation';
12
12
  import { useThemeColors } from '../styles';
13
13
  import { normalizeTheme } from '../utils/themeUtils';
14
- import GroupedPillButtons from '../components/internal/GroupedPillButtons';
14
+ import { Button } from '@oxyhq/bloom/button';
15
+ import { Ionicons } from '@expo/vector-icons';
15
16
  import { useI18n } from '../hooks/useI18n';
16
17
  import QRCode from 'react-native-qrcode-svg';
17
18
 
@@ -184,17 +185,15 @@ const PaymentGatewayScreen: React.FC<PaymentGatewayScreenProps> = (props) => {
184
185
  return (
185
186
  <View style={styles.errorContainer}>
186
187
  <Text style={styles.errorText}>{t('payment.errors.invalidAmount')}</Text>
187
- <GroupedPillButtons
188
- buttons={[
189
- {
190
- text: t('payment.actions.close'),
191
- onPress: handleClose,
192
- icon: 'close',
193
- variant: 'primary',
194
- },
195
- ]}
196
- colors={colors}
197
- />
188
+ <Button
189
+ variant="primary"
190
+ onPress={handleClose}
191
+ size="small"
192
+ icon={<Ionicons name="close" size={16} />}
193
+ iconPosition="right"
194
+ >
195
+ {t('payment.actions.close')}
196
+ </Button>
198
197
  </View>
199
198
  );
200
199
  }