@oxyhq/services 5.7.5 → 5.8.2

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 (303) hide show
  1. package/README.md +76 -76
  2. package/lib/commonjs/core/index.js +177 -102
  3. package/lib/commonjs/core/index.js.map +1 -1
  4. package/lib/commonjs/index.js +69 -28
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/ui/components/Avatar.js +15 -6
  7. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  8. package/lib/commonjs/ui/components/FollowButton.js +100 -12
  9. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  10. package/lib/commonjs/ui/components/GroupedItem.js +58 -13
  11. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -1
  12. package/lib/commonjs/ui/components/GroupedSection.js +7 -1
  13. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -1
  14. package/lib/commonjs/ui/components/Header.js +356 -0
  15. package/lib/commonjs/ui/components/Header.js.map +1 -0
  16. package/lib/commonjs/ui/components/OxyProvider.js +28 -7
  17. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  18. package/lib/commonjs/ui/components/index.js +7 -0
  19. package/lib/commonjs/ui/components/index.js.map +1 -1
  20. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js +1 -1
  21. package/lib/commonjs/ui/components/internal/GroupedPillButtons.js.map +1 -1
  22. package/lib/commonjs/ui/components/internal/TextField.js +606 -546
  23. package/lib/commonjs/ui/components/internal/TextField.js.map +1 -1
  24. package/lib/commonjs/ui/components/internal/TextField.md +436 -0
  25. package/lib/commonjs/ui/context/OxyContext.js +181 -199
  26. package/lib/commonjs/ui/context/OxyContext.js.map +1 -1
  27. package/lib/commonjs/ui/hooks/index.js +6 -0
  28. package/lib/commonjs/ui/hooks/index.js.map +1 -1
  29. package/lib/commonjs/ui/hooks/useFollow.js +59 -2
  30. package/lib/commonjs/ui/hooks/useFollow.js.map +1 -1
  31. package/lib/commonjs/ui/hooks/useSessionSocket.js +5 -2
  32. package/lib/commonjs/ui/hooks/useSessionSocket.js.map +1 -1
  33. package/lib/commonjs/ui/navigation/OxyRouter.js +11 -1
  34. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  35. package/lib/commonjs/ui/screens/AccountCenterScreen.js +6 -6
  36. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  37. package/lib/commonjs/ui/screens/AccountManagementDemo.js +3 -3
  38. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -1
  39. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +241 -598
  40. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +1160 -406
  42. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  43. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +135 -237
  44. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  45. package/lib/commonjs/ui/screens/AppInfoScreen.js +246 -463
  46. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  47. package/lib/commonjs/ui/screens/FeedbackScreen.js +3 -3
  48. package/lib/commonjs/ui/screens/FeedbackScreen.js.map +1 -1
  49. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js +808 -650
  50. package/lib/commonjs/ui/screens/PaymentGatewayScreen.js.map +1 -1
  51. package/lib/commonjs/ui/screens/ProfileScreen.js +214 -37
  52. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  53. package/lib/commonjs/ui/screens/RecoverAccountScreen.js +51 -72
  54. package/lib/commonjs/ui/screens/RecoverAccountScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/SessionManagementScreen.js +11 -29
  56. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  57. package/lib/commonjs/ui/screens/SignInScreen.js +30 -303
  58. package/lib/commonjs/ui/screens/SignInScreen.js.map +1 -1
  59. package/lib/commonjs/ui/screens/SignUpScreen.js +4 -4
  60. package/lib/commonjs/ui/screens/SignUpScreen.js.map +1 -1
  61. package/lib/commonjs/ui/screens/UserLinksScreen.js +90 -0
  62. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -0
  63. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js +19 -31
  64. package/lib/commonjs/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  65. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js +7 -10
  66. package/lib/commonjs/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  67. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js +11 -5
  68. package/lib/commonjs/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  69. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js +11 -4
  70. package/lib/commonjs/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  71. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +9 -6
  72. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  73. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +3 -30
  74. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  75. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js +37 -46
  76. package/lib/commonjs/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  77. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js +9 -12
  78. package/lib/commonjs/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  79. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +9 -12
  80. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  81. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js +9 -12
  82. package/lib/commonjs/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  83. package/lib/commonjs/ui/stores/authStore.js +36 -6
  84. package/lib/commonjs/ui/stores/authStore.js.map +1 -1
  85. package/lib/commonjs/ui/stores/followStore.js +106 -1
  86. package/lib/commonjs/ui/stores/followStore.js.map +1 -1
  87. package/lib/commonjs/ui/styles/authStyles.js +337 -0
  88. package/lib/commonjs/ui/styles/authStyles.js.map +1 -0
  89. package/lib/commonjs/ui/styles/index.js +11 -0
  90. package/lib/commonjs/ui/styles/index.js.map +1 -1
  91. package/lib/module/core/index.js +177 -41
  92. package/lib/module/core/index.js.map +1 -1
  93. package/lib/module/index.js +24 -4
  94. package/lib/module/index.js.map +1 -1
  95. package/lib/module/ui/components/Avatar.js +15 -6
  96. package/lib/module/ui/components/Avatar.js.map +1 -1
  97. package/lib/module/ui/components/FollowButton.js +101 -13
  98. package/lib/module/ui/components/FollowButton.js.map +1 -1
  99. package/lib/module/ui/components/GroupedItem.js +59 -14
  100. package/lib/module/ui/components/GroupedItem.js.map +1 -1
  101. package/lib/module/ui/components/GroupedSection.js +7 -1
  102. package/lib/module/ui/components/GroupedSection.js.map +1 -1
  103. package/lib/module/ui/components/Header.js +351 -0
  104. package/lib/module/ui/components/Header.js.map +1 -0
  105. package/lib/module/ui/components/OxyProvider.js +30 -9
  106. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  107. package/lib/module/ui/components/index.js +1 -0
  108. package/lib/module/ui/components/index.js.map +1 -1
  109. package/lib/module/ui/components/internal/GroupedPillButtons.js +1 -1
  110. package/lib/module/ui/components/internal/GroupedPillButtons.js.map +1 -1
  111. package/lib/module/ui/components/internal/TextField.js +607 -547
  112. package/lib/module/ui/components/internal/TextField.js.map +1 -1
  113. package/lib/module/ui/components/internal/TextField.md +436 -0
  114. package/lib/module/ui/context/OxyContext.js +180 -198
  115. package/lib/module/ui/context/OxyContext.js.map +1 -1
  116. package/lib/module/ui/hooks/index.js +1 -1
  117. package/lib/module/ui/hooks/index.js.map +1 -1
  118. package/lib/module/ui/hooks/useFollow.js +57 -1
  119. package/lib/module/ui/hooks/useFollow.js.map +1 -1
  120. package/lib/module/ui/hooks/useSessionSocket.js +5 -2
  121. package/lib/module/ui/hooks/useSessionSocket.js.map +1 -1
  122. package/lib/module/ui/navigation/OxyRouter.js +11 -1
  123. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  124. package/lib/module/ui/screens/AccountCenterScreen.js +6 -6
  125. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  126. package/lib/module/ui/screens/AccountManagementDemo.js +3 -3
  127. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -1
  128. package/lib/module/ui/screens/AccountOverviewScreen.js +242 -597
  129. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  130. package/lib/module/ui/screens/AccountSettingsScreen.js +1161 -407
  131. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  132. package/lib/module/ui/screens/AccountSwitcherScreen.js +135 -237
  133. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  134. package/lib/module/ui/screens/AppInfoScreen.js +248 -465
  135. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  136. package/lib/module/ui/screens/FeedbackScreen.js +3 -3
  137. package/lib/module/ui/screens/FeedbackScreen.js.map +1 -1
  138. package/lib/module/ui/screens/PaymentGatewayScreen.js +809 -651
  139. package/lib/module/ui/screens/PaymentGatewayScreen.js.map +1 -1
  140. package/lib/module/ui/screens/ProfileScreen.js +214 -37
  141. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  142. package/lib/module/ui/screens/RecoverAccountScreen.js +53 -74
  143. package/lib/module/ui/screens/RecoverAccountScreen.js.map +1 -1
  144. package/lib/module/ui/screens/SessionManagementScreen.js +11 -29
  145. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  146. package/lib/module/ui/screens/SignInScreen.js +32 -305
  147. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  148. package/lib/module/ui/screens/SignUpScreen.js +5 -5
  149. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  150. package/lib/module/ui/screens/UserLinksScreen.js +85 -0
  151. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -0
  152. package/lib/module/ui/screens/internal/SignInPasswordStep.js +19 -31
  153. package/lib/module/ui/screens/internal/SignInPasswordStep.js.map +1 -1
  154. package/lib/module/ui/screens/internal/SignInUsernameStep.js +7 -10
  155. package/lib/module/ui/screens/internal/SignInUsernameStep.js.map +1 -1
  156. package/lib/module/ui/screens/internal/SignUpIdentityStep.js +11 -5
  157. package/lib/module/ui/screens/internal/SignUpIdentityStep.js.map +1 -1
  158. package/lib/module/ui/screens/internal/SignUpSecurityStep.js +11 -4
  159. package/lib/module/ui/screens/internal/SignUpSecurityStep.js.map +1 -1
  160. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +9 -6
  161. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  162. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +3 -30
  163. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  164. package/lib/module/ui/screens/karma/KarmaFAQScreen.js +37 -46
  165. package/lib/module/ui/screens/karma/KarmaFAQScreen.js.map +1 -1
  166. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js +9 -12
  167. package/lib/module/ui/screens/karma/KarmaLeaderboardScreen.js.map +1 -1
  168. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +9 -12
  169. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  170. package/lib/module/ui/screens/karma/KarmaRulesScreen.js +9 -12
  171. package/lib/module/ui/screens/karma/KarmaRulesScreen.js.map +1 -1
  172. package/lib/module/ui/stores/authStore.js +36 -6
  173. package/lib/module/ui/stores/authStore.js.map +1 -1
  174. package/lib/module/ui/stores/followStore.js +106 -1
  175. package/lib/module/ui/stores/followStore.js.map +1 -1
  176. package/lib/module/ui/styles/authStyles.js +332 -0
  177. package/lib/module/ui/styles/authStyles.js.map +1 -0
  178. package/lib/module/ui/styles/index.js +1 -0
  179. package/lib/module/ui/styles/index.js.map +1 -1
  180. package/lib/typescript/core/index.d.ts +68 -24
  181. package/lib/typescript/core/index.d.ts.map +1 -1
  182. package/lib/typescript/index.d.ts +13 -3
  183. package/lib/typescript/index.d.ts.map +1 -1
  184. package/lib/typescript/ui/components/Avatar.d.ts.map +1 -1
  185. package/lib/typescript/ui/components/FollowButton.d.ts +1 -0
  186. package/lib/typescript/ui/components/FollowButton.d.ts.map +1 -1
  187. package/lib/typescript/ui/components/GroupedItem.d.ts +6 -0
  188. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -1
  189. package/lib/typescript/ui/components/GroupedSection.d.ts +6 -0
  190. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -1
  191. package/lib/typescript/ui/components/Header.d.ts +24 -0
  192. package/lib/typescript/ui/components/Header.d.ts.map +1 -0
  193. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  194. package/lib/typescript/ui/components/index.d.ts +1 -0
  195. package/lib/typescript/ui/components/index.d.ts.map +1 -1
  196. package/lib/typescript/ui/components/internal/TextField.d.ts +31 -16
  197. package/lib/typescript/ui/components/internal/TextField.d.ts.map +1 -1
  198. package/lib/typescript/ui/context/OxyContext.d.ts +5 -2
  199. package/lib/typescript/ui/context/OxyContext.d.ts.map +1 -1
  200. package/lib/typescript/ui/hooks/index.d.ts +1 -1
  201. package/lib/typescript/ui/hooks/index.d.ts.map +1 -1
  202. package/lib/typescript/ui/hooks/useFollow.d.ts +20 -0
  203. package/lib/typescript/ui/hooks/useFollow.d.ts.map +1 -1
  204. package/lib/typescript/ui/hooks/useSessionSocket.d.ts.map +1 -1
  205. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  206. package/lib/typescript/ui/navigation/types.d.ts +9 -2
  207. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  208. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  209. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  210. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  211. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  212. package/lib/typescript/ui/screens/PaymentGatewayScreen.d.ts.map +1 -1
  213. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  214. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts +5 -1
  215. package/lib/typescript/ui/screens/RecoverAccountScreen.d.ts.map +1 -1
  216. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  217. package/lib/typescript/ui/screens/SignInScreen.d.ts.map +1 -1
  218. package/lib/typescript/ui/screens/UserLinksScreen.d.ts +15 -0
  219. package/lib/typescript/ui/screens/UserLinksScreen.d.ts.map +1 -0
  220. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts +1 -1
  221. package/lib/typescript/ui/screens/internal/SignInPasswordStep.d.ts.map +1 -1
  222. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts +0 -1
  223. package/lib/typescript/ui/screens/internal/SignInUsernameStep.d.ts.map +1 -1
  224. package/lib/typescript/ui/screens/internal/SignUpIdentityStep.d.ts.map +1 -1
  225. package/lib/typescript/ui/screens/internal/SignUpSecurityStep.d.ts.map +1 -1
  226. package/lib/typescript/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  227. package/lib/typescript/ui/screens/karma/KarmaCenterScreen.d.ts.map +1 -1
  228. package/lib/typescript/ui/screens/karma/KarmaFAQScreen.d.ts.map +1 -1
  229. package/lib/typescript/ui/screens/karma/KarmaLeaderboardScreen.d.ts.map +1 -1
  230. package/lib/typescript/ui/screens/karma/KarmaRewardsScreen.d.ts.map +1 -1
  231. package/lib/typescript/ui/screens/karma/KarmaRulesScreen.d.ts.map +1 -1
  232. package/lib/typescript/ui/stores/authStore.d.ts +3 -1
  233. package/lib/typescript/ui/stores/authStore.d.ts.map +1 -1
  234. package/lib/typescript/ui/stores/followStore.d.ts +10 -0
  235. package/lib/typescript/ui/stores/followStore.d.ts.map +1 -1
  236. package/lib/typescript/ui/styles/authStyles.d.ts +326 -0
  237. package/lib/typescript/ui/styles/authStyles.d.ts.map +1 -0
  238. package/lib/typescript/ui/styles/index.d.ts +1 -0
  239. package/lib/typescript/ui/styles/index.d.ts.map +1 -1
  240. package/package.json +1 -4
  241. package/src/core/index.ts +195 -41
  242. package/src/index.ts +64 -4
  243. package/src/ui/components/Avatar.tsx +11 -5
  244. package/src/ui/components/FollowButton.tsx +95 -11
  245. package/src/ui/components/GroupedItem.tsx +57 -9
  246. package/src/ui/components/GroupedSection.tsx +12 -0
  247. package/src/ui/components/Header.tsx +405 -0
  248. package/src/ui/components/OxyProvider.tsx +37 -15
  249. package/src/ui/components/index.ts +1 -0
  250. package/src/ui/components/internal/GroupedPillButtons.tsx +1 -1
  251. package/src/ui/components/internal/TextField.md +436 -0
  252. package/src/ui/components/internal/TextField.tsx +720 -620
  253. package/src/ui/context/OxyContext.tsx +211 -195
  254. package/src/ui/hooks/index.ts +1 -1
  255. package/src/ui/hooks/useFollow.ts +63 -0
  256. package/src/ui/hooks/useSessionSocket.ts +5 -2
  257. package/src/ui/navigation/OxyRouter.tsx +11 -1
  258. package/src/ui/navigation/types.ts +10 -2
  259. package/src/ui/screens/AccountCenterScreen.tsx +5 -5
  260. package/src/ui/screens/AccountManagementDemo.tsx +9 -9
  261. package/src/ui/screens/AccountOverviewScreen.tsx +265 -414
  262. package/src/ui/screens/AccountSettingsScreen.tsx +1173 -403
  263. package/src/ui/screens/AccountSwitcherScreen.tsx +158 -202
  264. package/src/ui/screens/AppInfoScreen.tsx +270 -497
  265. package/src/ui/screens/FeedbackScreen.tsx +3 -3
  266. package/src/ui/screens/PaymentGatewayScreen.tsx +668 -365
  267. package/src/ui/screens/ProfileScreen.tsx +196 -33
  268. package/src/ui/screens/RecoverAccountScreen.tsx +46 -74
  269. package/src/ui/screens/SessionManagementScreen.tsx +14 -22
  270. package/src/ui/screens/SignInScreen.tsx +27 -294
  271. package/src/ui/screens/SignUpScreen.tsx +5 -5
  272. package/src/ui/screens/UserLinksScreen.tsx +96 -0
  273. package/src/ui/screens/internal/SignInPasswordStep.tsx +11 -22
  274. package/src/ui/screens/internal/SignInUsernameStep.tsx +3 -10
  275. package/src/ui/screens/internal/SignUpIdentityStep.tsx +2 -5
  276. package/src/ui/screens/internal/SignUpSecurityStep.tsx +3 -4
  277. package/src/ui/screens/karma/KarmaAboutScreen.tsx +9 -2
  278. package/src/ui/screens/karma/KarmaCenterScreen.tsx +1 -20
  279. package/src/ui/screens/karma/KarmaFAQScreen.tsx +40 -24
  280. package/src/ui/screens/karma/KarmaLeaderboardScreen.tsx +9 -3
  281. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +9 -3
  282. package/src/ui/screens/karma/KarmaRulesScreen.tsx +9 -3
  283. package/src/ui/stores/authStore.ts +34 -7
  284. package/src/ui/stores/followStore.ts +102 -1
  285. package/src/ui/styles/authStyles.ts +352 -0
  286. package/src/ui/styles/index.ts +1 -0
  287. package/lib/commonjs/core/auth-manager.js +0 -440
  288. package/lib/commonjs/core/auth-manager.js.map +0 -1
  289. package/lib/commonjs/core/use-auth.js +0 -244
  290. package/lib/commonjs/core/use-auth.js.map +0 -1
  291. package/lib/module/core/auth-manager.js +0 -432
  292. package/lib/module/core/auth-manager.js.map +0 -1
  293. package/lib/module/core/use-auth.js +0 -235
  294. package/lib/module/core/use-auth.js.map +0 -1
  295. package/lib/typescript/core/auth-manager.d.ts +0 -136
  296. package/lib/typescript/core/auth-manager.d.ts.map +0 -1
  297. package/lib/typescript/core/use-auth.d.ts +0 -79
  298. package/lib/typescript/core/use-auth.d.ts.map +0 -1
  299. package/src/__tests__/middleware.test.ts +0 -105
  300. package/src/__tests__/setup.ts +0 -10
  301. package/src/__tests__/zero-config-auth.test.ts +0 -607
  302. package/src/core/auth-manager.ts +0 -500
  303. package/src/core/use-auth.tsx +0 -245
@@ -17,7 +17,7 @@ import {
17
17
  } from 'react-native';
18
18
  import { BaseScreenProps } from '../navigation/types';
19
19
  import { useOxy } from '../context/OxyContext';
20
- import { fontFamilies, useThemeColors, createCommonStyles } from '../styles';
20
+ import { fontFamilies, useThemeColors, createCommonStyles, createAuthStyles } from '../styles';
21
21
  import OxyLogo from '../components/OxyLogo';
22
22
  import Avatar from '../components/Avatar';
23
23
  import { Ionicons } from '@expo/vector-icons';
@@ -34,19 +34,25 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
34
34
  goBack,
35
35
  onAuthenticated,
36
36
  theme,
37
+ initialStep,
38
+ username: initialUsername,
39
+ userProfile: initialUserProfile,
37
40
  }) => {
41
+ console.log('SignInScreen props:', { initialStep, initialUsername, initialUserProfile });
38
42
  // Form data states
39
- const [username, setUsername] = useState('');
43
+ const [username, setUsername] = useState(initialUsername || '');
40
44
  const [password, setPassword] = useState('');
41
45
  const [errorMessage, setErrorMessage] = useState('');
42
- const [userProfile, setUserProfile] = useState<any>(null);
46
+ const [userProfile, setUserProfile] = useState<any>(initialUserProfile || null);
43
47
  const [showPassword, setShowPassword] = useState(false);
44
48
 
45
49
  // Multi-step form states
46
- const [currentStep, setCurrentStep] = useState(0);
50
+ const [currentStep, setCurrentStep] = useState(initialStep || 0);
47
51
  const [isInputFocused, setIsInputFocused] = useState(false);
48
52
  const [isValidating, setIsValidating] = useState(false);
49
- const [validationStatus, setValidationStatus] = useState<'idle' | 'validating' | 'valid' | 'invalid'>('idle');
53
+ const [validationStatus, setValidationStatus] = useState<'idle' | 'validating' | 'valid' | 'invalid'>(
54
+ initialUserProfile ? 'valid' : 'idle'
55
+ );
50
56
 
51
57
  // Cache for validation results to prevent repeated API calls
52
58
  const validationCache = useRef<Map<string, { profile: any; timestamp: number }>>(new Map());
@@ -54,9 +60,8 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
54
60
  const fadeAnim = useRef(new Animated.Value(1)).current;
55
61
  const slideAnim = useRef(new Animated.Value(0)).current;
56
62
  const scaleAnim = useRef(new Animated.Value(1)).current;
57
- const inputScaleAnim = useRef(new Animated.Value(1)).current;
58
63
  const logoAnim = useRef(new Animated.Value(0)).current;
59
- const progressAnim = useRef(new Animated.Value(0.5)).current;
64
+ const progressAnim = useRef(new Animated.Value(initialStep ? 1.0 : 0.5)).current;
60
65
 
61
66
  const { login, isLoading, user, isAuthenticated, sessions, oxyServices } = useOxy();
62
67
 
@@ -70,7 +75,7 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
70
75
  );
71
76
 
72
77
  // Memoized styles to prevent rerenders
73
- const styles = useMemo(() => createStyles(colors, theme), [colors, theme]);
78
+ const styles = useMemo(() => createAuthStyles(colors, theme), [colors, theme]);
74
79
 
75
80
  // Initialize logo animation
76
81
  useEffect(() => {
@@ -78,26 +83,18 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
78
83
  toValue: 1,
79
84
  tension: 50,
80
85
  friction: 8,
81
- useNativeDriver: true,
86
+ useNativeDriver: Platform.OS !== 'web',
82
87
  }).start();
83
88
  }, [logoAnim]);
84
89
 
85
- // Input focus animations
90
+ // Input focus handlers (no animation)
86
91
  const handleInputFocus = useCallback(() => {
87
92
  setIsInputFocused(true);
88
- Animated.spring(inputScaleAnim, {
89
- toValue: 1.02,
90
- useNativeDriver: true,
91
- }).start();
92
- }, [inputScaleAnim]);
93
+ }, []);
93
94
 
94
95
  const handleInputBlur = useCallback(() => {
95
96
  setIsInputFocused(false);
96
- Animated.spring(inputScaleAnim, {
97
- toValue: 1,
98
- useNativeDriver: true,
99
- }).start();
100
- }, [inputScaleAnim]);
97
+ }, []);
101
98
 
102
99
  // Memoized input change handlers to prevent re-renders
103
100
  const handleUsernameChange = useCallback((text: string) => {
@@ -233,14 +230,14 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
233
230
  Animated.timing(scaleAnim, {
234
231
  toValue: 0.95,
235
232
  duration: 150,
236
- useNativeDriver: true,
233
+ useNativeDriver: Platform.OS !== 'web',
237
234
  }).start();
238
235
 
239
236
  // Fade out
240
237
  Animated.timing(fadeAnim, {
241
238
  toValue: 0,
242
239
  duration: 200,
243
- useNativeDriver: true,
240
+ useNativeDriver: Platform.OS !== 'web',
244
241
  }).start(() => {
245
242
  setCurrentStep(nextStep);
246
243
 
@@ -253,19 +250,19 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
253
250
  Animated.timing(fadeAnim, {
254
251
  toValue: 1,
255
252
  duration: 300,
256
- useNativeDriver: true,
253
+ useNativeDriver: Platform.OS !== 'web',
257
254
  }),
258
255
  Animated.spring(slideAnim, {
259
256
  toValue: 0,
260
257
  tension: 80,
261
258
  friction: 8,
262
- useNativeDriver: true,
259
+ useNativeDriver: Platform.OS !== 'web',
263
260
  }),
264
261
  Animated.spring(scaleAnim, {
265
262
  toValue: 1,
266
263
  tension: 80,
267
264
  friction: 8,
268
- useNativeDriver: true,
265
+ useNativeDriver: Platform.OS !== 'web',
269
266
  })
270
267
  ]).start();
271
268
  });
@@ -345,7 +342,6 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
345
342
  isAddAccountMode={isAddAccountMode}
346
343
  user={user}
347
344
  errorMessage={errorMessage}
348
- inputScaleAnim={inputScaleAnim}
349
345
  isInputFocused={isInputFocused}
350
346
  username={username}
351
347
  validationStatus={validationStatus}
@@ -359,7 +355,7 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
359
355
  />
360
356
  ), [
361
357
  fadeAnim, slideAnim, scaleAnim, colors, isAddAccountMode, user?.username,
362
- errorMessage, inputScaleAnim, isInputFocused, username, validationStatus,
358
+ errorMessage, isInputFocused, username, validationStatus,
363
359
  userProfile, isValidating, handleInputFocus, handleInputBlur, handleUsernameChange,
364
360
  handleUsernameContinue, navigate, styles
365
361
  ]);
@@ -376,7 +372,6 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
376
372
  theme={theme}
377
373
  logoAnim={logoAnim}
378
374
  errorMessage={errorMessage}
379
- inputScaleAnim={inputScaleAnim}
380
375
  isInputFocused={isInputFocused}
381
376
  password={password}
382
377
  showPassword={showPassword}
@@ -386,11 +381,12 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
386
381
  handleSignIn={handleSignIn}
387
382
  isLoading={isLoading}
388
383
  prevStep={prevStep}
384
+ navigate={navigate}
389
385
  />
390
386
  ), [
391
387
  fadeAnim, slideAnim, scaleAnim, colors, userProfile, username, theme, logoAnim,
392
- errorMessage, inputScaleAnim, isInputFocused, password, showPassword,
393
- handleInputFocus, handleInputBlur, handlePasswordChange, handleSignIn, isLoading, prevStep, styles
388
+ errorMessage, isInputFocused, password, showPassword,
389
+ handleInputFocus, handleInputBlur, handlePasswordChange, handleSignIn, isLoading, prevStep, styles, navigate
394
390
  ]);
395
391
 
396
392
  const renderCurrentStep = useCallback(() => {
@@ -420,274 +416,11 @@ const SignInScreen: React.FC<BaseScreenProps> = ({
420
416
  keyboardShouldPersistTaps="handled"
421
417
  >
422
418
  {renderCurrentStep()}
423
- <View style={styles.footerTextContainer}>
424
- <Text style={[styles.footerText, { color: colors.text }]}>Forgot your password? </Text>
425
- <TouchableOpacity onPress={() => navigate('RecoverAccount')}>
426
- <Text style={[styles.modernLinkText, { color: colors.primary }]}>Recover your account</Text>
427
- </TouchableOpacity>
428
- </View>
429
419
  </ScrollView>
430
420
  </KeyboardAvoidingView>
431
421
  );
432
422
  };
433
423
 
434
- // Memoized styles creation
435
- const createStyles = (colors: any, theme: string) => StyleSheet.create({
436
- container: {
437
- flex: 1,
438
- },
439
- scrollContent: {
440
- flexGrow: 1,
441
- paddingHorizontal: 24,
442
- paddingTop: 4,
443
- paddingBottom: 20,
444
- },
445
- stepContainer: {
446
- flex: 1,
447
- justifyContent: 'flex-start',
448
- alignItems: 'flex-start',
449
- },
450
- modernHeader: {
451
- alignItems: 'flex-start',
452
- width: '100%',
453
- marginBottom: 24,
454
- },
455
- modernTitle: {
456
- fontFamily: Platform.OS === 'web' ? 'Phudu' : 'Phudu-Bold',
457
- fontWeight: Platform.OS === 'web' ? 'bold' : undefined,
458
- fontSize: 62,
459
- lineHeight: 48,
460
- marginBottom: 18,
461
- textAlign: 'left',
462
- letterSpacing: -1,
463
- },
464
- modernSubtitle: {
465
- fontSize: 18,
466
- lineHeight: 24,
467
- textAlign: 'left',
468
- opacity: 0.8,
469
- },
470
- modernInfoCard: {
471
- flexDirection: 'row',
472
- alignItems: 'center',
473
- padding: 16,
474
- borderRadius: 16,
475
- marginBottom: 24,
476
- gap: 12,
477
- width: '100%',
478
- },
479
- modernInfoText: {
480
- fontSize: 14,
481
- flex: 1,
482
- },
483
- modernErrorCard: {
484
- flexDirection: 'row',
485
- alignItems: 'center',
486
- padding: 16,
487
- borderRadius: 16,
488
- marginBottom: 24,
489
- gap: 12,
490
- width: '100%',
491
- },
492
- errorText: {
493
- fontSize: 14,
494
- fontWeight: '500',
495
- flex: 1,
496
- },
497
- modernInputContainer: {
498
- width: '100%',
499
- marginBottom: 24,
500
- },
501
- inputWrapper: {
502
- flexDirection: 'row',
503
- alignItems: 'center',
504
- height: 56,
505
- borderRadius: 16,
506
- paddingHorizontal: 20,
507
- borderWidth: 2,
508
- backgroundColor: colors.inputBackground,
509
- },
510
- inputIcon: {
511
- marginRight: 12,
512
- },
513
- modernInput: {
514
- flex: 1,
515
- fontSize: 16,
516
- height: '100%',
517
- },
518
- passwordToggle: {
519
- padding: 4,
520
- },
521
- validationIndicator: {
522
- marginLeft: 8,
523
- },
524
- validationSuccessCard: {
525
- flexDirection: 'row',
526
- alignItems: 'center',
527
- padding: 12,
528
- borderRadius: 12,
529
- marginTop: 8,
530
- gap: 8,
531
- },
532
- belowInputMessage: {
533
- flexDirection: 'row',
534
- alignItems: 'center',
535
- marginTop: 4,
536
- marginBottom: 0,
537
- gap: 6,
538
- },
539
- belowInputText: {
540
- fontSize: 13,
541
- fontWeight: '500',
542
- },
543
- validationErrorCard: {
544
- flexDirection: 'row',
545
- alignItems: 'center',
546
- padding: 12,
547
- borderRadius: 12,
548
- marginTop: 8,
549
- gap: 8,
550
- },
551
- validationText: {
552
- fontSize: 12,
553
- fontWeight: '500',
554
- },
555
- modernButton: {
556
- flexDirection: 'row',
557
- alignItems: 'center',
558
- justifyContent: 'center',
559
- paddingVertical: 18,
560
- paddingHorizontal: 32,
561
- borderRadius: 16,
562
- marginVertical: 8,
563
- shadowOffset: {
564
- width: 0,
565
- height: 4,
566
- },
567
- shadowOpacity: 0.3,
568
- shadowRadius: 8,
569
- elevation: 6,
570
- gap: 8,
571
- width: '100%',
572
- },
573
- modernButtonText: {
574
- color: '#FFFFFF',
575
- fontSize: 16,
576
- fontWeight: '600',
577
- letterSpacing: 0.5,
578
- },
579
- buttonIcon: {
580
- marginLeft: 4,
581
- },
582
-
583
- // Enhanced Label Styles
584
- modernLabel: {
585
- fontSize: 12,
586
- fontWeight: '500',
587
- marginBottom: 2,
588
- },
589
- modernLinkText: {
590
- fontSize: 14,
591
- lineHeight: 20,
592
- fontWeight: '600',
593
- textDecorationLine: 'underline',
594
- },
595
- footerTextContainer: {
596
- flexDirection: 'row',
597
- justifyContent: 'center',
598
- marginTop: 16,
599
- },
600
- footerText: {
601
- fontSize: 15,
602
- },
603
-
604
- // Modern User Profile Styles
605
- modernUserProfileContainer: {
606
- alignItems: 'center',
607
- marginBottom: 32,
608
- paddingVertical: 24,
609
- },
610
- avatarContainer: {
611
- position: 'relative',
612
- marginBottom: 20,
613
- },
614
- modernUserAvatar: {
615
- borderWidth: 4,
616
- borderColor: 'rgba(209, 105, 229, 0.2)',
617
- },
618
- statusIndicator: {
619
- position: 'absolute',
620
- bottom: 4,
621
- right: 4,
622
- width: 20,
623
- height: 20,
624
- borderRadius: 10,
625
- borderWidth: 3,
626
- borderColor: '#FFFFFF',
627
- },
628
- modernUserDisplayName: {
629
- fontSize: 26,
630
- fontWeight: '700',
631
- marginBottom: 4,
632
- textAlign: 'center',
633
- letterSpacing: -0.5,
634
- },
635
- modernUsernameSubtext: {
636
- fontSize: 16,
637
- textAlign: 'center',
638
- marginBottom: 16,
639
- opacity: 0.7,
640
- },
641
- welcomeBackBadge: {
642
- flexDirection: 'row',
643
- alignItems: 'center',
644
- paddingHorizontal: 12,
645
- paddingVertical: 6,
646
- borderRadius: 20,
647
- gap: 6,
648
- },
649
- welcomeBackText: {
650
- fontSize: 12,
651
- fontWeight: '600',
652
- textTransform: 'uppercase',
653
- letterSpacing: 0.5,
654
- },
655
-
656
- // Modern Navigation
657
- modernNavigationButtons: {
658
- flexDirection: 'row',
659
- justifyContent: 'center',
660
- marginTop: 16,
661
- marginBottom: 8,
662
- width: '100%',
663
- gap: 8,
664
- },
665
- modernBackButton: {
666
- flexDirection: 'row',
667
- alignItems: 'center',
668
- paddingVertical: 12,
669
- paddingHorizontal: 20,
670
- borderRadius: 12,
671
- borderWidth: 1,
672
- gap: 8,
673
- },
674
- modernBackButtonText: {
675
- fontSize: 16,
676
- fontWeight: '500',
677
- },
678
-
679
- // Security Notice
680
- securityNotice: {
681
- flexDirection: 'row',
682
- alignItems: 'center',
683
- justifyContent: 'center',
684
- marginTop: 20,
685
- gap: 6,
686
- },
687
- securityText: {
688
- fontSize: 12,
689
- fontWeight: '500',
690
- },
691
- });
424
+
692
425
 
693
426
  export default SignInScreen;
@@ -15,7 +15,7 @@ import {
15
15
  } from 'react-native';
16
16
  import { BaseScreenProps } from '../navigation/types';
17
17
  import { useOxy } from '../context/OxyContext';
18
- import { useThemeColors, createCommonStyles } from '../styles';
18
+ import { useThemeColors, createCommonStyles, createAuthStyles } from '../styles';
19
19
  import { Ionicons } from '@expo/vector-icons';
20
20
  import Svg, { Path, Circle } from 'react-native-svg';
21
21
  import { toast } from '../../lib/sonner';
@@ -635,7 +635,7 @@ const SignUpScreen: React.FC<BaseScreenProps> = ({
635
635
  const slideAnim = useRef(new Animated.Value(0)).current;
636
636
 
637
637
  // Memoized styles
638
- const styles = useMemo(() => createStyles(colors, theme), [colors, theme]);
638
+ const styles = useMemo(() => createAuthStyles(colors, theme), [colors, theme]);
639
639
 
640
640
  // Debounced username validation
641
641
  useEffect(() => {
@@ -655,7 +655,7 @@ const SignUpScreen: React.FC<BaseScreenProps> = ({
655
655
  Animated.timing(fadeAnim, {
656
656
  toValue: 0,
657
657
  duration: 250,
658
- useNativeDriver: true,
658
+ useNativeDriver: Platform.OS !== 'web',
659
659
  }).start(() => {
660
660
  setCurrentStep(nextStep);
661
661
  slideAnim.setValue(-100);
@@ -664,12 +664,12 @@ const SignUpScreen: React.FC<BaseScreenProps> = ({
664
664
  Animated.timing(fadeAnim, {
665
665
  toValue: 1,
666
666
  duration: 250,
667
- useNativeDriver: true,
667
+ useNativeDriver: Platform.OS !== 'web',
668
668
  }),
669
669
  Animated.timing(slideAnim, {
670
670
  toValue: 0,
671
671
  duration: 300,
672
- useNativeDriver: true,
672
+ useNativeDriver: Platform.OS !== 'web',
673
673
  })
674
674
  ]).start();
675
675
  });
@@ -0,0 +1,96 @@
1
+ import React from 'react';
2
+ import { View, Text, StyleSheet, ScrollView, TouchableOpacity, Image, Linking } from 'react-native';
3
+ import { Ionicons } from '@expo/vector-icons';
4
+ import { BaseScreenProps } from '../navigation/types';
5
+ import { Header, GroupedSection } from '../components';
6
+
7
+ interface UserLinksScreenProps extends BaseScreenProps {
8
+ userId: string;
9
+ links: Array<{
10
+ url: string;
11
+ title?: string;
12
+ description?: string;
13
+ image?: string;
14
+ id: string;
15
+ }>;
16
+ }
17
+
18
+ const UserLinksScreen: React.FC<UserLinksScreenProps> = ({
19
+ userId,
20
+ links,
21
+ theme,
22
+ goBack,
23
+ navigate
24
+ }) => {
25
+ const isDarkTheme = theme === 'dark';
26
+ const themeStyles = {
27
+ backgroundColor: isDarkTheme ? '#000' : '#f2f2f2',
28
+ textColor: isDarkTheme ? '#fff' : '#333',
29
+ primaryColor: '#007AFF',
30
+ };
31
+
32
+ const handleLinkPress = async (url: string) => {
33
+ try {
34
+ await Linking.openURL(url);
35
+ } catch (error) {
36
+ console.error('Error opening link:', error);
37
+ }
38
+ };
39
+
40
+ const groupedItems = links.map((link) => ({
41
+ id: link.id,
42
+ icon: link.image ? undefined : 'link',
43
+ iconColor: '#32D74B',
44
+ image: link.image || undefined,
45
+ imageSize: 40,
46
+ title: link.title || link.url,
47
+ subtitle: link.description || link.url,
48
+ onPress: () => handleLinkPress(link.url),
49
+ multiRow: true,
50
+ }));
51
+
52
+ return (
53
+ <View style={[styles.container, { backgroundColor: themeStyles.backgroundColor }]}>
54
+ <Header
55
+ title="Links"
56
+ subtitle={`${links.length} link${links.length !== 1 ? 's' : ''}`}
57
+ theme={theme}
58
+ onBack={goBack}
59
+ elevation="subtle"
60
+ />
61
+
62
+ <ScrollView style={styles.content}>
63
+ <View style={styles.section}>
64
+ <Text style={[styles.sectionTitle, { color: themeStyles.textColor }]}>Links</Text>
65
+
66
+ <GroupedSection
67
+ items={groupedItems}
68
+ theme={theme}
69
+ />
70
+ </View>
71
+ </ScrollView>
72
+ </View>
73
+ );
74
+ };
75
+
76
+ const styles = StyleSheet.create({
77
+ container: {
78
+ flex: 1,
79
+ backgroundColor: '#f2f2f2',
80
+ },
81
+ content: {
82
+ flex: 1,
83
+ padding: 16,
84
+ },
85
+ section: {
86
+ marginBottom: 24,
87
+ },
88
+ sectionTitle: {
89
+ fontSize: 16,
90
+ fontWeight: '600',
91
+ color: '#333',
92
+ marginBottom: 12,
93
+ },
94
+ });
95
+
96
+ export default UserLinksScreen;
@@ -4,7 +4,6 @@ import { Ionicons } from '@expo/vector-icons';
4
4
  import Avatar from '../../components/Avatar';
5
5
  import GroupedPillButtons from '../../components/internal/GroupedPillButtons';
6
6
  import TextField from '../../components/internal/TextField';
7
- import { useNavigation } from '@react-navigation/native';
8
7
 
9
8
  interface SignInPasswordStepProps {
10
9
  styles: any;
@@ -17,7 +16,6 @@ interface SignInPasswordStepProps {
17
16
  theme: string;
18
17
  logoAnim: Animated.Value;
19
18
  errorMessage: string;
20
- inputScaleAnim: Animated.Value;
21
19
  isInputFocused: boolean;
22
20
  password: string;
23
21
  showPassword: boolean;
@@ -27,6 +25,7 @@ interface SignInPasswordStepProps {
27
25
  handleSignIn: () => void;
28
26
  isLoading: boolean;
29
27
  prevStep: () => void;
28
+ navigate: (screen: string, props?: Record<string, any>) => void;
30
29
  }
31
30
 
32
31
  const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
@@ -40,7 +39,6 @@ const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
40
39
  theme,
41
40
  logoAnim,
42
41
  errorMessage,
43
- inputScaleAnim,
44
42
  isInputFocused,
45
43
  password,
46
44
  showPassword,
@@ -50,14 +48,10 @@ const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
50
48
  handleSignIn: parentHandleSignIn,
51
49
  isLoading,
52
50
  prevStep,
51
+ navigate,
53
52
  }) => {
54
- const navigation = useNavigation();
55
53
  const inputRef = useRef<TextInput>(null);
56
54
 
57
- const navigate = useCallback((screen: string) => {
58
- navigation.navigate(screen as never);
59
- }, [navigation]);
60
-
61
55
  // Focus password input on error or when step becomes active
62
56
  useEffect(() => {
63
57
  if (errorMessage) {
@@ -98,6 +92,7 @@ const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
98
92
  size={100}
99
93
  theme={theme as 'light' | 'dark'}
100
94
  style={styles.modernUserAvatar}
95
+ backgroundColor={colors.primary + '20'}
101
96
  />
102
97
  <View style={[styles.statusIndicator, { backgroundColor: colors.primary }]} />
103
98
  </Animated.View>
@@ -107,21 +102,12 @@ const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
107
102
  <Text style={[styles.modernUsernameSubtext, { color: colors.secondaryText }]}>
108
103
  @{username}
109
104
  </Text>
110
- <View style={[styles.welcomeBackBadge, { backgroundColor: colors.primary + '15' }]}>
111
- <Ionicons name="checkmark-circle" size={16} color={colors.primary} />
112
- <Text style={[styles.welcomeBackText, { color: colors.primary }]}>
113
- Welcome back!
114
- </Text>
115
- </View>
116
105
  </View>
117
- <Animated.View style={[
118
- styles.modernInputContainer,
119
- { transform: [{ scale: inputScaleAnim }] }
120
- ]}>
106
+ <View style={styles.modernInputContainer}>
121
107
  <TextField
122
108
  ref={inputRef}
123
109
  label="Password"
124
- icon="lock-closed-outline"
110
+ leading={<Ionicons name="lock-closed-outline" size={24} color={colors.secondaryText} />}
125
111
  value={password}
126
112
  onChangeText={handlePasswordChange}
127
113
  onFocus={handleInputFocus}
@@ -130,7 +116,6 @@ const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
130
116
  autoCapitalize="none"
131
117
  autoCorrect={false}
132
118
  testID="password-input"
133
- colors={colors}
134
119
  variant="filled"
135
120
  error={errorMessage || undefined}
136
121
  onSubmitEditing={handleSignIn}
@@ -138,11 +123,15 @@ const SignInPasswordStep: React.FC<SignInPasswordStepProps> = ({
138
123
  />
139
124
  <View style={{ flexDirection: 'row', alignItems: 'center', marginBottom: 16 }}>
140
125
  <Text style={[styles.footerText, { color: colors.text }]}>Forgot your password? </Text>
141
- <TouchableOpacity onPress={() => navigate('RecoverAccount')}>
126
+ <TouchableOpacity onPress={() => navigate('RecoverAccount', {
127
+ returnTo: 'SignIn',
128
+ returnStep: 1,
129
+ returnData: { username, userProfile }
130
+ })}>
142
131
  <Text style={[styles.modernLinkText, { color: colors.primary }]}>Recover your account</Text>
143
132
  </TouchableOpacity>
144
133
  </View>
145
- </Animated.View>
134
+ </View>
146
135
  <GroupedPillButtons
147
136
  buttons={[
148
137
  {