@oxyhq/services 10.5.0 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (427) hide show
  1. package/lib/commonjs/index.js.map +1 -1
  2. package/lib/commonjs/ui/components/AccountMenu.js +9 -5
  3. package/lib/commonjs/ui/components/AccountMenu.js.map +1 -1
  4. package/lib/commonjs/ui/components/AnotherDeviceQR.js +51 -56
  5. package/lib/commonjs/ui/components/AnotherDeviceQR.js.map +1 -1
  6. package/lib/commonjs/ui/components/BottomSheetRouter.js +1 -0
  7. package/lib/commonjs/ui/components/BottomSheetRouter.js.map +1 -1
  8. package/lib/commonjs/ui/components/FollowButton.js +18 -5
  9. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  10. package/lib/commonjs/ui/components/OxyProvider.js +23 -7
  11. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  12. package/lib/commonjs/ui/components/SignInModal.js +20 -1
  13. package/lib/commonjs/ui/components/SignInModal.js.map +1 -1
  14. package/lib/commonjs/ui/components/fileManagement/FileViewer.js +19 -9
  15. package/lib/commonjs/ui/components/fileManagement/FileViewer.js.map +1 -1
  16. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js +4 -2
  17. package/lib/commonjs/ui/components/fileManagement/UploadPreview.js.map +1 -1
  18. package/lib/commonjs/ui/context/OxyContext.js +153 -19
  19. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  20. package/lib/commonjs/ui/context/hooks/useAuthOperations.js +6 -17
  21. package/lib/commonjs/ui/context/hooks/useAuthOperations.js.map +1 -1
  22. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js +5 -5
  23. package/lib/commonjs/ui/hooks/mutations/mutationFactory.js.map +1 -1
  24. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js +38 -38
  25. package/lib/commonjs/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  26. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js +2 -2
  27. package/lib/commonjs/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  28. package/lib/commonjs/ui/hooks/queries/queryKeys.js +3 -3
  29. package/lib/commonjs/ui/hooks/queries/queryKeys.js.map +1 -1
  30. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js +1 -1
  31. package/lib/commonjs/ui/hooks/queries/useAccountQueries.js.map +1 -1
  32. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js +16 -12
  33. package/lib/commonjs/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  34. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js +10 -6
  35. package/lib/commonjs/ui/hooks/queries/useServicesQueries.js.map +1 -1
  36. package/lib/commonjs/ui/hooks/queryClient.js +6 -5
  37. package/lib/commonjs/ui/hooks/queryClient.js.map +1 -1
  38. package/lib/commonjs/ui/hooks/useOxyAuthSession.js +40 -2
  39. package/lib/commonjs/ui/hooks/useOxyAuthSession.js.map +1 -1
  40. package/lib/commonjs/ui/hooks/useProfileEditing.js +21 -0
  41. package/lib/commonjs/ui/hooks/useProfileEditing.js.map +1 -1
  42. package/lib/commonjs/ui/hooks/useSessionManagement.js +3 -3
  43. package/lib/commonjs/ui/hooks/useSessionManagement.js.map +1 -1
  44. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +100 -108
  45. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/AppInfoScreen.js +227 -273
  47. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  48. package/lib/commonjs/ui/screens/AvatarCropScreen.js +10 -4
  49. package/lib/commonjs/ui/screens/AvatarCropScreen.js.map +1 -1
  50. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js +20 -37
  51. package/lib/commonjs/ui/screens/ConnectedAppsScreen.js.map +1 -1
  52. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js +89 -201
  53. package/lib/commonjs/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +80 -208
  55. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -1
  56. package/lib/commonjs/ui/screens/FAQScreen.js +56 -208
  57. package/lib/commonjs/ui/screens/FAQScreen.js.map +1 -1
  58. package/lib/commonjs/ui/screens/FeedbackScreen.js +303 -352
  59. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  60. package/lib/commonjs/ui/screens/FileManagementScreen.js +20 -20
  61. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  62. package/lib/commonjs/ui/screens/HelpSupportScreen.js +77 -89
  63. package/lib/commonjs/ui/screens/HelpSupportScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/HistoryViewScreen.js +43 -58
  65. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +67 -90
  67. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js +77 -177
  69. package/lib/commonjs/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  70. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +113 -107
  71. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  72. package/lib/commonjs/ui/screens/ManageAccountScreen.js +55 -114
  73. package/lib/commonjs/ui/screens/ManageAccountScreen.js.map +1 -1
  74. package/lib/commonjs/ui/screens/NotificationsScreen.js +67 -85
  75. package/lib/commonjs/ui/screens/NotificationsScreen.js.map +1 -1
  76. package/lib/commonjs/ui/screens/OxyAuthScreen.js +71 -135
  77. package/lib/commonjs/ui/screens/OxyAuthScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +15 -9
  79. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/PreferencesScreen.js +65 -83
  81. package/lib/commonjs/ui/screens/PreferencesScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +378 -1023
  83. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +294 -242
  85. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/ProfileScreen.js +192 -305
  87. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  88. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js +57 -97
  89. package/lib/commonjs/ui/screens/SavesCollectionsScreen.js.map +1 -1
  90. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +41 -41
  91. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  92. package/lib/commonjs/ui/screens/UserLinksScreen.js +17 -24
  93. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  94. package/lib/commonjs/ui/screens/UserListScreen.js +83 -214
  95. package/lib/commonjs/ui/screens/UserListScreen.js.map +1 -1
  96. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +115 -77
  97. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  98. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js +70 -57
  99. package/lib/commonjs/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  100. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js +136 -332
  101. package/lib/commonjs/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  102. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js +47 -137
  103. package/lib/commonjs/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  104. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js +182 -115
  105. package/lib/commonjs/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  106. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js +138 -214
  107. package/lib/commonjs/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  108. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js +54 -92
  109. package/lib/commonjs/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  110. package/lib/commonjs/ui/utils/activeAuthuser.js +15 -9
  111. package/lib/commonjs/ui/utils/activeAuthuser.js.map +1 -1
  112. package/lib/commonjs/ui/utils/avatarUtils.js +1 -1
  113. package/lib/commonjs/ui/utils/avatarUtils.js.map +1 -1
  114. package/lib/module/index.js.map +1 -1
  115. package/lib/module/ui/components/AccountMenu.js +10 -6
  116. package/lib/module/ui/components/AccountMenu.js.map +1 -1
  117. package/lib/module/ui/components/AnotherDeviceQR.js +50 -56
  118. package/lib/module/ui/components/AnotherDeviceQR.js.map +1 -1
  119. package/lib/module/ui/components/BottomSheetRouter.js +2 -1
  120. package/lib/module/ui/components/BottomSheetRouter.js.map +1 -1
  121. package/lib/module/ui/components/FollowButton.js +18 -5
  122. package/lib/module/ui/components/FollowButton.js.map +1 -1
  123. package/lib/module/ui/components/OxyProvider.js +23 -7
  124. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  125. package/lib/module/ui/components/SignInModal.js +20 -1
  126. package/lib/module/ui/components/SignInModal.js.map +1 -1
  127. package/lib/module/ui/components/fileManagement/FileViewer.js +19 -9
  128. package/lib/module/ui/components/fileManagement/FileViewer.js.map +1 -1
  129. package/lib/module/ui/components/fileManagement/UploadPreview.js +4 -2
  130. package/lib/module/ui/components/fileManagement/UploadPreview.js.map +1 -1
  131. package/lib/module/ui/context/OxyContext.js +154 -20
  132. package/lib/module/ui/context/OxyContext.js.map +1 -1
  133. package/lib/module/ui/context/hooks/useAuthOperations.js +6 -17
  134. package/lib/module/ui/context/hooks/useAuthOperations.js.map +1 -1
  135. package/lib/module/ui/hooks/mutations/mutationFactory.js +5 -5
  136. package/lib/module/ui/hooks/mutations/mutationFactory.js.map +1 -1
  137. package/lib/module/ui/hooks/mutations/useAccountMutations.js +38 -38
  138. package/lib/module/ui/hooks/mutations/useAccountMutations.js.map +1 -1
  139. package/lib/module/ui/hooks/mutations/useServicesMutations.js +2 -2
  140. package/lib/module/ui/hooks/mutations/useServicesMutations.js.map +1 -1
  141. package/lib/module/ui/hooks/queries/queryKeys.js +3 -3
  142. package/lib/module/ui/hooks/queries/queryKeys.js.map +1 -1
  143. package/lib/module/ui/hooks/queries/useAccountQueries.js +1 -1
  144. package/lib/module/ui/hooks/queries/useAccountQueries.js.map +1 -1
  145. package/lib/module/ui/hooks/queries/usePaymentQueries.js +16 -12
  146. package/lib/module/ui/hooks/queries/usePaymentQueries.js.map +1 -1
  147. package/lib/module/ui/hooks/queries/useServicesQueries.js +9 -6
  148. package/lib/module/ui/hooks/queries/useServicesQueries.js.map +1 -1
  149. package/lib/module/ui/hooks/queryClient.js +6 -5
  150. package/lib/module/ui/hooks/queryClient.js.map +1 -1
  151. package/lib/module/ui/hooks/useOxyAuthSession.js +40 -2
  152. package/lib/module/ui/hooks/useOxyAuthSession.js.map +1 -1
  153. package/lib/module/ui/hooks/useProfileEditing.js +21 -0
  154. package/lib/module/ui/hooks/useProfileEditing.js.map +1 -1
  155. package/lib/module/ui/hooks/useSessionManagement.js +4 -3
  156. package/lib/module/ui/hooks/useSessionManagement.js.map +1 -1
  157. package/lib/module/ui/screens/AccountVerificationScreen.js +101 -109
  158. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  159. package/lib/module/ui/screens/AppInfoScreen.js +228 -275
  160. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  161. package/lib/module/ui/screens/AvatarCropScreen.js +10 -4
  162. package/lib/module/ui/screens/AvatarCropScreen.js.map +1 -1
  163. package/lib/module/ui/screens/ConnectedAppsScreen.js +19 -39
  164. package/lib/module/ui/screens/ConnectedAppsScreen.js.map +1 -1
  165. package/lib/module/ui/screens/CreateManagedAccountScreen.js +90 -202
  166. package/lib/module/ui/screens/CreateManagedAccountScreen.js.map +1 -1
  167. package/lib/module/ui/screens/EditProfileFieldScreen.js +77 -205
  168. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -1
  169. package/lib/module/ui/screens/FAQScreen.js +55 -207
  170. package/lib/module/ui/screens/FAQScreen.js.map +1 -1
  171. package/lib/module/ui/screens/FeedbackScreen.js +301 -350
  172. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  173. package/lib/module/ui/screens/FileManagementScreen.js +20 -20
  174. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  175. package/lib/module/ui/screens/HelpSupportScreen.js +78 -90
  176. package/lib/module/ui/screens/HelpSupportScreen.js.map +1 -1
  177. package/lib/module/ui/screens/HistoryViewScreen.js +44 -59
  178. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  179. package/lib/module/ui/screens/LanguageSelectorScreen.js +68 -91
  180. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  181. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js +75 -177
  182. package/lib/module/ui/screens/LearnMoreUsernamesScreen.js.map +1 -1
  183. package/lib/module/ui/screens/LegalDocumentsScreen.js +116 -108
  184. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  185. package/lib/module/ui/screens/ManageAccountScreen.js +52 -112
  186. package/lib/module/ui/screens/ManageAccountScreen.js.map +1 -1
  187. package/lib/module/ui/screens/NotificationsScreen.js +68 -86
  188. package/lib/module/ui/screens/NotificationsScreen.js.map +1 -1
  189. package/lib/module/ui/screens/OxyAuthScreen.js +69 -134
  190. package/lib/module/ui/screens/OxyAuthScreen.js.map +1 -1
  191. package/lib/module/ui/screens/PaymentGatewayScreen.js +16 -10
  192. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  193. package/lib/module/ui/screens/PreferencesScreen.js +66 -84
  194. package/lib/module/ui/screens/PreferencesScreen.js.map +1 -1
  195. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +366 -1012
  196. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  197. package/lib/module/ui/screens/PrivacySettingsScreen.js +295 -243
  198. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  199. package/lib/module/ui/screens/ProfileScreen.js +189 -302
  200. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  201. package/lib/module/ui/screens/SavesCollectionsScreen.js +58 -98
  202. package/lib/module/ui/screens/SavesCollectionsScreen.js.map +1 -1
  203. package/lib/module/ui/screens/SearchSettingsScreen.js +42 -42
  204. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  205. package/lib/module/ui/screens/UserLinksScreen.js +18 -25
  206. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  207. package/lib/module/ui/screens/UserListScreen.js +81 -212
  208. package/lib/module/ui/screens/UserListScreen.js.map +1 -1
  209. package/lib/module/ui/screens/WelcomeNewUserScreen.js +114 -76
  210. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  211. package/lib/module/ui/screens/trust/TrustAboutScreen.js +69 -57
  212. package/lib/module/ui/screens/trust/TrustAboutScreen.js.map +1 -1
  213. package/lib/module/ui/screens/trust/TrustCenterScreen.js +135 -332
  214. package/lib/module/ui/screens/trust/TrustCenterScreen.js.map +1 -1
  215. package/lib/module/ui/screens/trust/TrustFAQScreen.js +48 -138
  216. package/lib/module/ui/screens/trust/TrustFAQScreen.js.map +1 -1
  217. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js +184 -117
  218. package/lib/module/ui/screens/trust/TrustLeaderboardScreen.js.map +1 -1
  219. package/lib/module/ui/screens/trust/TrustRewardsScreen.js +132 -208
  220. package/lib/module/ui/screens/trust/TrustRewardsScreen.js.map +1 -1
  221. package/lib/module/ui/screens/trust/TrustRulesScreen.js +58 -94
  222. package/lib/module/ui/screens/trust/TrustRulesScreen.js.map +1 -1
  223. package/lib/module/ui/utils/activeAuthuser.js +15 -9
  224. package/lib/module/ui/utils/activeAuthuser.js.map +1 -1
  225. package/lib/module/ui/utils/avatarUtils.js +1 -1
  226. package/lib/module/ui/utils/avatarUtils.js.map +1 -1
  227. package/lib/typescript/commonjs/index.d.ts +1 -0
  228. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  229. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts +2 -0
  230. package/lib/typescript/commonjs/ui/components/AccountMenu.d.ts.map +1 -1
  231. package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts +12 -2
  232. package/lib/typescript/commonjs/ui/components/AnotherDeviceQR.d.ts.map +1 -1
  233. package/lib/typescript/commonjs/ui/components/BottomSheetRouter.d.ts.map +1 -1
  234. package/lib/typescript/commonjs/ui/components/FollowButton.d.ts.map +1 -1
  235. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts +3 -2
  236. package/lib/typescript/commonjs/ui/components/OxyProvider.d.ts.map +1 -1
  237. package/lib/typescript/commonjs/ui/components/SignInModal.d.ts.map +1 -1
  238. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
  239. package/lib/typescript/commonjs/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
  240. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts +34 -0
  241. package/lib/typescript/commonjs/ui/context/OxyContext.d.ts.map +1 -1
  242. package/lib/typescript/commonjs/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  243. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
  244. package/lib/typescript/commonjs/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  245. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts +3 -3
  246. package/lib/typescript/commonjs/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  247. package/lib/typescript/commonjs/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  248. package/lib/typescript/commonjs/ui/hooks/queryClient.d.ts.map +1 -1
  249. package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts +22 -0
  250. package/lib/typescript/commonjs/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
  251. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts +3 -0
  252. package/lib/typescript/commonjs/ui/hooks/useProfileEditing.d.ts.map +1 -1
  253. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts +2 -1
  254. package/lib/typescript/commonjs/ui/hooks/useSessionManagement.d.ts.map +1 -1
  255. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  256. package/lib/typescript/commonjs/ui/screens/AppInfoScreen.d.ts.map +1 -1
  257. package/lib/typescript/commonjs/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  258. package/lib/typescript/commonjs/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  259. package/lib/typescript/commonjs/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  260. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  261. package/lib/typescript/commonjs/ui/screens/FAQScreen.d.ts.map +1 -1
  262. package/lib/typescript/commonjs/ui/screens/FeedbackScreen.d.ts.map +1 -1
  263. package/lib/typescript/commonjs/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  264. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  265. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  266. package/lib/typescript/commonjs/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  267. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  268. package/lib/typescript/commonjs/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  269. package/lib/typescript/commonjs/ui/screens/NotificationsScreen.d.ts.map +1 -1
  270. package/lib/typescript/commonjs/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  271. package/lib/typescript/commonjs/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  272. package/lib/typescript/commonjs/ui/screens/PreferencesScreen.d.ts.map +1 -1
  273. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  274. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  275. package/lib/typescript/commonjs/ui/screens/ProfileScreen.d.ts.map +1 -1
  276. package/lib/typescript/commonjs/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  277. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  278. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  279. package/lib/typescript/commonjs/ui/screens/UserListScreen.d.ts.map +1 -1
  280. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  281. package/lib/typescript/commonjs/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  282. package/lib/typescript/commonjs/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  283. package/lib/typescript/commonjs/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  284. package/lib/typescript/commonjs/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  285. package/lib/typescript/commonjs/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  286. package/lib/typescript/commonjs/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  287. package/lib/typescript/commonjs/ui/utils/activeAuthuser.d.ts.map +1 -1
  288. package/lib/typescript/module/index.d.ts +1 -0
  289. package/lib/typescript/module/index.d.ts.map +1 -1
  290. package/lib/typescript/module/ui/components/AccountMenu.d.ts +2 -0
  291. package/lib/typescript/module/ui/components/AccountMenu.d.ts.map +1 -1
  292. package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts +12 -2
  293. package/lib/typescript/module/ui/components/AnotherDeviceQR.d.ts.map +1 -1
  294. package/lib/typescript/module/ui/components/BottomSheetRouter.d.ts.map +1 -1
  295. package/lib/typescript/module/ui/components/FollowButton.d.ts.map +1 -1
  296. package/lib/typescript/module/ui/components/OxyProvider.d.ts +3 -2
  297. package/lib/typescript/module/ui/components/OxyProvider.d.ts.map +1 -1
  298. package/lib/typescript/module/ui/components/SignInModal.d.ts.map +1 -1
  299. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts +1 -1
  300. package/lib/typescript/module/ui/components/TouchableRipple/TouchableRipple.native.d.ts.map +1 -1
  301. package/lib/typescript/module/ui/context/OxyContext.d.ts +34 -0
  302. package/lib/typescript/module/ui/context/OxyContext.d.ts.map +1 -1
  303. package/lib/typescript/module/ui/context/hooks/useAuthOperations.d.ts.map +1 -1
  304. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts +3 -0
  305. package/lib/typescript/module/ui/hooks/mutations/useAccountMutations.d.ts.map +1 -1
  306. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts +3 -3
  307. package/lib/typescript/module/ui/hooks/queries/queryKeys.d.ts.map +1 -1
  308. package/lib/typescript/module/ui/hooks/queries/useServicesQueries.d.ts.map +1 -1
  309. package/lib/typescript/module/ui/hooks/queryClient.d.ts.map +1 -1
  310. package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts +22 -0
  311. package/lib/typescript/module/ui/hooks/useOxyAuthSession.d.ts.map +1 -1
  312. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts +3 -0
  313. package/lib/typescript/module/ui/hooks/useProfileEditing.d.ts.map +1 -1
  314. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts +2 -1
  315. package/lib/typescript/module/ui/hooks/useSessionManagement.d.ts.map +1 -1
  316. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  317. package/lib/typescript/module/ui/screens/AppInfoScreen.d.ts.map +1 -1
  318. package/lib/typescript/module/ui/screens/AvatarCropScreen.d.ts.map +1 -1
  319. package/lib/typescript/module/ui/screens/ConnectedAppsScreen.d.ts.map +1 -1
  320. package/lib/typescript/module/ui/screens/CreateManagedAccountScreen.d.ts.map +1 -1
  321. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -1
  322. package/lib/typescript/module/ui/screens/FAQScreen.d.ts.map +1 -1
  323. package/lib/typescript/module/ui/screens/FeedbackScreen.d.ts.map +1 -1
  324. package/lib/typescript/module/ui/screens/HelpSupportScreen.d.ts.map +1 -1
  325. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  326. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  327. package/lib/typescript/module/ui/screens/LearnMoreUsernamesScreen.d.ts.map +1 -1
  328. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  329. package/lib/typescript/module/ui/screens/ManageAccountScreen.d.ts.map +1 -1
  330. package/lib/typescript/module/ui/screens/NotificationsScreen.d.ts.map +1 -1
  331. package/lib/typescript/module/ui/screens/OxyAuthScreen.d.ts.map +1 -1
  332. package/lib/typescript/module/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  333. package/lib/typescript/module/ui/screens/PreferencesScreen.d.ts.map +1 -1
  334. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  335. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  336. package/lib/typescript/module/ui/screens/ProfileScreen.d.ts.map +1 -1
  337. package/lib/typescript/module/ui/screens/SavesCollectionsScreen.d.ts.map +1 -1
  338. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  339. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  340. package/lib/typescript/module/ui/screens/UserListScreen.d.ts.map +1 -1
  341. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  342. package/lib/typescript/module/ui/screens/trust/TrustAboutScreen.d.ts.map +1 -1
  343. package/lib/typescript/module/ui/screens/trust/TrustCenterScreen.d.ts.map +1 -1
  344. package/lib/typescript/module/ui/screens/trust/TrustFAQScreen.d.ts.map +1 -1
  345. package/lib/typescript/module/ui/screens/trust/TrustLeaderboardScreen.d.ts.map +1 -1
  346. package/lib/typescript/module/ui/screens/trust/TrustRewardsScreen.d.ts.map +1 -1
  347. package/lib/typescript/module/ui/screens/trust/TrustRulesScreen.d.ts.map +1 -1
  348. package/lib/typescript/module/ui/utils/activeAuthuser.d.ts.map +1 -1
  349. package/lib/typescript/types/expo-haptics.d.ts +42 -0
  350. package/package.json +24 -31
  351. package/src/index.ts +1 -0
  352. package/src/types/expo-haptics.d.ts +42 -0
  353. package/src/ui/components/AccountMenu.tsx +11 -5
  354. package/src/ui/components/AnotherDeviceQR.tsx +53 -45
  355. package/src/ui/components/BottomSheetRouter.tsx +2 -1
  356. package/src/ui/components/FollowButton.tsx +24 -5
  357. package/src/ui/components/OxyProvider.tsx +22 -8
  358. package/src/ui/components/SignInModal.tsx +21 -2
  359. package/src/ui/components/TouchableRipple/TouchableRipple.native.tsx +1 -1
  360. package/src/ui/components/fileManagement/FileViewer.tsx +9 -9
  361. package/src/ui/components/fileManagement/UploadPreview.tsx +2 -2
  362. package/src/ui/context/OxyContext.tsx +178 -21
  363. package/src/ui/context/hooks/useAuthOperations.ts +6 -17
  364. package/src/ui/hooks/mutations/mutationFactory.ts +5 -5
  365. package/src/ui/hooks/mutations/useAccountMutations.ts +38 -38
  366. package/src/ui/hooks/mutations/useServicesMutations.ts +2 -2
  367. package/src/ui/hooks/queries/queryKeys.ts +6 -3
  368. package/src/ui/hooks/queries/useAccountQueries.ts +1 -1
  369. package/src/ui/hooks/queries/usePaymentQueries.ts +12 -12
  370. package/src/ui/hooks/queries/useServicesQueries.ts +9 -6
  371. package/src/ui/hooks/queryClient.ts +5 -5
  372. package/src/ui/hooks/useOxyAuthSession.ts +76 -2
  373. package/src/ui/hooks/useProfileEditing.ts +24 -0
  374. package/src/ui/hooks/useSessionManagement.ts +9 -6
  375. package/src/ui/screens/AccountVerificationScreen.tsx +101 -113
  376. package/src/ui/screens/AppInfoScreen.tsx +200 -238
  377. package/src/ui/screens/AvatarCropScreen.tsx +17 -4
  378. package/src/ui/screens/ConnectedAppsScreen.tsx +16 -34
  379. package/src/ui/screens/CreateManagedAccountScreen.tsx +94 -170
  380. package/src/ui/screens/EditProfileFieldScreen.tsx +77 -190
  381. package/src/ui/screens/FAQScreen.tsx +77 -208
  382. package/src/ui/screens/FeedbackScreen.tsx +330 -239
  383. package/src/ui/screens/FileManagementScreen.tsx +20 -20
  384. package/src/ui/screens/HelpSupportScreen.tsx +67 -82
  385. package/src/ui/screens/HistoryViewScreen.tsx +32 -38
  386. package/src/ui/screens/LanguageSelectorScreen.tsx +79 -93
  387. package/src/ui/screens/LearnMoreUsernamesScreen.tsx +81 -164
  388. package/src/ui/screens/LegalDocumentsScreen.tsx +184 -123
  389. package/src/ui/screens/ManageAccountScreen.tsx +48 -114
  390. package/src/ui/screens/NotificationsScreen.tsx +107 -106
  391. package/src/ui/screens/OxyAuthScreen.tsx +76 -109
  392. package/src/ui/screens/PaymentGatewayScreen.tsx +16 -7
  393. package/src/ui/screens/PreferencesScreen.tsx +96 -116
  394. package/src/ui/screens/PremiumSubscriptionScreen.tsx +419 -872
  395. package/src/ui/screens/PrivacySettingsScreen.tsx +203 -185
  396. package/src/ui/screens/ProfileScreen.tsx +158 -200
  397. package/src/ui/screens/SavesCollectionsScreen.tsx +78 -125
  398. package/src/ui/screens/SearchSettingsScreen.tsx +52 -41
  399. package/src/ui/screens/UserLinksScreen.tsx +18 -25
  400. package/src/ui/screens/UserListScreen.tsx +95 -188
  401. package/src/ui/screens/WelcomeNewUserScreen.tsx +109 -36
  402. package/src/ui/screens/trust/TrustAboutScreen.tsx +52 -41
  403. package/src/ui/screens/trust/TrustCenterScreen.tsx +184 -222
  404. package/src/ui/screens/trust/TrustFAQScreen.tsx +64 -124
  405. package/src/ui/screens/trust/TrustLeaderboardScreen.tsx +190 -67
  406. package/src/ui/screens/trust/TrustRewardsScreen.tsx +147 -182
  407. package/src/ui/screens/trust/TrustRulesScreen.tsx +77 -50
  408. package/src/ui/utils/activeAuthuser.ts +15 -9
  409. package/src/ui/utils/avatarUtils.ts +1 -1
  410. package/lib/commonjs/ui/components/feedback/FormInput.js +0 -72
  411. package/lib/commonjs/ui/components/feedback/FormInput.js.map +0 -1
  412. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +0 -261
  413. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +0 -1
  414. package/lib/module/ui/components/feedback/FormInput.js +0 -67
  415. package/lib/module/ui/components/feedback/FormInput.js.map +0 -1
  416. package/lib/module/ui/components/feedback/feedbackStyles.js +0 -256
  417. package/lib/module/ui/components/feedback/feedbackStyles.js.map +0 -1
  418. package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts +0 -20
  419. package/lib/typescript/commonjs/ui/components/feedback/FormInput.d.ts.map +0 -1
  420. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts +0 -279
  421. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
  422. package/lib/typescript/module/ui/components/feedback/FormInput.d.ts +0 -20
  423. package/lib/typescript/module/ui/components/feedback/FormInput.d.ts.map +0 -1
  424. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts +0 -279
  425. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts.map +0 -1
  426. package/src/ui/components/feedback/FormInput.tsx +0 -84
  427. package/src/ui/components/feedback/feedbackStyles.ts +0 -246
@@ -2,81 +2,134 @@ import type React from 'react';
2
2
  import { useState, useRef, useCallback, useMemo } from 'react';
3
3
  import {
4
4
  View,
5
- Text,
6
- TouchableOpacity,
7
- ActivityIndicator,
8
5
  Platform,
9
6
  KeyboardAvoidingView,
10
7
  ScrollView,
11
8
  Animated,
12
- StatusBar,
9
+ StyleSheet,
13
10
  } from 'react-native';
14
11
  import type { BaseScreenProps } from '../types/navigation';
15
- import { useThemeColors } from '../styles/theme';
16
12
  import { normalizeTheme } from '@oxyhq/core';
13
+ import { packageInfo } from '@oxyhq/core';
17
14
  import { useTheme } from '@oxyhq/bloom/theme';
18
15
  import { Ionicons } from '@expo/vector-icons';
19
16
  import { toast } from '@oxyhq/bloom';
20
- import { packageInfo } from '@oxyhq/core';
17
+ import { H2, Text } from '@oxyhq/bloom/typography';
18
+ import { Button } from '@oxyhq/bloom/button';
19
+ import { TextField, TextFieldInput } from '@oxyhq/bloom/text-field';
20
+ import { Switch } from '@oxyhq/bloom/switch';
21
21
  import { SettingsListGroup, SettingsListItem } from '@oxyhq/bloom/settings-list';
22
22
  import { SettingsIcon } from '../components/SettingsIcon';
23
+ import Header from '../components/Header';
23
24
  import { useI18n } from '../hooks/useI18n';
24
25
  import { useOxy } from '../context/OxyContext';
25
26
 
26
- import FormInput from '../components/feedback/FormInput';
27
- import ProgressIndicator from '../components/feedback/ProgressIndicator';
28
27
  import { useFeedbackForm } from '../components/feedback/useFeedbackForm';
29
- import { createFeedbackStyles } from '../components/feedback/feedbackStyles';
30
28
  import { FEEDBACK_TYPES, PRIORITY_LEVELS, CATEGORIES } from '../components/feedback/constants';
29
+ import type { FeedbackData } from '../components/feedback/types';
30
+
31
+ /** Step transition timing — measured animation, not a design token. */
32
+ const STEP_FADE_OUT_MS = 250;
33
+ const STEP_FADE_IN_MS = 250;
34
+ const STEP_SLIDE_IN_MS = 300;
35
+ const STEP_SLIDE_FROM = -100;
36
+ const TOTAL_STEPS = 4;
37
+ const LAST_STEP_INDEX = TOTAL_STEPS - 1;
38
+ const SUCCESS_RESET_DELAY_MS = 3000;
39
+
40
+ /** Maps each feedback type to a Bloom theme role + MaterialCommunityIcons glyph. */
41
+ const TYPE_ICON_GLYPH: Record<FeedbackData['type'], string> = {
42
+ bug: 'bug',
43
+ feature: 'lightbulb-on',
44
+ general: 'chat',
45
+ support: 'help-circle',
46
+ };
47
+
48
+ /** Maps each priority level to a MaterialCommunityIcons glyph. */
49
+ const PRIORITY_ICON_GLYPH: Record<FeedbackData['priority'], string> = {
50
+ low: 'arrow-down',
51
+ medium: 'minus',
52
+ high: 'arrow-up',
53
+ critical: 'alert',
54
+ };
31
55
 
32
56
  const FeedbackScreen: React.FC<BaseScreenProps> = ({
33
- navigate,
34
57
  goBack,
35
58
  onClose,
36
59
  theme,
37
60
  }) => {
38
61
  const { user, oxyServices } = useOxy();
39
62
  const normalizedTheme = normalizeTheme(theme);
40
- const colors = useThemeColors(normalizedTheme);
41
63
  const bloomTheme = useTheme();
64
+ const colors = bloomTheme.colors;
42
65
  const { t } = useI18n();
43
66
 
44
67
  const { feedbackData, feedbackState, setFeedbackState, updateField, resetForm } = useFeedbackForm();
45
68
 
46
69
  const [currentStep, setCurrentStep] = useState(0);
47
- const [errorMessage, setErrorMessage] = useState('');
70
+ const [, setErrorMessage] = useState('');
48
71
 
49
72
  const fadeAnim = useRef(new Animated.Value(1)).current;
50
73
  const slideAnim = useRef(new Animated.Value(0)).current;
51
74
 
52
- const styles = useMemo(() => createFeedbackStyles(colors), [colors]);
75
+ /** Theme-role color for each feedback type pill. */
76
+ const typeColor = useCallback((id: FeedbackData['type']): string => {
77
+ switch (id) {
78
+ case 'bug':
79
+ return colors.negative;
80
+ case 'feature':
81
+ return colors.info;
82
+ case 'general':
83
+ return colors.success;
84
+ case 'support':
85
+ return colors.warning;
86
+ default:
87
+ return colors.primary;
88
+ }
89
+ }, [colors]);
90
+
91
+ /** Theme-role color for each priority level. */
92
+ const priorityColor = useCallback((id: FeedbackData['priority']): string => {
93
+ switch (id) {
94
+ case 'low':
95
+ return colors.success;
96
+ case 'medium':
97
+ return colors.warning;
98
+ case 'high':
99
+ return colors.negative;
100
+ case 'critical':
101
+ return colors.negative;
102
+ default:
103
+ return colors.primary;
104
+ }
105
+ }, [colors]);
53
106
 
54
107
  const animateTransition = useCallback((nextStep: number) => {
55
108
  Animated.timing(fadeAnim, {
56
109
  toValue: 0,
57
- duration: 250,
110
+ duration: STEP_FADE_OUT_MS,
58
111
  useNativeDriver: Platform.OS !== 'web',
59
112
  }).start(() => {
60
113
  setCurrentStep(nextStep);
61
- slideAnim.setValue(-100);
114
+ slideAnim.setValue(STEP_SLIDE_FROM);
62
115
 
63
116
  Animated.parallel([
64
117
  Animated.timing(fadeAnim, {
65
118
  toValue: 1,
66
- duration: 250,
119
+ duration: STEP_FADE_IN_MS,
67
120
  useNativeDriver: Platform.OS !== 'web',
68
121
  }),
69
122
  Animated.timing(slideAnim, {
70
123
  toValue: 0,
71
- duration: 300,
124
+ duration: STEP_SLIDE_IN_MS,
72
125
  useNativeDriver: Platform.OS !== 'web',
73
- })
126
+ }),
74
127
  ]).start();
75
128
  });
76
129
  }, [fadeAnim, slideAnim]);
77
130
 
78
131
  const nextStep = useCallback(() => {
79
- if (currentStep < 3) {
132
+ if (currentStep < LAST_STEP_INDEX) {
80
133
  animateTransition(currentStep + 1);
81
134
  }
82
135
  }, [currentStep, animateTransition]);
@@ -88,15 +141,15 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
88
141
  }, [currentStep, animateTransition]);
89
142
 
90
143
  const isTypeStepValid = useCallback(() => {
91
- return feedbackData.type && feedbackData.category;
144
+ return Boolean(feedbackData.type && feedbackData.category);
92
145
  }, [feedbackData.type, feedbackData.category]);
93
146
 
94
147
  const isDetailsStepValid = useCallback(() => {
95
- return feedbackData.title.trim() && feedbackData.description.trim();
148
+ return Boolean(feedbackData.title.trim() && feedbackData.description.trim());
96
149
  }, [feedbackData.title, feedbackData.description]);
97
150
 
98
151
  const isContactStepValid = useCallback(() => {
99
- return feedbackData.contactEmail.trim() || user?.email;
152
+ return Boolean(feedbackData.contactEmail.trim() || user?.email);
100
153
  }, [feedbackData.contactEmail, user?.email]);
101
154
 
102
155
  const handleSubmitFeedback = useCallback(async () => {
@@ -134,13 +187,15 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
134
187
  setTimeout(() => {
135
188
  resetForm();
136
189
  setCurrentStep(0);
137
- }, 3000);
190
+ }, SUCCESS_RESET_DELAY_MS);
138
191
 
139
192
  } catch (error: unknown) {
140
- setFeedbackState({ status: 'error', message: (error instanceof Error ? error.message : null) || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback') });
141
- toast.error((error instanceof Error ? error.message : null) || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback'));
193
+ const message = (error instanceof Error ? error.message : null)
194
+ || (t('feedback.toasts.submitFailed') || 'Failed to submit feedback');
195
+ setFeedbackState({ status: 'error', message });
196
+ toast.error(message);
142
197
  }
143
- }, [feedbackData, user, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
198
+ }, [feedbackData, user, oxyServices, isTypeStepValid, isDetailsStepValid, isContactStepValid, resetForm, setFeedbackState, t]);
144
199
 
145
200
  const feedbackTypeData = useMemo(() => FEEDBACK_TYPES.map(type => ({
146
201
  ...type,
@@ -157,22 +212,46 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
157
212
  isSelected: feedbackData.priority === p.id,
158
213
  })), [feedbackData.priority]);
159
214
 
215
+ const renderProgress = () => (
216
+ <View
217
+ className="flex-row justify-center gap-space-8 pt-space-8 pb-space-16"
218
+ accessibilityRole="progressbar"
219
+ accessibilityLabel={`Step ${currentStep + 1} of ${TOTAL_STEPS}`}
220
+ >
221
+ {Array.from({ length: TOTAL_STEPS }, (_, index) => (
222
+ <View
223
+ key={index}
224
+ className={
225
+ currentStep === index
226
+ ? 'h-space-8 rounded-radius-max bg-fill-brand'
227
+ : 'h-space-8 rounded-radius-max bg-fill-secondary'
228
+ }
229
+ style={currentStep === index ? styles.progressDotActive : styles.progressDot}
230
+ />
231
+ ))}
232
+ </View>
233
+ );
234
+
235
+ const renderStepHeader = (title: string, subtitle: string) => (
236
+ <View className="w-full gap-space-8 mb-space-24">
237
+ <H2 className="text-headerBold font-headerBold text-text">{title}</H2>
238
+ <Text className="text-body font-body text-text-secondary">{subtitle}</Text>
239
+ </View>
240
+ );
241
+
160
242
  const renderTypeStep = () => (
161
243
  <Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
162
- <View style={styles.modernHeader}>
163
- <Text style={styles.stepTitle} className="text-foreground">
164
- {t('feedback.type.title') || 'What type of feedback?'}
165
- </Text>
166
- <Text style={styles.modernSubtitle} className="text-muted-foreground">
167
- {t('feedback.type.subtitle') || 'Choose the category that best describes your feedback'}
168
- </Text>
169
- </View>
170
- <View style={styles.fullBleed}>
244
+ {renderStepHeader(
245
+ t('feedback.type.title') || 'What type of feedback?',
246
+ t('feedback.type.subtitle') || 'Choose the category that best describes your feedback',
247
+ )}
248
+
249
+ <View className="w-full">
171
250
  <SettingsListGroup>
172
251
  {feedbackTypeData.map(type => (
173
252
  <SettingsListItem
174
253
  key={type.id}
175
- icon={<SettingsIcon name={type.icon} color={type.color} />}
254
+ icon={<SettingsIcon name={TYPE_ICON_GLYPH[type.id]} color={typeColor(type.id)} />}
176
255
  title={type.label}
177
256
  description={type.description}
178
257
  onPress={() => { updateField('type', type.id); updateField('category', ''); }}
@@ -182,17 +261,22 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
182
261
  </SettingsListGroup>
183
262
  </View>
184
263
 
185
- {feedbackData.type && (
186
- <View style={styles.categoryContainer}>
187
- <Text style={[styles.modernLabel, { marginBottom: 8 }]} className="text-muted-foreground">
264
+ {feedbackData.type ? (
265
+ <View className="w-full mt-space-24">
266
+ <Text className="text-caption font-caption text-text-secondary mb-space-8">
188
267
  {t('feedback.category.label') || 'Category'}
189
268
  </Text>
190
- <View style={styles.fullBleed}>
269
+ <View className="w-full">
191
270
  <SettingsListGroup>
192
271
  {categoryData.map(cat => (
193
272
  <SettingsListItem
194
273
  key={cat.name}
195
- icon={<SettingsIcon name={cat.isSelected ? 'check-circle' : 'ellipse-outline'} color={cat.isSelected ? colors.primary : colors.secondaryText} />}
274
+ icon={(
275
+ <SettingsIcon
276
+ name={cat.isSelected ? 'check-circle' : 'circle-outline'}
277
+ color={cat.isSelected ? colors.primary : colors.textSecondary}
278
+ />
279
+ )}
196
280
  title={cat.name}
197
281
  onPress={() => updateField('category', cat.name)}
198
282
  showChevron={false}
@@ -201,84 +285,81 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
201
285
  </SettingsListGroup>
202
286
  </View>
203
287
  </View>
204
- )}
288
+ ) : null}
205
289
 
206
- <View style={styles.navigationButtons}>
207
- <TouchableOpacity
208
- style={[styles.navButton, { borderRadius: 35 }]}
209
- className="border-border"
290
+ <View className="flex-row gap-space-8 mt-space-24 w-full">
291
+ <Button
292
+ variant="secondary"
210
293
  onPress={goBack}
211
- accessibilityRole="button"
212
294
  accessibilityLabel="Go back"
295
+ icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
296
+ style={styles.navButton}
213
297
  >
214
- <Ionicons name="arrow-back" size={16} color={colors.text} />
215
- <Text style={styles.navButtonText} className="text-foreground">{t('common.actions.back') || 'Back'}</Text>
216
- </TouchableOpacity>
298
+ {t('common.actions.back') || 'Back'}
299
+ </Button>
217
300
 
218
- <TouchableOpacity
219
- style={[styles.navButton, { borderRadius: 35 }]}
220
- className="bg-primary border-primary"
301
+ <Button
302
+ variant="primary"
221
303
  onPress={nextStep}
222
304
  disabled={!isTypeStepValid()}
223
- accessibilityRole="button"
224
305
  accessibilityLabel="Continue to next step"
306
+ iconPosition="right"
307
+ icon={<Ionicons name="arrow-forward" size={16} color={colors.primaryForeground} />}
308
+ style={styles.navButton}
225
309
  >
226
- <Text style={[styles.navButtonText, { color: bloomTheme.colors.negativeForeground }]}>{t('common.actions.next') || 'Next'}</Text>
227
- <Ionicons name="arrow-forward" size={16} color={bloomTheme.colors.negativeForeground} />
228
- </TouchableOpacity>
310
+ {t('common.actions.next') || 'Next'}
311
+ </Button>
229
312
  </View>
230
313
  </Animated.View>
231
314
  );
232
315
 
233
316
  const renderDetailsStep = () => (
234
317
  <Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
235
- <View style={styles.modernHeader}>
236
- <Text style={styles.stepTitle} className="text-foreground">
237
- {t('feedback.details.title') || 'Tell us more'}
238
- </Text>
239
- <Text style={styles.modernSubtitle} className="text-muted-foreground">
240
- {t('feedback.details.subtitle') || 'Provide details about your feedback'}
241
- </Text>
242
- </View>
243
-
244
- <FormInput
245
- icon="create-outline"
246
- label={t('feedback.fields.title.label') || 'Title'}
247
- value={feedbackData.title}
248
- onChangeText={(text) => { updateField('title', text); setErrorMessage(''); }}
249
- placeholder={t('feedback.fields.title.placeholder') || 'Brief summary of your feedback'}
250
- testID="feedback-title-input"
251
- colors={colors}
252
- styles={styles}
253
- accessibilityLabel="Feedback title"
254
- accessibilityHint="Enter a brief summary of your feedback"
255
- />
318
+ {renderStepHeader(
319
+ t('feedback.details.title') || 'Tell us more',
320
+ t('feedback.details.subtitle') || 'Provide details about your feedback',
321
+ )}
256
322
 
257
- <FormInput
258
- icon="document-text-outline"
259
- label={t('feedback.fields.description.label') || 'Description'}
260
- value={feedbackData.description}
261
- onChangeText={(text) => { updateField('description', text); setErrorMessage(''); }}
262
- placeholder={t('feedback.fields.description.placeholder') || 'Please provide detailed information...'}
263
- multiline={true}
264
- numberOfLines={6}
265
- testID="feedback-description-input"
266
- colors={colors}
267
- styles={styles}
268
- accessibilityLabel="Feedback description"
269
- accessibilityHint="Provide detailed information about your feedback"
270
- />
323
+ <View className="w-full gap-space-16">
324
+ <TextField>
325
+ <TextFieldInput
326
+ floatingLabel
327
+ label={t('feedback.fields.title.label') || 'Title'}
328
+ value={feedbackData.title}
329
+ onChangeText={(text) => { updateField('title', text); setErrorMessage(''); }}
330
+ placeholder={t('feedback.fields.title.placeholder') || 'Brief summary of your feedback'}
331
+ testID="feedback-title-input"
332
+ accessibilityLabel="Feedback title"
333
+ accessibilityHint="Enter a brief summary of your feedback"
334
+ />
335
+ </TextField>
336
+
337
+ <TextField>
338
+ <TextFieldInput
339
+ floatingLabel
340
+ multiline
341
+ numberOfLines={6}
342
+ label={t('feedback.fields.description.label') || 'Description'}
343
+ value={feedbackData.description}
344
+ onChangeText={(text) => { updateField('description', text); setErrorMessage(''); }}
345
+ placeholder={t('feedback.fields.description.placeholder') || 'Please provide detailed information...'}
346
+ testID="feedback-description-input"
347
+ accessibilityLabel="Feedback description"
348
+ accessibilityHint="Provide detailed information about your feedback"
349
+ />
350
+ </TextField>
351
+ </View>
271
352
 
272
- <View style={{ marginBottom: 24 }}>
273
- <Text style={[styles.modernLabel, { marginBottom: 8 }]} className="text-muted-foreground">
353
+ <View className="w-full mt-space-24">
354
+ <Text className="text-caption font-caption text-text-secondary mb-space-8">
274
355
  {t('feedback.priority.label') || 'Priority Level'}
275
356
  </Text>
276
- <View style={styles.fullBleed}>
357
+ <View className="w-full">
277
358
  <SettingsListGroup>
278
359
  {priorityData.map(p => (
279
360
  <SettingsListItem
280
361
  key={p.id}
281
- icon={<SettingsIcon name={p.icon} color={p.color} />}
362
+ icon={<SettingsIcon name={PRIORITY_ICON_GLYPH[p.id]} color={priorityColor(p.id)} />}
282
363
  title={p.label}
283
364
  onPress={() => updateField('priority', p.id)}
284
365
  showChevron={false}
@@ -288,200 +369,185 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
288
369
  </View>
289
370
  </View>
290
371
 
291
- <View style={styles.navigationButtons}>
292
- <TouchableOpacity
293
- style={[styles.navButton, styles.backButton]}
294
- className="border-border"
372
+ <View className="flex-row gap-space-8 mt-space-24 w-full">
373
+ <Button
374
+ variant="secondary"
295
375
  onPress={prevStep}
296
- accessibilityRole="button"
297
376
  accessibilityLabel="Go back"
377
+ icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
378
+ style={styles.navButton}
298
379
  >
299
- <Ionicons name="arrow-back" size={16} color={colors.text} />
300
- <Text style={styles.navButtonText} className="text-foreground">{t('common.actions.back') || 'Back'}</Text>
301
- </TouchableOpacity>
380
+ {t('common.actions.back') || 'Back'}
381
+ </Button>
302
382
 
303
- <TouchableOpacity
304
- style={[styles.navButton, styles.nextButton]}
305
- className="bg-primary border-primary"
383
+ <Button
384
+ variant="primary"
306
385
  onPress={nextStep}
307
386
  disabled={!isDetailsStepValid()}
308
- accessibilityRole="button"
309
387
  accessibilityLabel="Continue to next step"
388
+ iconPosition="right"
389
+ icon={<Ionicons name="arrow-forward" size={16} color={colors.primaryForeground} />}
390
+ style={styles.navButton}
310
391
  >
311
- <Text style={[styles.navButtonText, { color: bloomTheme.colors.negativeForeground }]}>{t('common.actions.next') || 'Next'}</Text>
312
- <Ionicons name="arrow-forward" size={16} color={bloomTheme.colors.negativeForeground} />
313
- </TouchableOpacity>
392
+ {t('common.actions.next') || 'Next'}
393
+ </Button>
314
394
  </View>
315
395
  </Animated.View>
316
396
  );
317
397
 
318
398
  const renderContactStep = () => (
319
399
  <Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
320
- <View style={styles.modernHeader}>
321
- <Text style={styles.stepTitle} className="text-foreground">
322
- {t('feedback.contact.title') || 'Contact Information'}
323
- </Text>
324
- <Text style={styles.modernSubtitle} className="text-muted-foreground">
325
- {t('feedback.contact.subtitle') || 'Help us get back to you'}
326
- </Text>
327
- </View>
400
+ {renderStepHeader(
401
+ t('feedback.contact.title') || 'Contact Information',
402
+ t('feedback.contact.subtitle') || 'Help us get back to you',
403
+ )}
328
404
 
329
- <FormInput
330
- icon="mail-outline"
331
- label={t('feedback.fields.email.label') || 'Email Address'}
332
- value={feedbackData.contactEmail}
333
- onChangeText={(text) => { updateField('contactEmail', text); setErrorMessage(''); }}
334
- placeholder={user?.email || (t('feedback.fields.email.placeholder') || 'Enter your email address')}
335
- testID="feedback-email-input"
336
- colors={colors}
337
- styles={styles}
338
- accessibilityLabel="Email address"
339
- accessibilityHint="Enter your email so we can respond"
340
- />
405
+ <View className="w-full">
406
+ <TextField>
407
+ <TextFieldInput
408
+ floatingLabel
409
+ label={t('feedback.fields.email.label') || 'Email Address'}
410
+ value={feedbackData.contactEmail}
411
+ onChangeText={(text) => { updateField('contactEmail', text); setErrorMessage(''); }}
412
+ placeholder={user?.email || (t('feedback.fields.email.placeholder') || 'Enter your email address')}
413
+ keyboardType="email-address"
414
+ autoCapitalize="none"
415
+ autoCorrect={false}
416
+ testID="feedback-email-input"
417
+ accessibilityLabel="Email address"
418
+ accessibilityHint="Enter your email so we can respond"
419
+ />
420
+ </TextField>
421
+ </View>
341
422
 
342
- <View style={styles.checkboxContainer}>
343
- <TouchableOpacity
344
- style={[
345
- styles.checkbox,
346
- {
347
- borderColor: feedbackData.systemInfo ? colors.primary : colors.border,
348
- backgroundColor: feedbackData.systemInfo ? colors.primary : 'transparent',
349
- }
350
- ]}
351
- onPress={() => updateField('systemInfo', !feedbackData.systemInfo)}
352
- accessibilityRole="checkbox"
353
- accessibilityState={{ checked: feedbackData.systemInfo }}
354
- accessibilityLabel="Include system information"
355
- >
356
- {feedbackData.systemInfo && <Ionicons name="checkmark" size={16} color={bloomTheme.colors.negativeForeground} />}
357
- </TouchableOpacity>
358
- <Text style={styles.checkboxText} className="text-foreground">
359
- {t('feedback.contact.includeSystemInfo') || 'Include system information to help us better understand your issue'}
360
- </Text>
423
+ <View className="w-full mt-space-16">
424
+ <SettingsListGroup>
425
+ <SettingsListItem
426
+ icon={<SettingsIcon name="information" color={colors.info} />}
427
+ title={t('feedback.contact.includeSystemInfo') || 'Include system information to help us better understand your issue'}
428
+ rightElement={(
429
+ <Switch
430
+ value={feedbackData.systemInfo}
431
+ onValueChange={(value) => updateField('systemInfo', value)}
432
+ testID="feedback-system-info-switch"
433
+ />
434
+ )}
435
+ showChevron={false}
436
+ />
437
+ </SettingsListGroup>
361
438
  </View>
362
439
 
363
- <View style={styles.navigationButtons}>
364
- <TouchableOpacity
365
- style={[styles.navButton, styles.backButton]}
366
- className="border-border"
440
+ <View className="flex-row gap-space-8 mt-space-24 w-full">
441
+ <Button
442
+ variant="secondary"
367
443
  onPress={prevStep}
368
- accessibilityRole="button"
369
444
  accessibilityLabel="Go back"
445
+ icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
446
+ style={styles.navButton}
370
447
  >
371
- <Ionicons name="arrow-back" size={16} color={colors.text} />
372
- <Text style={styles.navButtonText} className="text-foreground">Back</Text>
373
- </TouchableOpacity>
448
+ {t('common.actions.back') || 'Back'}
449
+ </Button>
374
450
 
375
- <TouchableOpacity
376
- style={[styles.navButton, styles.nextButton]}
377
- className="bg-primary border-primary"
451
+ <Button
452
+ variant="primary"
378
453
  onPress={nextStep}
379
454
  disabled={!isContactStepValid()}
380
- accessibilityRole="button"
381
455
  accessibilityLabel="Continue to summary"
456
+ iconPosition="right"
457
+ icon={<Ionicons name="arrow-forward" size={16} color={colors.primaryForeground} />}
458
+ style={styles.navButton}
382
459
  >
383
- <Text style={[styles.navButtonText, { color: bloomTheme.colors.negativeForeground }]}>Next</Text>
384
- <Ionicons name="arrow-forward" size={16} color={bloomTheme.colors.negativeForeground} />
385
- </TouchableOpacity>
460
+ {t('common.actions.next') || 'Next'}
461
+ </Button>
386
462
  </View>
387
463
  </Animated.View>
388
464
  );
389
465
 
466
+ const renderSummaryRow = (label: string, value: string | undefined) => (
467
+ <View className="flex-row gap-space-12">
468
+ <Text className="text-body font-body text-text-secondary" style={styles.summaryLabel}>{label}</Text>
469
+ <Text className="text-body font-body text-text flex-1">{value}</Text>
470
+ </View>
471
+ );
472
+
390
473
  const renderSummaryStep = () => (
391
474
  <Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
392
- <View style={styles.modernHeader}>
393
- <Text style={styles.stepTitle} className="text-foreground">
394
- {t('feedback.summary.title') || 'Summary'}
395
- </Text>
396
- <Text style={styles.modernSubtitle} className="text-muted-foreground">
397
- {t('feedback.summary.subtitle') || 'Please review your feedback before submitting'}
398
- </Text>
399
- </View>
475
+ {renderStepHeader(
476
+ t('feedback.summary.title') || 'Summary',
477
+ t('feedback.summary.subtitle') || 'Please review your feedback before submitting',
478
+ )}
400
479
 
401
- <View style={styles.summaryContainer}>
402
- <View style={styles.summaryRow}>
403
- <Text style={styles.summaryLabel} className="text-muted-foreground">Type:</Text>
404
- <Text style={styles.summaryValue} className="text-foreground">
405
- {FEEDBACK_TYPES.find(t => t.id === feedbackData.type)?.label}
406
- </Text>
407
- </View>
408
- <View style={styles.summaryRow}>
409
- <Text style={styles.summaryLabel} className="text-muted-foreground">Category:</Text>
410
- <Text style={styles.summaryValue} className="text-foreground">{feedbackData.category}</Text>
411
- </View>
412
- <View style={styles.summaryRow}>
413
- <Text style={styles.summaryLabel} className="text-muted-foreground">Priority:</Text>
414
- <Text style={styles.summaryValue} className="text-foreground">
415
- {PRIORITY_LEVELS.find(p => p.id === feedbackData.priority)?.label}
416
- </Text>
417
- </View>
418
- <View style={styles.summaryRow}>
419
- <Text style={styles.summaryLabel} className="text-muted-foreground">Title:</Text>
420
- <Text style={styles.summaryValue} className="text-foreground">{feedbackData.title}</Text>
421
- </View>
422
- <View style={styles.summaryRow}>
423
- <Text style={styles.summaryLabel} className="text-muted-foreground">Contact:</Text>
424
- <Text style={styles.summaryValue} className="text-foreground">
425
- {feedbackData.contactEmail || user?.email}
426
- </Text>
427
- </View>
480
+ <View className="w-full gap-space-12 p-space-16 rounded-radius-20 bg-fill mb-space-24">
481
+ {renderSummaryRow(
482
+ t('feedback.summary.type') || 'Type:',
483
+ FEEDBACK_TYPES.find(ft => ft.id === feedbackData.type)?.label,
484
+ )}
485
+ {renderSummaryRow(
486
+ t('feedback.summary.category') || 'Category:',
487
+ feedbackData.category,
488
+ )}
489
+ {renderSummaryRow(
490
+ t('feedback.summary.priority') || 'Priority:',
491
+ PRIORITY_LEVELS.find(p => p.id === feedbackData.priority)?.label,
492
+ )}
493
+ {renderSummaryRow(
494
+ t('feedback.summary.titleField') || 'Title:',
495
+ feedbackData.title,
496
+ )}
497
+ {renderSummaryRow(
498
+ t('feedback.summary.contact') || 'Contact:',
499
+ feedbackData.contactEmail || user?.email,
500
+ )}
428
501
  </View>
429
502
 
430
- <TouchableOpacity
431
- style={styles.button}
432
- className="bg-primary"
503
+ <Button
504
+ variant="primary"
433
505
  onPress={handleSubmitFeedback}
434
506
  disabled={feedbackState.status === 'submitting'}
507
+ loading={feedbackState.status === 'submitting'}
435
508
  testID="submit-feedback-button"
436
- accessibilityRole="button"
437
509
  accessibilityLabel="Submit feedback"
510
+ iconPosition="right"
511
+ icon={<Ionicons name="send" size={18} color={colors.primaryForeground} />}
512
+ style={styles.fullWidthButton}
438
513
  >
439
- {feedbackState.status === 'submitting' ? (
440
- <ActivityIndicator color={bloomTheme.colors.negativeForeground} size="small" />
441
- ) : (
442
- <>
443
- <Text style={styles.buttonText}>{t('feedback.actions.submit') || 'Submit Feedback'}</Text>
444
- <Ionicons name="send" size={20} color={bloomTheme.colors.negativeForeground} />
445
- </>
446
- )}
447
- </TouchableOpacity>
514
+ {t('feedback.actions.submit') || 'Submit Feedback'}
515
+ </Button>
448
516
 
449
- <View style={styles.navigationButtons}>
450
- <TouchableOpacity
451
- style={[styles.navButton, { borderRadius: 35 }]}
452
- className="border-border"
517
+ <View className="flex-row mt-space-16 w-full">
518
+ <Button
519
+ variant="secondary"
453
520
  onPress={prevStep}
454
- accessibilityRole="button"
455
521
  accessibilityLabel="Go back"
522
+ icon={<Ionicons name="arrow-back" size={16} color={colors.text} />}
523
+ style={styles.navButton}
456
524
  >
457
- <Ionicons name="arrow-back" size={16} color={colors.text} />
458
- <Text style={styles.navButtonText} className="text-foreground">{t('common.actions.back') || 'Back'}</Text>
459
- </TouchableOpacity>
525
+ {t('common.actions.back') || 'Back'}
526
+ </Button>
460
527
  </View>
461
528
  </Animated.View>
462
529
  );
463
530
 
464
531
  const renderSuccessStep = () => (
465
532
  <Animated.View style={[styles.stepContainer, { opacity: fadeAnim, transform: [{ translateX: slideAnim }] }]}>
466
- <View style={styles.successContainer}>
467
- <View style={[styles.successIcon, { backgroundColor: `${colors.success}20`, padding: 24, borderRadius: 50 }]}>
533
+ <View className="w-full items-center justify-center p-space-32 gap-space-16">
534
+ <View className="p-space-24 rounded-radius-max bg-fill-secondary">
468
535
  <Ionicons name="checkmark-circle" size={48} color={colors.success} />
469
536
  </View>
470
- <Text style={styles.successTitle} className="text-foreground">
537
+ <H2 className="text-headerBold font-headerBold text-text text-center">
471
538
  {t('feedback.success.thanks') || 'Thank You!'}
472
- </Text>
473
- <Text style={styles.successMessage} className="text-muted-foreground">
539
+ </H2>
540
+ <Text className="text-body font-body text-text-secondary text-center">
474
541
  {t('feedback.success.message') || "Your feedback has been submitted successfully. We'll review it and get back to you soon."}
475
542
  </Text>
476
- <TouchableOpacity
477
- style={styles.button}
478
- className="bg-primary"
543
+ <Button
544
+ variant="primary"
479
545
  onPress={() => { resetForm(); setCurrentStep(0); }}
480
- accessibilityRole="button"
481
546
  accessibilityLabel="Submit another feedback"
547
+ style={styles.fullWidthButton}
482
548
  >
483
- <Text style={styles.buttonText}>{t('feedback.actions.submitAnother') || 'Submit Another'}</Text>
484
- </TouchableOpacity>
549
+ {t('feedback.actions.submitAnother') || 'Submit Another'}
550
+ </Button>
485
551
  </View>
486
552
  </Animated.View>
487
553
  );
@@ -499,25 +565,50 @@ const FeedbackScreen: React.FC<BaseScreenProps> = ({
499
565
 
500
566
  return (
501
567
  <KeyboardAvoidingView
502
- style={[styles.container, { backgroundColor: colors.background }]}
568
+ className="flex-1 bg-bg"
503
569
  behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
504
570
  >
505
- <StatusBar
506
- barStyle={theme === 'dark' ? 'light-content' : 'dark-content'}
571
+ <Header
572
+ title={t('feedback.title') || 'Feedback'}
573
+ theme={normalizedTheme}
574
+ onBack={goBack || onClose}
575
+ variant="minimal"
576
+ elevation="subtle"
507
577
  />
508
578
 
509
579
  <ScrollView
510
- contentContainerStyle={[styles.scrollContent, { backgroundColor: 'transparent' }]}
580
+ className="flex-1"
581
+ contentContainerClassName="px-screen-margin pt-space-24 pb-space-32"
511
582
  showsVerticalScrollIndicator={false}
512
583
  keyboardShouldPersistTaps="handled"
513
584
  >
514
- {feedbackState.status !== 'success' && (
515
- <ProgressIndicator currentStep={currentStep} totalSteps={4} colors={colors} styles={styles} />
516
- )}
585
+ {feedbackState.status !== 'success' ? renderProgress() : null}
517
586
  {renderCurrentStep()}
518
587
  </ScrollView>
519
588
  </KeyboardAvoidingView>
520
589
  );
521
590
  };
522
591
 
592
+ const styles = StyleSheet.create({
593
+ stepContainer: {
594
+ flex: 1,
595
+ alignItems: 'flex-start',
596
+ },
597
+ navButton: {
598
+ flex: 1,
599
+ },
600
+ fullWidthButton: {
601
+ width: '100%',
602
+ },
603
+ summaryLabel: {
604
+ width: 90,
605
+ },
606
+ progressDot: {
607
+ width: 8,
608
+ },
609
+ progressDotActive: {
610
+ width: 24,
611
+ },
612
+ });
613
+
523
614
  export default FeedbackScreen;