@oxyhq/services 5.21.7 → 5.22.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 (392) hide show
  1. package/README.md +201 -2
  2. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  3. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  4. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  5. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  6. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  7. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  8. package/lib/commonjs/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  9. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  10. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  11. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  12. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  13. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  14. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  15. package/lib/commonjs/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  16. package/lib/commonjs/core/HttpService.js +87 -2
  17. package/lib/commonjs/core/HttpService.js.map +1 -1
  18. package/lib/commonjs/core/mixins/OxyServices.assets.js +3 -1
  19. package/lib/commonjs/core/mixins/OxyServices.assets.js.map +1 -1
  20. package/lib/commonjs/i18n/locales/en-US.json +3 -3
  21. package/lib/commonjs/i18n/locales/es-ES.json +240 -19
  22. package/lib/commonjs/ui/components/Avatar.js +1 -1
  23. package/lib/commonjs/ui/components/Avatar.js.map +1 -1
  24. package/lib/commonjs/ui/components/FollowButton.js +1 -1
  25. package/lib/commonjs/ui/components/FollowButton.js.map +1 -1
  26. package/lib/commonjs/ui/components/FontLoader.js +34 -34
  27. package/lib/commonjs/ui/components/FontLoader.js.map +1 -1
  28. package/lib/commonjs/ui/components/Header.js +4 -4
  29. package/lib/commonjs/ui/components/Header.js.map +1 -1
  30. package/lib/commonjs/ui/components/OxyPayButton.js +1 -1
  31. package/lib/commonjs/ui/components/OxyPayButton.js.map +1 -1
  32. package/lib/commonjs/ui/components/OxySignInButton.js +2 -1
  33. package/lib/commonjs/ui/components/OxySignInButton.js.map +1 -1
  34. package/lib/commonjs/ui/components/ProfileCard.js +1 -1
  35. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -1
  36. package/lib/commonjs/ui/components/SectionTitle.js +1 -1
  37. package/lib/commonjs/ui/components/SectionTitle.js.map +1 -1
  38. package/lib/commonjs/ui/components/StepBasedScreen.js +2 -1
  39. package/lib/commonjs/ui/components/StepBasedScreen.js.map +1 -1
  40. package/lib/commonjs/ui/components/feedback/feedbackStyles.js +2 -1
  41. package/lib/commonjs/ui/components/feedback/feedbackStyles.js.map +1 -1
  42. package/lib/commonjs/ui/components/fileManagement/styles.js +17 -17
  43. package/lib/commonjs/ui/components/fileManagement/styles.js.map +1 -1
  44. package/lib/commonjs/ui/components/payment/paymentStyles.js +7 -7
  45. package/lib/commonjs/ui/components/payment/paymentStyles.js.map +1 -1
  46. package/lib/commonjs/ui/navigation/routes.js +2 -0
  47. package/lib/commonjs/ui/navigation/routes.js.map +1 -1
  48. package/lib/commonjs/ui/screens/AccountCenterScreen.js +4 -2
  49. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  50. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +13 -5
  51. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  52. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +273 -1820
  53. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +1 -1
  55. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  56. package/lib/commonjs/ui/screens/AccountVerificationScreen.js +3 -1
  57. package/lib/commonjs/ui/screens/AccountVerificationScreen.js.map +1 -1
  58. package/lib/commonjs/ui/screens/AppInfoScreen.js +2 -2
  59. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  60. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js +640 -0
  61. package/lib/commonjs/ui/screens/EditProfileFieldScreen.js.map +1 -0
  62. package/lib/commonjs/ui/screens/FileManagementScreen.js +39 -21
  63. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -1
  64. package/lib/commonjs/ui/screens/HistoryViewScreen.js +9 -3
  65. package/lib/commonjs/ui/screens/HistoryViewScreen.js.map +1 -1
  66. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js +4 -2
  67. package/lib/commonjs/ui/screens/LanguageSelectorScreen.js.map +1 -1
  68. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js +3 -1
  69. package/lib/commonjs/ui/screens/LegalDocumentsScreen.js.map +1 -1
  70. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +11 -12
  71. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  72. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js +12 -4
  73. package/lib/commonjs/ui/screens/PrivacySettingsScreen.js.map +1 -1
  74. package/lib/commonjs/ui/screens/SearchSettingsScreen.js +3 -1
  75. package/lib/commonjs/ui/screens/SearchSettingsScreen.js.map +1 -1
  76. package/lib/commonjs/ui/screens/SessionManagementScreen.js +15 -5
  77. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  78. package/lib/commonjs/ui/screens/UserLinksScreen.js +3 -1
  79. package/lib/commonjs/ui/screens/UserLinksScreen.js.map +1 -1
  80. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js +2 -1
  81. package/lib/commonjs/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  82. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js +2 -4
  83. package/lib/commonjs/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  84. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js +3 -3
  85. package/lib/commonjs/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  86. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js +3 -3
  87. package/lib/commonjs/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  88. package/lib/commonjs/ui/styles/authStyles.js +5 -4
  89. package/lib/commonjs/ui/styles/authStyles.js.map +1 -1
  90. package/lib/commonjs/ui/styles/fonts.js +27 -27
  91. package/lib/commonjs/ui/styles/fonts.js.map +1 -1
  92. package/lib/commonjs/ui/styles/theme.js +3 -3
  93. package/lib/commonjs/ui/styles/theme.js.map +1 -1
  94. package/lib/commonjs/web.js +682 -0
  95. package/lib/commonjs/web.js.map +1 -0
  96. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  97. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  98. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  99. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  100. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  101. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  102. package/lib/module/assets/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  103. package/lib/module/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  104. package/lib/module/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  105. package/lib/module/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  106. package/lib/module/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  107. package/lib/module/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  108. package/lib/module/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  109. package/lib/module/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  110. package/lib/module/core/HttpService.js +87 -2
  111. package/lib/module/core/HttpService.js.map +1 -1
  112. package/lib/module/core/mixins/OxyServices.assets.js +3 -1
  113. package/lib/module/core/mixins/OxyServices.assets.js.map +1 -1
  114. package/lib/module/i18n/locales/en-US.json +3 -3
  115. package/lib/module/i18n/locales/es-ES.json +240 -19
  116. package/lib/module/ui/components/Avatar.js +1 -1
  117. package/lib/module/ui/components/Avatar.js.map +1 -1
  118. package/lib/module/ui/components/FollowButton.js +1 -1
  119. package/lib/module/ui/components/FollowButton.js.map +1 -1
  120. package/lib/module/ui/components/FontLoader.js +34 -34
  121. package/lib/module/ui/components/FontLoader.js.map +1 -1
  122. package/lib/module/ui/components/Header.js +4 -4
  123. package/lib/module/ui/components/Header.js.map +1 -1
  124. package/lib/module/ui/components/OxyPayButton.js +1 -1
  125. package/lib/module/ui/components/OxyPayButton.js.map +1 -1
  126. package/lib/module/ui/components/OxySignInButton.js +2 -1
  127. package/lib/module/ui/components/OxySignInButton.js.map +1 -1
  128. package/lib/module/ui/components/ProfileCard.js +1 -1
  129. package/lib/module/ui/components/ProfileCard.js.map +1 -1
  130. package/lib/module/ui/components/SectionTitle.js +1 -1
  131. package/lib/module/ui/components/SectionTitle.js.map +1 -1
  132. package/lib/module/ui/components/StepBasedScreen.js +2 -1
  133. package/lib/module/ui/components/StepBasedScreen.js.map +1 -1
  134. package/lib/module/ui/components/feedback/feedbackStyles.js +2 -1
  135. package/lib/module/ui/components/feedback/feedbackStyles.js.map +1 -1
  136. package/lib/module/ui/components/fileManagement/styles.js +17 -17
  137. package/lib/module/ui/components/fileManagement/styles.js.map +1 -1
  138. package/lib/module/ui/components/payment/paymentStyles.js +7 -7
  139. package/lib/module/ui/components/payment/paymentStyles.js.map +1 -1
  140. package/lib/module/ui/navigation/routes.js +2 -0
  141. package/lib/module/ui/navigation/routes.js.map +1 -1
  142. package/lib/module/ui/screens/AccountCenterScreen.js +4 -2
  143. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  144. package/lib/module/ui/screens/AccountOverviewScreen.js +13 -5
  145. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  146. package/lib/module/ui/screens/AccountSettingsScreen.js +277 -1824
  147. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  148. package/lib/module/ui/screens/AccountSwitcherScreen.js +1 -1
  149. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  150. package/lib/module/ui/screens/AccountVerificationScreen.js +3 -1
  151. package/lib/module/ui/screens/AccountVerificationScreen.js.map +1 -1
  152. package/lib/module/ui/screens/AppInfoScreen.js +2 -2
  153. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  154. package/lib/module/ui/screens/EditProfileFieldScreen.js +635 -0
  155. package/lib/module/ui/screens/EditProfileFieldScreen.js.map +1 -0
  156. package/lib/module/ui/screens/FileManagementScreen.js +39 -21
  157. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -1
  158. package/lib/module/ui/screens/HistoryViewScreen.js +9 -3
  159. package/lib/module/ui/screens/HistoryViewScreen.js.map +1 -1
  160. package/lib/module/ui/screens/LanguageSelectorScreen.js +4 -2
  161. package/lib/module/ui/screens/LanguageSelectorScreen.js.map +1 -1
  162. package/lib/module/ui/screens/LegalDocumentsScreen.js +3 -1
  163. package/lib/module/ui/screens/LegalDocumentsScreen.js.map +1 -1
  164. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +11 -12
  165. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -1
  166. package/lib/module/ui/screens/PrivacySettingsScreen.js +12 -4
  167. package/lib/module/ui/screens/PrivacySettingsScreen.js.map +1 -1
  168. package/lib/module/ui/screens/SearchSettingsScreen.js +3 -1
  169. package/lib/module/ui/screens/SearchSettingsScreen.js.map +1 -1
  170. package/lib/module/ui/screens/SessionManagementScreen.js +15 -5
  171. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  172. package/lib/module/ui/screens/UserLinksScreen.js +3 -1
  173. package/lib/module/ui/screens/UserLinksScreen.js.map +1 -1
  174. package/lib/module/ui/screens/WelcomeNewUserScreen.js +2 -1
  175. package/lib/module/ui/screens/WelcomeNewUserScreen.js.map +1 -1
  176. package/lib/module/ui/screens/karma/KarmaAboutScreen.js +2 -4
  177. package/lib/module/ui/screens/karma/KarmaAboutScreen.js.map +1 -1
  178. package/lib/module/ui/screens/karma/KarmaCenterScreen.js +3 -3
  179. package/lib/module/ui/screens/karma/KarmaCenterScreen.js.map +1 -1
  180. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js +3 -3
  181. package/lib/module/ui/screens/karma/KarmaRewardsScreen.js.map +1 -1
  182. package/lib/module/ui/styles/authStyles.js +5 -4
  183. package/lib/module/ui/styles/authStyles.js.map +1 -1
  184. package/lib/module/ui/styles/fonts.js +27 -27
  185. package/lib/module/ui/styles/fonts.js.map +1 -1
  186. package/lib/module/ui/styles/theme.js +3 -3
  187. package/lib/module/ui/styles/theme.js.map +1 -1
  188. package/lib/module/web.js +75 -0
  189. package/lib/module/web.js.map +1 -0
  190. package/lib/typescript/commonjs/core/HttpService.d.ts +5 -0
  191. package/lib/typescript/commonjs/core/HttpService.d.ts.map +1 -1
  192. package/lib/typescript/commonjs/ui/components/OxySignInButton.d.ts.map +1 -1
  193. package/lib/typescript/commonjs/ui/components/StepBasedScreen.d.ts.map +1 -1
  194. package/lib/typescript/commonjs/ui/components/feedback/feedbackStyles.d.ts.map +1 -1
  195. package/lib/typescript/commonjs/ui/navigation/routes.d.ts +1 -1
  196. package/lib/typescript/commonjs/ui/navigation/routes.d.ts.map +1 -1
  197. package/lib/typescript/commonjs/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  198. package/lib/typescript/commonjs/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  199. package/lib/typescript/commonjs/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  200. package/lib/typescript/commonjs/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  201. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts +13 -0
  202. package/lib/typescript/commonjs/ui/screens/EditProfileFieldScreen.d.ts.map +1 -0
  203. package/lib/typescript/commonjs/ui/screens/FileManagementScreen.d.ts.map +1 -1
  204. package/lib/typescript/commonjs/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  205. package/lib/typescript/commonjs/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  206. package/lib/typescript/commonjs/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  207. package/lib/typescript/commonjs/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  208. package/lib/typescript/commonjs/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  209. package/lib/typescript/commonjs/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  210. package/lib/typescript/commonjs/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  211. package/lib/typescript/commonjs/ui/screens/UserLinksScreen.d.ts.map +1 -1
  212. package/lib/typescript/commonjs/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  213. package/lib/typescript/commonjs/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  214. package/lib/typescript/commonjs/ui/styles/fonts.d.ts +7 -7
  215. package/lib/typescript/commonjs/ui/styles/theme.d.ts.map +1 -1
  216. package/lib/typescript/commonjs/web.d.ts +54 -0
  217. package/lib/typescript/commonjs/web.d.ts.map +1 -0
  218. package/lib/typescript/module/core/HttpService.d.ts +5 -0
  219. package/lib/typescript/module/core/HttpService.d.ts.map +1 -1
  220. package/lib/typescript/module/ui/components/OxySignInButton.d.ts.map +1 -1
  221. package/lib/typescript/module/ui/components/StepBasedScreen.d.ts.map +1 -1
  222. package/lib/typescript/module/ui/components/feedback/feedbackStyles.d.ts.map +1 -1
  223. package/lib/typescript/module/ui/navigation/routes.d.ts +1 -1
  224. package/lib/typescript/module/ui/navigation/routes.d.ts.map +1 -1
  225. package/lib/typescript/module/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  226. package/lib/typescript/module/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  227. package/lib/typescript/module/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  228. package/lib/typescript/module/ui/screens/AccountVerificationScreen.d.ts.map +1 -1
  229. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts +13 -0
  230. package/lib/typescript/module/ui/screens/EditProfileFieldScreen.d.ts.map +1 -0
  231. package/lib/typescript/module/ui/screens/FileManagementScreen.d.ts.map +1 -1
  232. package/lib/typescript/module/ui/screens/HistoryViewScreen.d.ts.map +1 -1
  233. package/lib/typescript/module/ui/screens/LanguageSelectorScreen.d.ts.map +1 -1
  234. package/lib/typescript/module/ui/screens/LegalDocumentsScreen.d.ts.map +1 -1
  235. package/lib/typescript/module/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -1
  236. package/lib/typescript/module/ui/screens/PrivacySettingsScreen.d.ts.map +1 -1
  237. package/lib/typescript/module/ui/screens/SearchSettingsScreen.d.ts.map +1 -1
  238. package/lib/typescript/module/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  239. package/lib/typescript/module/ui/screens/UserLinksScreen.d.ts.map +1 -1
  240. package/lib/typescript/module/ui/screens/WelcomeNewUserScreen.d.ts.map +1 -1
  241. package/lib/typescript/module/ui/screens/karma/KarmaAboutScreen.d.ts.map +1 -1
  242. package/lib/typescript/module/ui/styles/fonts.d.ts +7 -7
  243. package/lib/typescript/module/ui/styles/theme.d.ts.map +1 -1
  244. package/lib/typescript/module/web.d.ts +54 -0
  245. package/lib/typescript/module/web.d.ts.map +1 -0
  246. package/package.json +27 -41
  247. package/src/assets/fonts/Inter/Inter_18pt-Black.ttf +0 -0
  248. package/src/assets/fonts/Inter/Inter_18pt-Bold.ttf +0 -0
  249. package/src/assets/fonts/Inter/Inter_18pt-ExtraBold.ttf +0 -0
  250. package/src/assets/fonts/Inter/Inter_18pt-Light.ttf +0 -0
  251. package/src/assets/fonts/Inter/Inter_18pt-Medium.ttf +0 -0
  252. package/src/assets/fonts/Inter/Inter_18pt-Regular.ttf +0 -0
  253. package/src/assets/fonts/Inter/Inter_18pt-SemiBold.ttf +0 -0
  254. package/src/core/HttpService.ts +91 -0
  255. package/src/core/mixins/OxyServices.assets.ts +1 -1
  256. package/src/i18n/locales/en-US.json +3 -3
  257. package/src/i18n/locales/es-ES.json +240 -19
  258. package/src/ui/components/Avatar.tsx +1 -1
  259. package/src/ui/components/FollowButton.tsx +1 -1
  260. package/src/ui/components/FontLoader.tsx +34 -34
  261. package/src/ui/components/Header.tsx +4 -4
  262. package/src/ui/components/OxyPayButton.tsx +1 -1
  263. package/src/ui/components/OxySignInButton.tsx +2 -1
  264. package/src/ui/components/ProfileCard.tsx +1 -1
  265. package/src/ui/components/SectionTitle.tsx +1 -1
  266. package/src/ui/components/StepBasedScreen.tsx +2 -1
  267. package/src/ui/components/feedback/feedbackStyles.ts +2 -1
  268. package/src/ui/components/fileManagement/styles.ts +17 -17
  269. package/src/ui/components/payment/paymentStyles.ts +7 -7
  270. package/src/ui/navigation/routes.ts +3 -0
  271. package/src/ui/screens/AccountCenterScreen.tsx +4 -2
  272. package/src/ui/screens/AccountOverviewScreen.tsx +13 -5
  273. package/src/ui/screens/AccountSettingsScreen.tsx +35 -1511
  274. package/src/ui/screens/AccountSwitcherScreen.tsx +1 -1
  275. package/src/ui/screens/AccountVerificationScreen.tsx +3 -1
  276. package/src/ui/screens/AppInfoScreen.tsx +2 -2
  277. package/src/ui/screens/EditProfileFieldScreen.tsx +685 -0
  278. package/src/ui/screens/FileManagementScreen.tsx +33 -15
  279. package/src/ui/screens/HistoryViewScreen.tsx +9 -3
  280. package/src/ui/screens/LanguageSelectorScreen.tsx +4 -2
  281. package/src/ui/screens/LegalDocumentsScreen.tsx +3 -1
  282. package/src/ui/screens/PremiumSubscriptionScreen.tsx +11 -13
  283. package/src/ui/screens/PrivacySettingsScreen.tsx +12 -4
  284. package/src/ui/screens/SearchSettingsScreen.tsx +3 -1
  285. package/src/ui/screens/SessionManagementScreen.tsx +15 -5
  286. package/src/ui/screens/UserLinksScreen.tsx +3 -1
  287. package/src/ui/screens/WelcomeNewUserScreen.tsx +2 -1
  288. package/src/ui/screens/karma/KarmaAboutScreen.tsx +6 -8
  289. package/src/ui/screens/karma/KarmaCenterScreen.tsx +3 -3
  290. package/src/ui/screens/karma/KarmaRewardsScreen.tsx +3 -3
  291. package/src/ui/styles/authStyles.ts +4 -4
  292. package/src/ui/styles/fonts.ts +26 -26
  293. package/src/ui/styles/theme.ts +3 -5
  294. package/src/web.ts +230 -0
  295. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  296. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  297. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  298. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  299. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  300. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  301. package/lib/commonjs/assets/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  302. package/lib/commonjs/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  303. package/lib/commonjs/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  304. package/lib/commonjs/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  305. package/lib/commonjs/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  306. package/lib/commonjs/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  307. package/lib/commonjs/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  308. package/lib/commonjs/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  309. package/lib/commonjs/ui/components/profile/EditBioModal.js +0 -49
  310. package/lib/commonjs/ui/components/profile/EditBioModal.js.map +0 -1
  311. package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js +0 -54
  312. package/lib/commonjs/ui/components/profile/EditDisplayNameModal.js.map +0 -1
  313. package/lib/commonjs/ui/components/profile/EditEmailModal.js +0 -57
  314. package/lib/commonjs/ui/components/profile/EditEmailModal.js.map +0 -1
  315. package/lib/commonjs/ui/components/profile/EditFieldModal.js +0 -412
  316. package/lib/commonjs/ui/components/profile/EditFieldModal.js.map +0 -1
  317. package/lib/commonjs/ui/components/profile/EditLinksModal.js +0 -315
  318. package/lib/commonjs/ui/components/profile/EditLinksModal.js.map +0 -1
  319. package/lib/commonjs/ui/components/profile/EditLocationModal.js +0 -91
  320. package/lib/commonjs/ui/components/profile/EditLocationModal.js.map +0 -1
  321. package/lib/commonjs/ui/components/profile/EditUsernameModal.js +0 -55
  322. package/lib/commonjs/ui/components/profile/EditUsernameModal.js.map +0 -1
  323. package/lib/module/assets/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  324. package/lib/module/assets/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  325. package/lib/module/assets/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  326. package/lib/module/assets/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  327. package/lib/module/assets/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  328. package/lib/module/assets/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  329. package/lib/module/assets/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  330. package/lib/module/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  331. package/lib/module/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  332. package/lib/module/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  333. package/lib/module/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  334. package/lib/module/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  335. package/lib/module/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  336. package/lib/module/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  337. package/lib/module/ui/components/profile/EditBioModal.js +0 -43
  338. package/lib/module/ui/components/profile/EditBioModal.js.map +0 -1
  339. package/lib/module/ui/components/profile/EditDisplayNameModal.js +0 -48
  340. package/lib/module/ui/components/profile/EditDisplayNameModal.js.map +0 -1
  341. package/lib/module/ui/components/profile/EditEmailModal.js +0 -51
  342. package/lib/module/ui/components/profile/EditEmailModal.js.map +0 -1
  343. package/lib/module/ui/components/profile/EditFieldModal.js +0 -406
  344. package/lib/module/ui/components/profile/EditFieldModal.js.map +0 -1
  345. package/lib/module/ui/components/profile/EditLinksModal.js +0 -309
  346. package/lib/module/ui/components/profile/EditLinksModal.js.map +0 -1
  347. package/lib/module/ui/components/profile/EditLocationModal.js +0 -85
  348. package/lib/module/ui/components/profile/EditLocationModal.js.map +0 -1
  349. package/lib/module/ui/components/profile/EditUsernameModal.js +0 -49
  350. package/lib/module/ui/components/profile/EditUsernameModal.js.map +0 -1
  351. package/lib/typescript/commonjs/ui/components/profile/EditBioModal.d.ts +0 -11
  352. package/lib/typescript/commonjs/ui/components/profile/EditBioModal.d.ts.map +0 -1
  353. package/lib/typescript/commonjs/ui/components/profile/EditDisplayNameModal.d.ts +0 -12
  354. package/lib/typescript/commonjs/ui/components/profile/EditDisplayNameModal.d.ts.map +0 -1
  355. package/lib/typescript/commonjs/ui/components/profile/EditEmailModal.d.ts +0 -11
  356. package/lib/typescript/commonjs/ui/components/profile/EditEmailModal.d.ts.map +0 -1
  357. package/lib/typescript/commonjs/ui/components/profile/EditFieldModal.d.ts +0 -110
  358. package/lib/typescript/commonjs/ui/components/profile/EditFieldModal.d.ts.map +0 -1
  359. package/lib/typescript/commonjs/ui/components/profile/EditLinksModal.d.ts +0 -18
  360. package/lib/typescript/commonjs/ui/components/profile/EditLinksModal.d.ts.map +0 -1
  361. package/lib/typescript/commonjs/ui/components/profile/EditLocationModal.d.ts +0 -21
  362. package/lib/typescript/commonjs/ui/components/profile/EditLocationModal.d.ts.map +0 -1
  363. package/lib/typescript/commonjs/ui/components/profile/EditUsernameModal.d.ts +0 -11
  364. package/lib/typescript/commonjs/ui/components/profile/EditUsernameModal.d.ts.map +0 -1
  365. package/lib/typescript/module/ui/components/profile/EditBioModal.d.ts +0 -11
  366. package/lib/typescript/module/ui/components/profile/EditBioModal.d.ts.map +0 -1
  367. package/lib/typescript/module/ui/components/profile/EditDisplayNameModal.d.ts +0 -12
  368. package/lib/typescript/module/ui/components/profile/EditDisplayNameModal.d.ts.map +0 -1
  369. package/lib/typescript/module/ui/components/profile/EditEmailModal.d.ts +0 -11
  370. package/lib/typescript/module/ui/components/profile/EditEmailModal.d.ts.map +0 -1
  371. package/lib/typescript/module/ui/components/profile/EditFieldModal.d.ts +0 -110
  372. package/lib/typescript/module/ui/components/profile/EditFieldModal.d.ts.map +0 -1
  373. package/lib/typescript/module/ui/components/profile/EditLinksModal.d.ts +0 -18
  374. package/lib/typescript/module/ui/components/profile/EditLinksModal.d.ts.map +0 -1
  375. package/lib/typescript/module/ui/components/profile/EditLocationModal.d.ts +0 -21
  376. package/lib/typescript/module/ui/components/profile/EditLocationModal.d.ts.map +0 -1
  377. package/lib/typescript/module/ui/components/profile/EditUsernameModal.d.ts +0 -11
  378. package/lib/typescript/module/ui/components/profile/EditUsernameModal.d.ts.map +0 -1
  379. package/src/assets/fonts/Phudu/Phudu-Black.ttf +0 -0
  380. package/src/assets/fonts/Phudu/Phudu-Bold.ttf +0 -0
  381. package/src/assets/fonts/Phudu/Phudu-ExtraBold.ttf +0 -0
  382. package/src/assets/fonts/Phudu/Phudu-Light.ttf +0 -0
  383. package/src/assets/fonts/Phudu/Phudu-Medium.ttf +0 -0
  384. package/src/assets/fonts/Phudu/Phudu-Regular.ttf +0 -0
  385. package/src/assets/fonts/Phudu/Phudu-SemiBold.ttf +0 -0
  386. package/src/ui/components/profile/EditBioModal.tsx +0 -46
  387. package/src/ui/components/profile/EditDisplayNameModal.tsx +0 -56
  388. package/src/ui/components/profile/EditEmailModal.tsx +0 -57
  389. package/src/ui/components/profile/EditFieldModal.tsx +0 -465
  390. package/src/ui/components/profile/EditLinksModal.tsx +0 -316
  391. package/src/ui/components/profile/EditLocationModal.tsx +0 -91
  392. package/src/ui/components/profile/EditUsernameModal.tsx +0 -55
@@ -6,8 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _reactNative = require("react-native");
9
- var _OxyIcon = _interopRequireDefault(require("../components/icon/OxyIcon.js"));
10
- var _vectorIcons = require("@expo/vector-icons");
11
9
  var _sonner = require("../../lib/sonner.js");
12
10
  var _fonts = require("../styles/fonts.js");
13
11
  var _confirmAction = require("../utils/confirmAction.js");
@@ -18,28 +16,13 @@ var _useThemeStyles = require("../hooks/useThemeStyles.js");
18
16
  var _useColorScheme = require("../hooks/use-color-scheme.js");
19
17
  var _theme = require("../constants/theme.js");
20
18
  var _themeUtils = require("../utils/themeUtils.js");
21
- var _EditDisplayNameModal = require("../components/profile/EditDisplayNameModal.js");
22
- var _EditUsernameModal = require("../components/profile/EditUsernameModal.js");
23
- var _EditEmailModal = require("../components/profile/EditEmailModal.js");
24
- var _EditBioModal = require("../components/profile/EditBioModal.js");
25
- var _EditLocationModal = require("../components/profile/EditLocationModal.js");
26
- var _EditLinksModal = require("../components/profile/EditLinksModal.js");
27
19
  var _userUtils = require("../utils/user-utils.js");
28
- var _cache = require("../../utils/cache.js");
29
20
  var _OxyContext = require("../context/OxyContext.js");
30
21
  var _useAccountQueries = require("../hooks/queries/useAccountQueries.js");
31
22
  var _useAccountMutations = require("../hooks/mutations/useAccountMutations.js");
32
23
  var _spacing = require("../constants/spacing.js");
33
24
  var _jsxRuntime = require("react/jsx-runtime");
34
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
35
25
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
36
- // @ts-ignore - MaterialCommunityIcons is available at runtime
37
-
38
- // Caches for link metadata and location searches
39
- const linkMetadataCache = new _cache.TTLCache(30 * 60 * 1000); // 30 minutes cache for link metadata
40
- const locationSearchCache = new _cache.TTLCache(60 * 60 * 1000); // 1 hour cache for location searches
41
- (0, _cache.registerCacheForCleanup)(linkMetadataCache);
42
- (0, _cache.registerCacheForCleanup)(locationSearchCache);
43
26
  const AccountSettingsScreen = ({
44
27
  onClose,
45
28
  theme,
@@ -52,13 +35,11 @@ const AccountSettingsScreen = ({
52
35
  // Use useOxy() hook for OxyContext values
53
36
  const {
54
37
  oxyServices,
55
- isAuthenticated,
56
- activeSessionId
38
+ isAuthenticated
57
39
  } = (0, _OxyContext.useOxy)();
58
40
  const {
59
41
  t
60
42
  } = (0, _useI18n.useI18n)();
61
- const normalizedTheme = (0, _themeUtils.normalizeTheme)(theme);
62
43
 
63
44
  // Use TanStack Query for user data
64
45
  const {
@@ -67,19 +48,15 @@ const AccountSettingsScreen = ({
67
48
  } = (0, _useAccountQueries.useCurrentUser)({
68
49
  enabled: isAuthenticated
69
50
  });
70
- const updateProfileMutation = (0, _useAccountMutations.useUpdateProfile)();
71
51
  const uploadAvatarMutation = (0, _useAccountMutations.useUploadAvatar)();
72
52
 
73
53
  // Fallback to store for backward compatibility
74
54
  const userFromStore = (0, _authStore.useAuthStore)(state => state.user);
75
55
  const finalUser = user || userFromStore;
76
- const [isLoading, setIsLoading] = (0, _react.useState)(false);
77
- const isSaving = updateProfileMutation.isPending;
78
56
  const isUpdatingAvatar = uploadAvatarMutation.isPending;
79
57
  const [optimisticAvatarId, setOptimisticAvatarId] = (0, _react.useState)(null);
80
58
  const scrollViewRef = (0, _react.useRef)(null);
81
59
  const avatarSectionRef = (0, _react.useRef)(null);
82
- const [avatarSectionY, setAvatarSectionY] = (0, _react.useState)(null);
83
60
 
84
61
  // Section refs for navigation
85
62
  const profilePictureSectionRef = (0, _react.useRef)(null);
@@ -95,9 +72,6 @@ const AccountSettingsScreen = ({
95
72
  const [quickActionsSectionY, setQuickActionsSectionY] = (0, _react.useState)(null);
96
73
  const [securitySectionY, setSecuritySectionY] = (0, _react.useState)(null);
97
74
 
98
- // Animation refs
99
- const saveButtonScale = (0, _react.useRef)(new _reactNative.Animated.Value(1)).current;
100
-
101
75
  // Form state
102
76
  const [displayName, setDisplayName] = (0, _react.useState)('');
103
77
  const [lastName, setLastName] = (0, _react.useState)('');
@@ -108,37 +82,17 @@ const AccountSettingsScreen = ({
108
82
  const [links, setLinks] = (0, _react.useState)([]);
109
83
  const [avatarFileId, setAvatarFileId] = (0, _react.useState)('');
110
84
 
111
- // Modal visibility states
112
- const [showEditDisplayNameModal, setShowEditDisplayNameModal] = (0, _react.useState)(false);
113
- const [showEditUsernameModal, setShowEditUsernameModal] = (0, _react.useState)(false);
114
- const [showEditEmailModal, setShowEditEmailModal] = (0, _react.useState)(false);
115
- const [showEditBioModal, setShowEditBioModal] = (0, _react.useState)(false);
116
- const [showEditLocationModal, setShowEditLocationModal] = (0, _react.useState)(false);
117
- const [showEditLinksModal, setShowEditLinksModal] = (0, _react.useState)(false);
85
+ // Navigation helper for editing fields
86
+ const navigateToEditField = (0, _react.useCallback)(fieldType => {
87
+ navigate?.('EditProfileField', {
88
+ fieldType
89
+ });
90
+ }, [navigate]);
118
91
 
119
92
  // Location and links state (for display only - modals handle editing)
120
93
  const [locations, setLocations] = (0, _react.useState)([]);
121
94
  const [linksMetadata, setLinksMetadata] = (0, _react.useState)([]);
122
95
 
123
- // State for inline editing (used by old renderEditingField code)
124
- const [editingField, setEditingField] = (0, _react.useState)(null);
125
- const [tempDisplayName, setTempDisplayName] = (0, _react.useState)('');
126
- const [tempLastName, setTempLastName] = (0, _react.useState)('');
127
- const [tempUsername, setTempUsername] = (0, _react.useState)('');
128
- const [tempEmail, setTempEmail] = (0, _react.useState)('');
129
- const [tempBio, setTempBio] = (0, _react.useState)('');
130
- const [tempLocation, setTempLocation] = (0, _react.useState)('');
131
- const [tempLinks, setTempLinks] = (0, _react.useState)([]);
132
- const [tempLocations, setTempLocations] = (0, _react.useState)([]);
133
- const [tempLinksWithMetadata, setTempLinksWithMetadata] = (0, _react.useState)([]);
134
- const [isAddingLocation, setIsAddingLocation] = (0, _react.useState)(false);
135
- const [isSearchingLocations, setIsSearchingLocations] = (0, _react.useState)(false);
136
- const [locationSearchResults, setLocationSearchResults] = (0, _react.useState)([]);
137
- const [newLocationQuery, setNewLocationQuery] = (0, _react.useState)('');
138
- const [isAddingLink, setIsAddingLink] = (0, _react.useState)(false);
139
- const [isFetchingMetadata, setIsFetchingMetadata] = (0, _react.useState)(false);
140
- const [newLinkUrl, setNewLinkUrl] = (0, _react.useState)('');
141
-
142
96
  // Get theme colors using centralized hook
143
97
  const colorScheme = (0, _useColorScheme.useColorScheme)();
144
98
  const themeStyles = (0, _useThemeStyles.useThemeStyles)(theme || 'light', colorScheme);
@@ -147,25 +101,6 @@ const AccountSettingsScreen = ({
147
101
  // useThemeStyles always returns colors, but add safety check for edge cases
148
102
  const colors = themeStyles.colors || _theme.Colors[(0, _themeUtils.normalizeColorScheme)(colorScheme, theme || 'light')];
149
103
 
150
- // Memoize onBack handler to provide stable reference for Reanimated
151
- const handleBack = (0, _react.useMemo)(() => {
152
- return goBack || onClose || undefined;
153
- }, [goBack, onClose]);
154
-
155
- // Memoize animation function to prevent recreation on every render
156
- const animateSaveButton = (0, _react.useCallback)((toValue, onComplete) => {
157
- _reactNative.Animated.spring(saveButtonScale, {
158
- toValue,
159
- useNativeDriver: _reactNative.Platform.OS !== 'web',
160
- tension: 150,
161
- friction: 8
162
- }).start(onComplete ? finished => {
163
- if (finished) {
164
- onComplete();
165
- }
166
- } : undefined);
167
- }, [saveButtonScale]);
168
-
169
104
  // Track initialization to prevent unnecessary resets
170
105
  const isInitializedRef = (0, _react.useRef)(false);
171
106
  const previousUserIdRef = (0, _react.useRef)(null);
@@ -267,129 +202,6 @@ const AccountSettingsScreen = ({
267
202
  }, [finalUser, avatarFileId, isUpdatingAvatar, optimisticAvatarId]);
268
203
 
269
204
  // Set initial editing field if provided via props (e.g., from navigation)
270
- // Use a ref to track if we've already set the initial field to avoid loops
271
- const hasSetInitialFieldRef = (0, _react.useRef)(false);
272
- const previousInitialFieldRef = (0, _react.useRef)(undefined);
273
- const initialFieldTimeoutRef = (0, _react.useRef)(null);
274
-
275
- // Delay constant for scroll completion
276
- const SCROLL_DELAY_MS = 600;
277
-
278
- // Helper functions for inline editing (legacy support)
279
- const startEditing = (0, _react.useCallback)((field, initialValue) => {
280
- setEditingField(field);
281
- switch (field) {
282
- case 'displayName':
283
- setTempDisplayName(initialValue || displayName);
284
- setTempLastName(lastName);
285
- break;
286
- case 'username':
287
- setTempUsername(initialValue || username);
288
- break;
289
- case 'email':
290
- setTempEmail(initialValue || email);
291
- break;
292
- case 'bio':
293
- setTempBio(initialValue || bio);
294
- break;
295
- case 'location':
296
- setTempLocations([...locations]);
297
- break;
298
- case 'links':
299
- setTempLinksWithMetadata([...linksMetadata]);
300
- break;
301
- }
302
- }, [displayName, lastName, username, email, bio, locations, linksMetadata]);
303
- const cancelEditing = (0, _react.useCallback)(() => {
304
- setEditingField(null);
305
- setTempDisplayName('');
306
- setTempLastName('');
307
- setTempUsername('');
308
- setTempEmail('');
309
- setTempBio('');
310
- setTempLocation('');
311
- setTempLinks([]);
312
- setTempLocations([]);
313
- setTempLinksWithMetadata([]);
314
- setIsAddingLocation(false);
315
- setIsSearchingLocations(false);
316
- setLocationSearchResults([]);
317
- setNewLocationQuery('');
318
- setIsAddingLink(false);
319
- setIsFetchingMetadata(false);
320
- setNewLinkUrl('');
321
- }, []);
322
- const saveField = (0, _react.useCallback)(async field => {
323
- if (!field) return;
324
- try {
325
- switch (field) {
326
- case 'displayName':
327
- await updateProfileMutation.mutateAsync({
328
- name: {
329
- first: tempDisplayName,
330
- last: tempLastName
331
- }
332
- });
333
- setDisplayName(tempDisplayName);
334
- setLastName(tempLastName);
335
- break;
336
- case 'username':
337
- await updateProfileMutation.mutateAsync({
338
- username: tempUsername
339
- });
340
- setUsername(tempUsername);
341
- break;
342
- case 'email':
343
- await updateProfileMutation.mutateAsync({
344
- email: tempEmail
345
- });
346
- setEmail(tempEmail);
347
- break;
348
- case 'bio':
349
- await updateProfileMutation.mutateAsync({
350
- bio: tempBio
351
- });
352
- setBio(tempBio);
353
- break;
354
- case 'location':
355
- await updateProfileMutation.mutateAsync({
356
- locations: tempLocations
357
- });
358
- setLocations(tempLocations);
359
- break;
360
- case 'links':
361
- await updateProfileMutation.mutateAsync({
362
- linksMetadata: tempLinksWithMetadata
363
- });
364
- setLinksMetadata(tempLinksWithMetadata);
365
- setLinks(tempLinksWithMetadata.map(l => l.url));
366
- break;
367
- }
368
- setEditingField(null);
369
- _sonner.toast.success(t('editProfile.toasts.saved') || 'Saved');
370
- } catch (error) {
371
- // Error is already handled by mutation's onError
372
- }
373
- }, [tempDisplayName, tempLastName, tempUsername, tempEmail, tempBio, tempLocations, tempLinksWithMetadata, updateProfileMutation, t]);
374
-
375
- // Helper to get current value for a field
376
- const getFieldCurrentValue = (0, _react.useCallback)(field => {
377
- switch (field) {
378
- case 'displayName':
379
- return displayName;
380
- case 'username':
381
- return username;
382
- case 'email':
383
- return email;
384
- case 'bio':
385
- return bio;
386
- case 'location':
387
- case 'links':
388
- default:
389
- return '';
390
- }
391
- }, [displayName, username, email, bio]);
392
-
393
205
  // Handle initialSection prop to scroll to specific section
394
206
  const hasScrolledToSectionRef = (0, _react.useRef)(false);
395
207
  const previousInitialSectionRef = (0, _react.useRef)(undefined);
@@ -423,48 +235,6 @@ const AccountSettingsScreen = ({
423
235
  }
424
236
  }
425
237
  }, [initialSection, sectionYPositions]);
426
- const handleSave = async () => {
427
- if (!finalUser) return;
428
- try {
429
- animateSaveButton(0.95); // Scale down slightly for animation
430
-
431
- const updates = {
432
- username,
433
- email,
434
- bio,
435
- location: locations.length > 0 ? locations[0].name : '',
436
- // Keep backward compatibility
437
- locations: locations.length > 0 ? locations : undefined,
438
- links,
439
- linksMetadata: linksMetadata.length > 0 ? linksMetadata : undefined
440
- };
441
-
442
- // Handle name field
443
- if (displayName || lastName) {
444
- updates.name = {
445
- first: displayName,
446
- last: lastName
447
- };
448
- }
449
-
450
- // Handle avatar
451
- if (avatarFileId !== (typeof finalUser.avatar === 'string' ? finalUser.avatar : '')) {
452
- updates.avatar = avatarFileId;
453
- }
454
- await updateProfileMutation.mutateAsync(updates);
455
- _sonner.toast.success(t('editProfile.toasts.profileUpdated') || 'Profile updated successfully');
456
- animateSaveButton(1); // Scale back to normal
457
-
458
- if (onClose) {
459
- onClose();
460
- } else if (goBack) {
461
- goBack();
462
- }
463
- } catch (error) {
464
- // Error is already handled by mutation's onError
465
- animateSaveButton(1); // Scale back to normal on error
466
- }
467
- };
468
238
  const handleAvatarRemove = () => {
469
239
  (0, _confirmAction.confirmAction)(t('editProfile.confirms.removeAvatar') || 'Remove your profile picture?', () => {
470
240
  setAvatarFileId('');
@@ -475,62 +245,15 @@ const AccountSettingsScreen = ({
475
245
  openAvatarPicker
476
246
  } = (0, _OxyContext.useOxy)();
477
247
 
478
- // Handlers to open modals
479
- const handleOpenDisplayNameModal = (0, _react.useCallback)(() => setShowEditDisplayNameModal(true), []);
480
- const handleOpenUsernameModal = (0, _react.useCallback)(() => setShowEditUsernameModal(true), []);
481
- const handleOpenEmailModal = (0, _react.useCallback)(() => setShowEditEmailModal(true), []);
482
- const handleOpenBioModal = (0, _react.useCallback)(() => setShowEditBioModal(true), []);
483
- const handleOpenLocationModal = (0, _react.useCallback)(() => setShowEditLocationModal(true), []);
484
- const handleOpenLinksModal = (0, _react.useCallback)(() => setShowEditLinksModal(true), []);
485
-
486
- // Handler to refresh data after modal saves
487
- // Note: Access user directly from store when invoked to get latest value,
488
- // not from closure which may be stale after modal saves update the backend
489
- const handleModalSave = (0, _react.useCallback)(() => {
490
- // Get fresh user data from store to ensure we have the latest values
491
- // after the modal's save operation updates the backend
492
- // Read from store directly (not from closure) to avoid stale data
493
- const currentUser = _authStore.useAuthStore.getState().user;
494
-
495
- // Reload user data to reflect changes
496
- if (currentUser) {
497
- const userDisplayName = typeof currentUser.name === 'string' ? currentUser.name : currentUser.name?.first || currentUser.name?.full || '';
498
- const userLastName = typeof currentUser.name === 'object' ? currentUser.name?.last || '' : '';
499
- setDisplayName(userDisplayName);
500
- setLastName(userLastName);
501
- setUsername(currentUser.username || '');
502
- setEmail(currentUser.email || '');
503
- setBio(currentUser.bio || '');
504
-
505
- // Reload locations and links
506
- if (currentUser.locations && Array.isArray(currentUser.locations)) {
507
- setLocations(currentUser.locations.map((loc, index) => ({
508
- id: loc.id || `existing-${index}`,
509
- name: loc.name,
510
- label: loc.label,
511
- coordinates: loc.coordinates
512
- })));
513
- } else if (currentUser.location) {
514
- setLocations([{
515
- id: 'existing-0',
516
- name: currentUser.location,
517
- label: 'Location'
518
- }]);
519
- } else {
520
- setLocations([]);
521
- }
522
- if (currentUser.linksMetadata && Array.isArray(currentUser.linksMetadata)) {
523
- setLinksMetadata(currentUser.linksMetadata.map((link, index) => ({
524
- ...link,
525
- id: link.id || `existing-${index}`
526
- })));
527
- } else {
528
- setLinksMetadata([]);
529
- }
530
- }
531
- }, []); // Empty dependency array - callback reads fresh data from store at call time
248
+ // Handlers to navigate to edit screens
249
+ const handleOpenDisplayNameModal = (0, _react.useCallback)(() => navigateToEditField('displayName'), [navigateToEditField]);
250
+ const handleOpenUsernameModal = (0, _react.useCallback)(() => navigateToEditField('username'), [navigateToEditField]);
251
+ const handleOpenEmailModal = (0, _react.useCallback)(() => navigateToEditField('email'), [navigateToEditField]);
252
+ const handleOpenBioModal = (0, _react.useCallback)(() => navigateToEditField('bio'), [navigateToEditField]);
253
+ const handleOpenLocationModal = (0, _react.useCallback)(() => navigateToEditField('locations'), [navigateToEditField]);
254
+ const handleOpenLinksModal = (0, _react.useCallback)(() => navigateToEditField('links'), [navigateToEditField]);
532
255
 
533
- // Handle initialField prop - open appropriate modal
256
+ // Handle initialField prop - navigate to appropriate edit screen
534
257
  (0, _react.useEffect)(() => {
535
258
  if (initialField) {
536
259
  // Special handling for avatar - open avatar picker directly
@@ -539,644 +262,28 @@ const AccountSettingsScreen = ({
539
262
  openAvatarPicker();
540
263
  }, 300);
541
264
  } else {
542
- // Open appropriate modal
265
+ // Navigate to edit screen
543
266
  setTimeout(() => {
544
- switch (initialField) {
545
- case 'displayName':
546
- setShowEditDisplayNameModal(true);
547
- break;
548
- case 'username':
549
- setShowEditUsernameModal(true);
550
- break;
551
- case 'email':
552
- setShowEditEmailModal(true);
553
- break;
554
- case 'bio':
555
- setShowEditBioModal(true);
556
- break;
557
- case 'location':
558
- setShowEditLocationModal(true);
559
- break;
560
- case 'links':
561
- setShowEditLinksModal(true);
562
- break;
267
+ const fieldTypeMap = {
268
+ displayName: 'displayName',
269
+ username: 'username',
270
+ email: 'email',
271
+ bio: 'bio',
272
+ location: 'locations',
273
+ locations: 'locations',
274
+ links: 'links'
275
+ };
276
+ const fieldType = fieldTypeMap[initialField];
277
+ if (fieldType) {
278
+ navigateToEditField(fieldType);
563
279
  }
564
280
  }, 300);
565
281
  }
566
282
  }
567
- }, [initialField, openAvatarPicker]);
568
-
569
- // Removed fetchLinkMetadata - now handled by EditLinksModal
570
- const _fetchLinkMetadata = async url => {
571
- // Check cache first
572
- const cacheKey = url.toLowerCase().trim();
573
- const cached = linkMetadataCache.get(cacheKey);
574
- if (cached) {
575
- return cached;
576
- }
577
- try {
578
- setIsFetchingMetadata(true);
579
-
580
- // Use the backend API to fetch metadata
581
- const metadata = await oxyServices.fetchLinkMetadata(url);
582
- const result = {
583
- ...metadata,
584
- id: Date.now().toString()
585
- };
586
-
587
- // Cache the result
588
- linkMetadataCache.set(cacheKey, result);
589
- return result;
590
- } catch (error) {
591
- // Fallback to basic metadata
592
- const fallback = {
593
- url: url.startsWith('http') ? url : 'https://' + url,
594
- title: url.replace(/^https?:\/\//, '').replace(/\/$/, ''),
595
- description: 'Link',
596
- image: undefined,
597
- id: Date.now().toString()
598
- };
599
- // Cache fallback too (shorter TTL)
600
- linkMetadataCache.set(cacheKey, fallback, 5 * 60 * 1000); // 5 minutes for fallbacks
601
- return fallback;
602
- } finally {
603
- setIsFetchingMetadata(false);
604
- }
605
- };
606
-
607
- // Helper functions for inline editing (legacy support - still used by renderEditingField)
608
- const searchLocations = async query => {
609
- if (!query.trim() || query.length < 3) {
610
- setLocationSearchResults([]);
611
- return;
612
- }
613
-
614
- // Check cache first
615
- const cacheKey = query.toLowerCase().trim();
616
- const cached = locationSearchCache.get(cacheKey);
617
- if (cached) {
618
- setLocationSearchResults(cached);
619
- return;
620
- }
621
- try {
622
- setIsSearchingLocations(true);
623
- const response = await fetch(`https://nominatim.openstreetmap.org/search?format=json&q=${encodeURIComponent(query)}&limit=5&addressdetails=1`);
624
- const data = await response.json();
625
-
626
- // Cache the results
627
- locationSearchCache.set(cacheKey, data);
628
- setLocationSearchResults(data);
629
- } catch (error) {
630
- setLocationSearchResults([]);
631
- } finally {
632
- setIsSearchingLocations(false);
633
- }
634
- };
635
- const addLocation = locationData => {
636
- const newLocation = {
637
- id: Date.now().toString(),
638
- name: locationData.display_name,
639
- label: locationData.type === 'city' ? 'City' : locationData.type === 'country' ? 'Country' : locationData.type === 'state' ? 'State' : 'Location',
640
- coordinates: {
641
- lat: Number.parseFloat(locationData.lat),
642
- lon: Number.parseFloat(locationData.lon)
643
- }
644
- };
645
- setTempLocations(prev => [...prev, newLocation]);
646
- setNewLocationQuery('');
647
- setLocationSearchResults([]);
648
- setIsAddingLocation(false);
649
- };
650
- const removeLocation = id => {
651
- setTempLocations(prev => prev.filter(loc => loc.id !== id));
652
- };
653
- const moveLocation = (fromIndex, toIndex) => {
654
- setTempLocations(prev => {
655
- const newLocations = [...prev];
656
- const [movedLocation] = newLocations.splice(fromIndex, 1);
657
- newLocations.splice(toIndex, 0, movedLocation);
658
- return newLocations;
659
- });
660
- };
661
- const addLink = async () => {
662
- if (!newLinkUrl.trim()) return;
663
- const url = newLinkUrl.trim();
664
- const metadata = await _fetchLinkMetadata(url);
665
- setTempLinksWithMetadata(prev => [...prev, metadata]);
666
- setNewLinkUrl('');
667
- setIsAddingLink(false);
668
- };
669
- const removeLink = id => {
670
- setTempLinksWithMetadata(prev => prev.filter(link => link.id !== id));
671
- };
672
- const moveLink = (fromIndex, toIndex) => {
673
- setTempLinksWithMetadata(prev => {
674
- const newLinks = [...prev];
675
- const [movedLink] = newLinks.splice(fromIndex, 1);
676
- newLinks.splice(toIndex, 0, movedLink);
677
- return newLinks;
678
- });
679
- };
283
+ }, [initialField, openAvatarPicker, navigateToEditField]);
680
284
 
681
285
  // Memoize display name for avatar
682
286
  const displayNameForAvatar = (0, _react.useMemo)(() => (0, _userUtils.getDisplayName)(finalUser), [finalUser]);
683
-
684
- // Legacy renderEditingField function (fallback)
685
- const renderEditingField = type => {
686
- if (!type) return null;
687
- if (type === 'displayName') {
688
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
689
- style: [styles.editingFieldContainer, {
690
- backgroundColor: colors.background
691
- }],
692
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
693
- style: styles.editingFieldContent,
694
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
695
- style: styles.newValueSection,
696
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
697
- style: styles.editingFieldHeader,
698
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
699
- style: [styles.editingFieldLabel, {
700
- color: colors.text
701
- }],
702
- children: "Edit Full Name"
703
- })
704
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
705
- style: {
706
- flexDirection: 'row',
707
- gap: 12
708
- },
709
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
710
- style: {
711
- flex: 1
712
- },
713
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
714
- style: styles.editingFieldLabel,
715
- children: "First Name"
716
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
717
- style: styles.editingFieldInput,
718
- value: tempDisplayName,
719
- onChangeText: setTempDisplayName,
720
- placeholder: "Enter your first name",
721
- placeholderTextColor: colors.secondaryText,
722
- autoFocus: true,
723
- selectionColor: themeStyles.primaryColor
724
- })]
725
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
726
- style: {
727
- flex: 1
728
- },
729
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
730
- style: styles.editingFieldLabel,
731
- children: "Last Name"
732
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
733
- style: styles.editingFieldInput,
734
- value: tempLastName,
735
- onChangeText: setTempLastName,
736
- placeholder: "Enter your last name",
737
- placeholderTextColor: colors.secondaryText,
738
- selectionColor: themeStyles.primaryColor
739
- })]
740
- })]
741
- })]
742
- })
743
- })
744
- });
745
- }
746
- if (type === 'location') {
747
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
748
- style: [styles.editingFieldContainer, {
749
- backgroundColor: colors.background
750
- }],
751
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
752
- style: styles.editingFieldContent,
753
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
754
- style: styles.newValueSection,
755
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
756
- style: styles.editingFieldHeader,
757
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
758
- style: [styles.editingFieldLabel, {
759
- color: colors.text
760
- }],
761
- children: "Manage Your Locations"
762
- })
763
- }), isAddingLocation ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
764
- style: styles.addLocationSection,
765
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
766
- style: styles.addLocationLabel,
767
- children: ["Add New Location", isSearchingLocations && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
768
- style: [styles.searchingText, {
769
- color: colors.iconSecurity
770
- }],
771
- children: " \u2022 Searching..."
772
- })]
773
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
774
- style: styles.addLocationInputContainer,
775
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
776
- style: styles.addLocationInput,
777
- value: newLocationQuery,
778
- onChangeText: text => {
779
- setNewLocationQuery(text);
780
- searchLocations(text);
781
- },
782
- placeholder: "Search for a location...",
783
- placeholderTextColor: colors.secondaryText,
784
- autoFocus: true,
785
- selectionColor: themeStyles.primaryColor
786
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
787
- style: styles.addLocationButtons,
788
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
789
- style: [styles.addLocationButton, styles.cancelButton],
790
- onPress: () => {
791
- setIsAddingLocation(false);
792
- setNewLocationQuery('');
793
- setLocationSearchResults([]);
794
- },
795
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
796
- style: styles.cancelButtonText,
797
- children: "Cancel"
798
- })
799
- })
800
- })]
801
- }), locationSearchResults.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
802
- style: styles.searchResults,
803
- children: locationSearchResults.map(result => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
804
- style: styles.searchResultItem,
805
- onPress: () => addLocation(result),
806
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
807
- style: styles.searchResultName,
808
- numberOfLines: 2,
809
- children: result.display_name
810
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
811
- style: styles.searchResultType,
812
- children: result.type
813
- })]
814
- }, result.place_id))
815
- })]
816
- }) : /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
817
- style: styles.addLocationTrigger,
818
- onPress: () => setIsAddingLocation(true),
819
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
820
- name: "add",
821
- size: 20,
822
- color: themeStyles.primaryColor
823
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
824
- style: [styles.addLocationTriggerText, {
825
- color: colors.iconSecurity
826
- }],
827
- children: "Add a new location"
828
- })]
829
- }), tempLocations.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
830
- style: styles.locationsList,
831
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
832
- style: styles.locationsListTitle,
833
- children: ["Your Locations (", tempLocations.length, ")"]
834
- }), tempLocations.map((location, index) => /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
835
- style: styles.locationItem,
836
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
837
- style: styles.locationItemContent,
838
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
839
- style: styles.locationItemDragHandle,
840
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
841
- style: styles.reorderButtons,
842
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
843
- style: [styles.reorderButton, index === 0 && styles.reorderButtonDisabled],
844
- onPress: () => index > 0 && moveLocation(index, index - 1),
845
- disabled: index === 0,
846
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
847
- name: "chevron-up",
848
- size: 12,
849
- color: index === 0 ? "#ccc" : "#666"
850
- })
851
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
852
- style: [styles.reorderButton, index === tempLocations.length - 1 && styles.reorderButtonDisabled],
853
- onPress: () => index < tempLocations.length - 1 && moveLocation(index, index + 1),
854
- disabled: index === tempLocations.length - 1,
855
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
856
- name: "chevron-down",
857
- size: 12,
858
- color: index === tempLocations.length - 1 ? "#ccc" : "#666"
859
- })
860
- })]
861
- })
862
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
863
- style: styles.locationItemInfo,
864
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
865
- style: styles.locationItemHeader,
866
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
867
- style: styles.locationItemName,
868
- numberOfLines: 1,
869
- children: location.name
870
- }), location.label && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
871
- style: [styles.locationLabel, {
872
- backgroundColor: colors.iconSecurity
873
- }],
874
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
875
- style: styles.locationLabelText,
876
- children: location.label
877
- })
878
- })]
879
- }), location.coordinates && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
880
- style: styles.locationCoordinates,
881
- children: [location.coordinates.lat.toFixed(4), ", ", location.coordinates.lon.toFixed(4)]
882
- })]
883
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
884
- style: styles.locationItemActions,
885
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
886
- style: styles.locationItemButton,
887
- onPress: () => removeLocation(location.id),
888
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
889
- name: "trash",
890
- size: 14,
891
- color: "#FF3B30"
892
- })
893
- })
894
- })]
895
- }), index < tempLocations.length - 1 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
896
- style: styles.locationItemDivider
897
- })]
898
- }, location.id)), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
899
- style: styles.reorderHint,
900
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
901
- style: styles.reorderHintText,
902
- children: "Use \u2191\u2193 buttons to reorder your locations"
903
- })
904
- })]
905
- })]
906
- })
907
- })
908
- });
909
- }
910
- if (type === 'links') {
911
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
912
- style: [styles.editingFieldContainer, {
913
- backgroundColor: colors.background
914
- }],
915
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
916
- style: styles.editingFieldContent,
917
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
918
- style: styles.newValueSection,
919
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
920
- style: styles.editingFieldHeader,
921
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
922
- style: [styles.editingFieldLabel, {
923
- color: colors.text
924
- }],
925
- children: "Manage Your Links"
926
- })
927
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
928
- items: [
929
- // Add new link item
930
- ...(isAddingLink ? [{
931
- id: 'add-link-input',
932
- icon: 'plus',
933
- iconColor: colors.sidebarIconSharing,
934
- title: 'Add New Link',
935
- subtitle: isFetchingMetadata ? 'Fetching metadata...' : 'Enter URL to add a new link',
936
- customContent: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
937
- style: styles.addLinkInputContainer,
938
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
939
- style: styles.addLinkInput,
940
- value: newLinkUrl,
941
- onChangeText: setNewLinkUrl,
942
- placeholder: "Enter URL (e.g., https://example.com)",
943
- placeholderTextColor: colors.secondaryText,
944
- keyboardType: "url",
945
- autoFocus: true,
946
- selectionColor: themeStyles.primaryColor
947
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
948
- style: styles.addLinkButtons,
949
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
950
- style: [styles.addLinkButton, styles.cancelButton],
951
- onPress: () => {
952
- setIsAddingLink(false);
953
- setNewLinkUrl('');
954
- },
955
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
956
- style: styles.cancelButtonText,
957
- children: "Cancel"
958
- })
959
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
960
- style: [styles.addLinkButton, styles.addButton, {
961
- backgroundColor: colors.iconSecurity,
962
- opacity: isFetchingMetadata ? 0.5 : 1
963
- }],
964
- onPress: addLink,
965
- disabled: isFetchingMetadata,
966
- children: isFetchingMetadata ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
967
- size: "small",
968
- color: "#fff"
969
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
970
- style: styles.addButtonText,
971
- children: "Add"
972
- })
973
- })]
974
- })]
975
- })
976
- }] : [{
977
- id: 'add-link-trigger',
978
- icon: 'plus',
979
- iconColor: colors.sidebarIconSharing,
980
- title: 'Add a new link',
981
- subtitle: 'Tap to add a new link to your profile',
982
- onPress: () => setIsAddingLink(true)
983
- }]),
984
- // Existing links
985
- ...tempLinksWithMetadata.map((link, index) => ({
986
- id: link.id,
987
- customIcon: link.image ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
988
- source: {
989
- uri: link.image
990
- },
991
- style: {
992
- width: 36,
993
- height: 36,
994
- borderRadius: 18
995
- }
996
- }) : undefined,
997
- icon: !link.image ? 'link-variant' : undefined,
998
- iconColor: colors.sidebarIconSharing,
999
- title: link.title || link.url,
1000
- subtitle: link.description && link.description !== link.title ? link.description : link.url,
1001
- customContent: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1002
- style: styles.linkItemActions,
1003
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1004
- style: styles.reorderButtons,
1005
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1006
- style: [styles.reorderButton, index === 0 && styles.reorderButtonDisabled],
1007
- onPress: () => index > 0 && moveLink(index, index - 1),
1008
- disabled: index === 0,
1009
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
1010
- name: "chevron-up",
1011
- size: 12,
1012
- color: index === 0 ? "#ccc" : "#666"
1013
- })
1014
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1015
- style: [styles.reorderButton, index === tempLinksWithMetadata.length - 1 && styles.reorderButtonDisabled],
1016
- onPress: () => index < tempLinksWithMetadata.length - 1 && moveLink(index, index + 1),
1017
- disabled: index === tempLinksWithMetadata.length - 1,
1018
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
1019
- name: "chevron-down",
1020
- size: 12,
1021
- color: index === tempLinksWithMetadata.length - 1 ? "#ccc" : "#666"
1022
- })
1023
- })]
1024
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1025
- style: styles.linkItemButton,
1026
- onPress: () => removeLink(link.id),
1027
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_OxyIcon.default, {
1028
- name: "trash",
1029
- size: 14,
1030
- color: "#FF3B30"
1031
- })
1032
- })]
1033
- })
1034
- }))]
1035
- }), tempLinksWithMetadata.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1036
- style: styles.reorderHint,
1037
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1038
- style: styles.reorderHintText,
1039
- children: "Use \u2191\u2193 buttons to reorder your links"
1040
- })
1041
- })]
1042
- })
1043
- })
1044
- });
1045
- }
1046
- const fieldConfig = {
1047
- displayName: {
1048
- label: 'Display Name',
1049
- value: displayName,
1050
- placeholder: 'Enter your display name',
1051
- icon: 'account',
1052
- color: colors.iconPersonalInfo,
1053
- multiline: false,
1054
- keyboardType: 'default'
1055
- },
1056
- username: {
1057
- label: 'Username',
1058
- value: username,
1059
- placeholder: 'Choose a username',
1060
- icon: 'at',
1061
- color: colors.iconData,
1062
- multiline: false,
1063
- keyboardType: 'default'
1064
- },
1065
- email: {
1066
- label: 'Email',
1067
- value: email,
1068
- placeholder: 'Enter your email address',
1069
- icon: 'mail',
1070
- color: colors.iconStorage,
1071
- multiline: false,
1072
- keyboardType: 'email-address'
1073
- },
1074
- bio: {
1075
- label: 'Bio',
1076
- value: bio,
1077
- placeholder: 'Tell people about yourself...',
1078
- icon: 'file-document',
1079
- color: colors.iconPersonalInfo,
1080
- multiline: true,
1081
- keyboardType: 'default'
1082
- },
1083
- location: {
1084
- label: 'Location',
1085
- value: location,
1086
- placeholder: 'Enter your location',
1087
- icon: 'location',
1088
- color: colors.iconSharing,
1089
- multiline: false,
1090
- keyboardType: 'default'
1091
- },
1092
- links: {
1093
- label: 'Links',
1094
- value: links.join(', '),
1095
- placeholder: 'Enter your links (comma separated)',
1096
- icon: 'link',
1097
- color: colors.iconPersonalInfo,
1098
- multiline: false,
1099
- keyboardType: 'url'
1100
- }
1101
- };
1102
- const config = fieldConfig[type];
1103
- if (!config) return null;
1104
- const tempValue = (() => {
1105
- switch (type) {
1106
- case 'displayName':
1107
- return tempDisplayName;
1108
- case 'username':
1109
- return tempUsername;
1110
- case 'email':
1111
- return tempEmail;
1112
- case 'bio':
1113
- return tempBio;
1114
- case 'location':
1115
- return tempLocation;
1116
- case 'links':
1117
- return tempLinks.join(', ');
1118
- default:
1119
- return '';
1120
- }
1121
- })();
1122
- const setTempValue = text => {
1123
- switch (type) {
1124
- case 'displayName':
1125
- setTempDisplayName(text);
1126
- break;
1127
- case 'username':
1128
- setTempUsername(text);
1129
- break;
1130
- case 'email':
1131
- setTempEmail(text);
1132
- break;
1133
- case 'bio':
1134
- setTempBio(text);
1135
- break;
1136
- case 'location':
1137
- setTempLocation(text);
1138
- break;
1139
- case 'links':
1140
- setTempLinks(text.split(',').map(s => s.trim()).filter(Boolean));
1141
- break;
1142
- }
1143
- };
1144
- return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1145
- style: [styles.editingFieldContainer, {
1146
- backgroundColor: colors.background
1147
- }],
1148
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1149
- style: styles.editingFieldContent,
1150
- children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1151
- style: styles.newValueSection,
1152
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1153
- style: styles.editingFieldHeader,
1154
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1155
- style: [styles.editingFieldLabel, {
1156
- color: colors.text
1157
- }],
1158
- children: config.label
1159
- })
1160
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TextInput, {
1161
- style: [config.multiline ? styles.editingFieldTextArea : styles.editingFieldInput, {
1162
- backgroundColor: themeStyles.isDarkTheme ? '#1C1C1E' : '#F2F2F7',
1163
- color: themeStyles.isDarkTheme ? '#FFFFFF' : '#000000',
1164
- borderColor: themeStyles.isDarkTheme ? '#38383A' : '#E5E5EA'
1165
- }],
1166
- value: tempValue,
1167
- onChangeText: setTempValue,
1168
- placeholder: config.placeholder,
1169
- placeholderTextColor: themeStyles.isDarkTheme ? '#636366' : '#8E8E93',
1170
- multiline: config.multiline,
1171
- numberOfLines: config.multiline ? 6 : 1,
1172
- keyboardType: config.keyboardType,
1173
- autoFocus: true,
1174
- selectionColor: themeStyles.primaryColor
1175
- })]
1176
- })
1177
- })
1178
- });
1179
- };
1180
287
  if (userLoading || !isAuthenticated) {
1181
288
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1182
289
  style: [styles.container, {
@@ -1189,368 +296,265 @@ const AccountSettingsScreen = ({
1189
296
  })
1190
297
  });
1191
298
  }
1192
- return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
299
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1193
300
  style: [styles.container, {
1194
301
  backgroundColor: themeStyles.backgroundColor
1195
302
  }],
1196
- children: [editingField ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1197
- style: [styles.editingHeader, {
1198
- backgroundColor: colors.background,
1199
- borderBottomColor: colors.border
1200
- }],
303
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.ScrollView, {
304
+ ref: scrollViewRef,
305
+ style: styles.content,
306
+ contentContainerStyle: styles.scrollContent,
307
+ showsVerticalScrollIndicator: false,
1201
308
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1202
- style: styles.editingHeaderContent,
1203
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1204
- style: [styles.editingBackButton, {
1205
- backgroundColor: colors.card
309
+ style: [styles.headerContainer, styles.headerSection],
310
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
311
+ style: [styles.modernTitle, {
312
+ color: themeStyles.textColor,
313
+ marginBottom: 0,
314
+ marginTop: 0
1206
315
  }],
1207
- onPress: cancelEditing,
1208
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.Ionicons, {
1209
- name: "chevron-back",
1210
- size: 20,
1211
- color: colors.tint
1212
- })
1213
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1214
- style: styles.editingTitleContainer
1215
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity, {
1216
- style: [styles.editingSaveButton, {
1217
- opacity: isSaving ? 0.5 : 1,
1218
- backgroundColor: colors.card
316
+ children: t('accountOverview.items.editProfile.title') || t('editProfile.title') || 'Edit Profile'
317
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
318
+ style: [styles.modernSubtitle, {
319
+ color: colors.secondaryText,
320
+ marginBottom: 0,
321
+ marginTop: 0
1219
322
  }],
1220
- onPress: () => saveField(editingField),
1221
- disabled: isSaving,
1222
- children: isSaving ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
1223
- size: "small",
1224
- color: colors.tint
1225
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1226
- style: [styles.editingSaveButtonText, {
1227
- color: colors.tint
1228
- }],
1229
- children: "Save"
1230
- })
323
+ children: t('accountOverview.items.editProfile.subtitle') || t('editProfile.subtitle') || 'Manage your profile and preferences'
1231
324
  })]
1232
325
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1233
- style: styles.editingHeaderBottom,
1234
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1235
- style: [styles.editingIconContainer, {
1236
- backgroundColor: editingField === 'displayName' ? `${colors.sidebarIconPersonalInfo}20` : editingField === 'username' ? `${colors.sidebarIconData}20` : editingField === 'email' ? `${colors.sidebarIconSecurity}20` : editingField === 'bio' ? `${colors.sidebarIconPersonalInfo}20` : editingField === 'location' ? `${colors.sidebarIconSharing}20` : editingField === 'links' ? `${colors.sidebarIconPersonalInfo}20` : `${colors.tint}20`
326
+ ref: ref => {
327
+ avatarSectionRef.current = ref;
328
+ profilePictureSectionRef.current = ref;
329
+ },
330
+ style: styles.section,
331
+ onLayout: event => {
332
+ const {
333
+ y
334
+ } = event.nativeEvent.layout;
335
+ setProfilePictureSectionY(y);
336
+ },
337
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
338
+ style: [styles.sectionTitle, {
339
+ color: colors.secondaryText
1237
340
  }],
1238
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_vectorIcons.MaterialCommunityIcons, {
1239
- name: editingField === 'displayName' ? 'account-outline' : editingField === 'username' ? 'at' : editingField === 'email' ? 'email-outline' : editingField === 'bio' ? 'text-box-outline' : editingField === 'location' ? 'map-marker-outline' : editingField === 'links' ? 'link-variant' : 'account-outline',
1240
- size: 28,
1241
- color: editingField === 'displayName' ? colors.sidebarIconPersonalInfo : editingField === 'username' ? colors.sidebarIconData : editingField === 'email' ? colors.sidebarIconSecurity : editingField === 'bio' ? colors.sidebarIconPersonalInfo : editingField === 'location' ? colors.sidebarIconSharing : editingField === 'links' ? colors.sidebarIconPersonalInfo : colors.tint
1242
- })
1243
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1244
- style: [styles.editingBottomTitle, {
1245
- color: colors.text
1246
- }],
1247
- children: editingField === 'displayName' ? t('editProfile.items.displayName.title') || 'Display Name' : editingField === 'username' ? t('editProfile.items.username.title') || 'Username' : editingField === 'email' ? t('editProfile.items.email.title') || 'Email' : editingField === 'bio' ? t('editProfile.items.bio.title') || 'Bio' : editingField === 'location' ? t('editProfile.items.locations.title') || 'Location' : editingField === 'links' ? t('editProfile.items.links.title') || 'Links' : 'Field'
1248
- })]
1249
- })]
1250
- }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ScrollView, {
1251
- ref: scrollViewRef,
1252
- style: editingField ? styles.contentEditing : styles.content,
1253
- contentContainerStyle: styles.scrollContent,
1254
- showsVerticalScrollIndicator: false,
1255
- children: editingField ?
1256
- /*#__PURE__*/
1257
- // Show only the editing interface when editing
1258
- (0, _jsxRuntime.jsx)(_reactNative.View, {
1259
- style: styles.editingOnlyContainer,
1260
- children: renderEditingField(editingField)
1261
- }) :
1262
- /*#__PURE__*/
1263
- // Show all settings when not editing
1264
- (0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
1265
- children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1266
- style: [styles.headerContainer, styles.headerSection],
1267
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1268
- style: [styles.modernTitle, {
1269
- color: themeStyles.textColor,
1270
- marginBottom: 0,
1271
- marginTop: 0
1272
- }],
1273
- children: t('accountOverview.items.editProfile.title') || t('editProfile.title') || 'Edit Profile'
1274
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1275
- style: [styles.modernSubtitle, {
1276
- color: colors.secondaryText,
1277
- marginBottom: 0,
1278
- marginTop: 0
1279
- }],
1280
- children: t('accountOverview.items.editProfile.subtitle') || t('editProfile.subtitle') || 'Manage your profile and preferences'
1281
- })]
1282
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1283
- ref: ref => {
1284
- avatarSectionRef.current = ref;
1285
- profilePictureSectionRef.current = ref;
1286
- },
1287
- style: styles.section,
1288
- onLayout: event => {
1289
- const {
1290
- y
1291
- } = event.nativeEvent.layout;
1292
- setAvatarSectionY(y);
1293
- setProfilePictureSectionY(y);
1294
- },
1295
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1296
- style: [styles.sectionTitle, {
1297
- color: colors.secondaryText
1298
- }],
1299
- children: t('editProfile.sections.profilePicture') || 'PROFILE PICTURE'
1300
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1301
- style: styles.groupedSectionWrapper,
1302
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
1303
- items: [{
1304
- id: 'profile-photo',
1305
- customIcon: optimisticAvatarId || avatarFileId ? isUpdatingAvatar ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
1306
- style: {
1307
- position: 'relative',
1308
- width: 36,
1309
- height: 36
1310
- },
1311
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.Image, {
1312
- source: {
1313
- uri: oxyServices.getFileDownloadUrl(optimisticAvatarId || avatarFileId, 'thumb')
1314
- },
1315
- style: {
1316
- width: 36,
1317
- height: 36,
1318
- borderRadius: 18,
1319
- opacity: 0.6
1320
- }
1321
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1322
- style: {
1323
- position: 'absolute',
1324
- top: 0,
1325
- left: 0,
1326
- right: 0,
1327
- bottom: 0,
1328
- justifyContent: 'center',
1329
- alignItems: 'center',
1330
- backgroundColor: colorScheme === 'dark' ? 'rgba(0, 0, 0, 0.4)' : 'rgba(255, 255, 255, 0.7)',
1331
- borderRadius: 18
1332
- },
1333
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
1334
- size: "small",
1335
- color: colors.tint
1336
- })
1337
- })]
1338
- }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
341
+ children: t('editProfile.sections.profilePicture') || 'PROFILE PICTURE'
342
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
343
+ style: styles.groupedSectionWrapper,
344
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
345
+ items: [{
346
+ id: 'profile-photo',
347
+ customIcon: optimisticAvatarId || avatarFileId ? isUpdatingAvatar ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Animated.View, {
348
+ style: {
349
+ position: 'relative',
350
+ width: 36,
351
+ height: 36
352
+ },
353
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Animated.Image, {
1339
354
  source: {
1340
355
  uri: oxyServices.getFileDownloadUrl(optimisticAvatarId || avatarFileId, 'thumb')
1341
356
  },
1342
357
  style: {
1343
358
  width: 36,
1344
359
  height: 36,
1345
- borderRadius: 18
360
+ borderRadius: 18,
361
+ opacity: 0.6
1346
362
  }
1347
- }) : undefined,
1348
- icon: !(optimisticAvatarId || avatarFileId) ? 'account-outline' : undefined,
1349
- iconColor: colors.sidebarIconPersonalInfo,
1350
- title: 'Profile Photo',
1351
- subtitle: isUpdatingAvatar ? 'Updating profile picture...' : avatarFileId ? 'Tap to change your profile picture' : 'Tap to add a profile picture',
1352
- onPress: isUpdatingAvatar ? undefined : openAvatarPicker,
1353
- disabled: isUpdatingAvatar
1354
- }, ...(avatarFileId && !isUpdatingAvatar ? [{
1355
- id: 'remove-profile-photo',
1356
- icon: 'delete-outline',
1357
- iconColor: colors.sidebarIconSharing,
1358
- title: 'Remove Photo',
1359
- subtitle: 'Delete current profile picture',
1360
- onPress: handleAvatarRemove
1361
- }] : [])]
1362
- })
1363
- })]
1364
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1365
- ref: basicInfoSectionRef,
1366
- style: styles.section,
1367
- onLayout: event => {
1368
- const {
1369
- y
1370
- } = event.nativeEvent.layout;
1371
- setBasicInfoSectionY(y);
1372
- },
1373
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1374
- style: [styles.sectionTitle, {
1375
- color: colors.secondaryText
1376
- }],
1377
- children: t('editProfile.sections.basicInfo') || 'BASIC INFORMATION'
1378
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1379
- style: styles.groupedSectionWrapper,
1380
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
1381
- items: [{
1382
- id: 'display-name',
1383
- icon: 'account-outline',
1384
- iconColor: colors.sidebarIconPersonalInfo,
1385
- title: t('editProfile.items.displayName.title') || 'Display Name',
1386
- subtitle: [displayName, lastName].filter(Boolean).join(' ') || t('editProfile.items.displayName.add') || 'Add your display name',
1387
- onPress: handleOpenDisplayNameModal
1388
- }, {
1389
- id: 'username',
1390
- icon: 'at',
1391
- iconColor: colors.sidebarIconData,
1392
- title: t('editProfile.items.username.title') || 'Username',
1393
- subtitle: username || t('editProfile.items.username.choose') || 'Choose a username',
1394
- onPress: handleOpenUsernameModal
1395
- }, {
1396
- id: 'email',
1397
- icon: 'email-outline',
1398
- iconColor: colors.sidebarIconSecurity,
1399
- title: t('editProfile.items.email.title') || 'Email',
1400
- subtitle: email || t('editProfile.items.email.add') || 'Add your email address',
1401
- onPress: handleOpenEmailModal
1402
- }]
1403
- })
1404
- })]
1405
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1406
- ref: aboutSectionRef,
1407
- style: styles.section,
1408
- onLayout: event => {
1409
- const {
1410
- y
1411
- } = event.nativeEvent.layout;
1412
- setAboutSectionY(y);
1413
- },
1414
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1415
- style: [styles.sectionTitle, {
1416
- color: colors.secondaryText
1417
- }],
1418
- children: t('editProfile.sections.about') || 'ABOUT YOU'
1419
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1420
- style: styles.groupedSectionWrapper,
1421
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
1422
- items: [{
1423
- id: 'bio',
1424
- icon: 'text-box-outline',
1425
- iconColor: colors.sidebarIconPersonalInfo,
1426
- title: t('editProfile.items.bio.title') || 'Bio',
1427
- subtitle: bio || t('editProfile.items.bio.placeholder') || 'Tell people about yourself',
1428
- onPress: handleOpenBioModal
1429
- }, {
1430
- id: 'locations',
1431
- icon: 'map-marker-outline',
1432
- iconColor: colors.sidebarIconSharing,
1433
- title: t('editProfile.items.locations.title') || 'Locations',
1434
- subtitle: locations.length > 0 ? locations.length === 1 ? t('editProfile.items.locations.count', {
1435
- count: locations.length
1436
- }) || `${locations.length} location added` : t('editProfile.items.locations.count_plural', {
1437
- count: locations.length
1438
- }) || `${locations.length} locations added` : t('editProfile.items.locations.add') || 'Add your locations',
1439
- onPress: handleOpenLocationModal
1440
- }, {
1441
- id: 'links',
1442
- icon: 'link-variant',
1443
- iconColor: colors.sidebarIconSharing,
1444
- title: t('editProfile.items.links.title') || 'Links',
1445
- subtitle: linksMetadata.length > 0 ? linksMetadata.length === 1 ? t('editProfile.items.links.count', {
1446
- count: linksMetadata.length
1447
- }) || `${linksMetadata.length} link added` : t('editProfile.items.links.count_plural', {
1448
- count: linksMetadata.length
1449
- }) || `${linksMetadata.length} links added` : t('editProfile.items.links.add') || 'Add your links',
1450
- onPress: handleOpenLinksModal
1451
- }]
1452
- })
1453
- })]
1454
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1455
- ref: quickActionsSectionRef,
1456
- style: styles.section,
1457
- onLayout: event => {
1458
- const {
1459
- y
1460
- } = event.nativeEvent.layout;
1461
- setQuickActionsSectionY(y);
1462
- },
1463
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1464
- style: [styles.sectionTitle, {
1465
- color: colors.secondaryText
1466
- }],
1467
- children: t('editProfile.sections.quickActions') || 'QUICK ACTIONS'
1468
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1469
- style: styles.groupedSectionWrapper,
1470
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
1471
- items: [{
1472
- id: 'preview-profile',
1473
- icon: 'eye',
1474
- iconColor: colors.sidebarIconHome,
1475
- title: t('editProfile.items.previewProfile.title') || 'Preview Profile',
1476
- subtitle: t('editProfile.items.previewProfile.subtitle') || 'See how your profile looks to others',
1477
- onPress: () => navigate?.('Profile', {
1478
- userId: finalUser?.id
1479
- })
1480
- }, {
1481
- id: 'privacy-settings',
1482
- icon: 'shield-check',
1483
- iconColor: colors.sidebarIconSecurity,
1484
- title: t('editProfile.items.privacySettings.title') || 'Privacy Settings',
1485
- subtitle: t('editProfile.items.privacySettings.subtitle') || 'Control who can see your profile',
1486
- onPress: () => navigate?.('PrivacySettings')
1487
- }, {
1488
- id: 'verify-account',
1489
- icon: 'check-circle',
1490
- iconColor: colors.sidebarIconPersonalInfo,
1491
- title: t('editProfile.items.verifyAccount.title') || 'Verify Account',
1492
- subtitle: t('editProfile.items.verifyAccount.subtitle') || 'Get a verified badge',
1493
- onPress: () => navigate?.('AccountVerification')
1494
- }]
1495
- })
1496
- })]
1497
- }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
1498
- ref: securitySectionRef,
1499
- style: styles.section,
1500
- onLayout: event => {
1501
- const {
1502
- y
1503
- } = event.nativeEvent.layout;
1504
- setSecuritySectionY(y);
1505
- },
1506
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
1507
- style: [styles.sectionTitle, {
1508
- color: colors.secondaryText
1509
- }],
1510
- children: t('editProfile.sections.security') || 'SECURITY'
1511
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
1512
- style: styles.groupedSectionWrapper
1513
- })]
363
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
364
+ style: {
365
+ position: 'absolute',
366
+ top: 0,
367
+ left: 0,
368
+ right: 0,
369
+ bottom: 0,
370
+ justifyContent: 'center',
371
+ alignItems: 'center',
372
+ backgroundColor: colorScheme === 'dark' ? 'rgba(0, 0, 0, 0.4)' : 'rgba(255, 255, 255, 0.7)',
373
+ borderRadius: 18
374
+ },
375
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {
376
+ size: "small",
377
+ color: colors.tint
378
+ })
379
+ })]
380
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Image, {
381
+ source: {
382
+ uri: oxyServices.getFileDownloadUrl(optimisticAvatarId || avatarFileId, 'thumb')
383
+ },
384
+ style: {
385
+ width: 36,
386
+ height: 36,
387
+ borderRadius: 18
388
+ }
389
+ }) : undefined,
390
+ icon: !(optimisticAvatarId || avatarFileId) ? 'account-outline' : undefined,
391
+ iconColor: colors.sidebarIconPersonalInfo,
392
+ title: 'Profile Photo',
393
+ subtitle: isUpdatingAvatar ? 'Updating profile picture...' : avatarFileId ? 'Tap to change your profile picture' : 'Tap to add a profile picture',
394
+ onPress: isUpdatingAvatar ? undefined : openAvatarPicker,
395
+ disabled: isUpdatingAvatar
396
+ }, ...(avatarFileId && !isUpdatingAvatar ? [{
397
+ id: 'remove-profile-photo',
398
+ icon: 'delete-outline',
399
+ iconColor: colors.sidebarIconSharing,
400
+ title: 'Remove Photo',
401
+ subtitle: 'Delete current profile picture',
402
+ onPress: handleAvatarRemove
403
+ }] : [])]
404
+ })
1514
405
  })]
1515
- })
1516
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditDisplayNameModal.EditDisplayNameModal, {
1517
- visible: showEditDisplayNameModal,
1518
- onClose: () => setShowEditDisplayNameModal(false),
1519
- initialDisplayName: displayName,
1520
- initialLastName: lastName,
1521
- theme: normalizedTheme,
1522
- onSave: handleModalSave
1523
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditUsernameModal.EditUsernameModal, {
1524
- visible: showEditUsernameModal,
1525
- onClose: () => setShowEditUsernameModal(false),
1526
- initialValue: username,
1527
- theme: normalizedTheme,
1528
- onSave: handleModalSave
1529
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditEmailModal.EditEmailModal, {
1530
- visible: showEditEmailModal,
1531
- onClose: () => setShowEditEmailModal(false),
1532
- initialValue: email,
1533
- theme: normalizedTheme,
1534
- onSave: handleModalSave
1535
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditBioModal.EditBioModal, {
1536
- visible: showEditBioModal,
1537
- onClose: () => setShowEditBioModal(false),
1538
- initialValue: bio,
1539
- theme: normalizedTheme,
1540
- onSave: handleModalSave
1541
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditLocationModal.EditLocationModal, {
1542
- visible: showEditLocationModal,
1543
- onClose: () => setShowEditLocationModal(false),
1544
- initialLocations: locations,
1545
- theme: normalizedTheme,
1546
- onSave: handleModalSave
1547
- }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_EditLinksModal.EditLinksModal, {
1548
- visible: showEditLinksModal,
1549
- onClose: () => setShowEditLinksModal(false),
1550
- initialLinks: linksMetadata,
1551
- theme: normalizedTheme,
1552
- onSave: handleModalSave
1553
- })]
406
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
407
+ ref: basicInfoSectionRef,
408
+ style: styles.section,
409
+ onLayout: event => {
410
+ const {
411
+ y
412
+ } = event.nativeEvent.layout;
413
+ setBasicInfoSectionY(y);
414
+ },
415
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
416
+ style: [styles.sectionTitle, {
417
+ color: colors.secondaryText
418
+ }],
419
+ children: t('editProfile.sections.basicInfo') || 'BASIC INFORMATION'
420
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
421
+ style: styles.groupedSectionWrapper,
422
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
423
+ items: [{
424
+ id: 'display-name',
425
+ icon: 'account-outline',
426
+ iconColor: colors.sidebarIconPersonalInfo,
427
+ title: t('editProfile.items.displayName.title') || 'Display Name',
428
+ subtitle: [displayName, lastName].filter(Boolean).join(' ') || t('editProfile.items.displayName.add') || 'Add your display name',
429
+ onPress: handleOpenDisplayNameModal
430
+ }, {
431
+ id: 'username',
432
+ icon: 'at',
433
+ iconColor: colors.sidebarIconData,
434
+ title: t('editProfile.items.username.title') || 'Username',
435
+ subtitle: username || t('editProfile.items.username.choose') || 'Choose a username',
436
+ onPress: handleOpenUsernameModal
437
+ }, {
438
+ id: 'email',
439
+ icon: 'email-outline',
440
+ iconColor: colors.sidebarIconSecurity,
441
+ title: t('editProfile.items.email.title') || 'Email',
442
+ subtitle: email || t('editProfile.items.email.add') || 'Add your email address',
443
+ onPress: handleOpenEmailModal
444
+ }]
445
+ })
446
+ })]
447
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
448
+ ref: aboutSectionRef,
449
+ style: styles.section,
450
+ onLayout: event => {
451
+ const {
452
+ y
453
+ } = event.nativeEvent.layout;
454
+ setAboutSectionY(y);
455
+ },
456
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
457
+ style: [styles.sectionTitle, {
458
+ color: colors.secondaryText
459
+ }],
460
+ children: t('editProfile.sections.about') || 'ABOUT YOU'
461
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
462
+ style: styles.groupedSectionWrapper,
463
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
464
+ items: [{
465
+ id: 'bio',
466
+ icon: 'text-box-outline',
467
+ iconColor: colors.sidebarIconPersonalInfo,
468
+ title: t('editProfile.items.bio.title') || 'Bio',
469
+ subtitle: bio || t('editProfile.items.bio.placeholder') || 'Tell people about yourself',
470
+ onPress: handleOpenBioModal
471
+ }, {
472
+ id: 'locations',
473
+ icon: 'map-marker-outline',
474
+ iconColor: colors.sidebarIconSharing,
475
+ title: t('editProfile.items.locations.title') || 'Locations',
476
+ subtitle: locations.length > 0 ? locations.length === 1 ? t('editProfile.items.locations.count', {
477
+ count: locations.length
478
+ }) || `${locations.length} location added` : t('editProfile.items.locations.count_plural', {
479
+ count: locations.length
480
+ }) || `${locations.length} locations added` : t('editProfile.items.locations.add') || 'Add your locations',
481
+ onPress: handleOpenLocationModal
482
+ }, {
483
+ id: 'links',
484
+ icon: 'link-variant',
485
+ iconColor: colors.sidebarIconSharing,
486
+ title: t('editProfile.items.links.title') || 'Links',
487
+ subtitle: linksMetadata.length > 0 ? linksMetadata.length === 1 ? t('editProfile.items.links.count', {
488
+ count: linksMetadata.length
489
+ }) || `${linksMetadata.length} link added` : t('editProfile.items.links.count_plural', {
490
+ count: linksMetadata.length
491
+ }) || `${linksMetadata.length} links added` : t('editProfile.items.links.add') || 'Add your links',
492
+ onPress: handleOpenLinksModal
493
+ }]
494
+ })
495
+ })]
496
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
497
+ ref: quickActionsSectionRef,
498
+ style: styles.section,
499
+ onLayout: event => {
500
+ const {
501
+ y
502
+ } = event.nativeEvent.layout;
503
+ setQuickActionsSectionY(y);
504
+ },
505
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
506
+ style: [styles.sectionTitle, {
507
+ color: colors.secondaryText
508
+ }],
509
+ children: t('editProfile.sections.quickActions') || 'QUICK ACTIONS'
510
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
511
+ style: styles.groupedSectionWrapper,
512
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_index.GroupedSection, {
513
+ items: [{
514
+ id: 'preview-profile',
515
+ icon: 'eye',
516
+ iconColor: colors.sidebarIconHome,
517
+ title: t('editProfile.items.previewProfile.title') || 'Preview Profile',
518
+ subtitle: t('editProfile.items.previewProfile.subtitle') || 'See how your profile looks to others',
519
+ onPress: () => navigate?.('Profile', {
520
+ userId: finalUser?.id
521
+ })
522
+ }, {
523
+ id: 'privacy-settings',
524
+ icon: 'shield-check',
525
+ iconColor: colors.sidebarIconSecurity,
526
+ title: t('editProfile.items.privacySettings.title') || 'Privacy Settings',
527
+ subtitle: t('editProfile.items.privacySettings.subtitle') || 'Control who can see your profile',
528
+ onPress: () => navigate?.('PrivacySettings')
529
+ }, {
530
+ id: 'verify-account',
531
+ icon: 'check-circle',
532
+ iconColor: colors.sidebarIconPersonalInfo,
533
+ title: t('editProfile.items.verifyAccount.title') || 'Verify Account',
534
+ subtitle: t('editProfile.items.verifyAccount.subtitle') || 'Get a verified badge',
535
+ onPress: () => navigate?.('AccountVerification')
536
+ }]
537
+ })
538
+ })]
539
+ }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
540
+ ref: securitySectionRef,
541
+ style: styles.section,
542
+ onLayout: event => {
543
+ const {
544
+ y
545
+ } = event.nativeEvent.layout;
546
+ setSecuritySectionY(y);
547
+ },
548
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
549
+ style: [styles.sectionTitle, {
550
+ color: colors.secondaryText
551
+ }],
552
+ children: t('editProfile.sections.security') || 'SECURITY'
553
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
554
+ style: styles.groupedSectionWrapper
555
+ })]
556
+ })]
557
+ })
1554
558
  });
1555
559
  };
1556
560
  const styles = _reactNative.StyleSheet.create({
@@ -1561,13 +565,6 @@ const styles = _reactNative.StyleSheet.create({
1561
565
  content: {
1562
566
  flexShrink: 1
1563
567
  },
1564
- scrollView: {
1565
- flexShrink: 1
1566
- },
1567
- contentEditing: {
1568
- flex: 1,
1569
- padding: 0
1570
- },
1571
568
  scrollContent: (0, _spacing.createScreenContentStyle)(_spacing.HEADER_PADDING_TOP_SETTINGS),
1572
569
  headerContainer: {
1573
570
  width: '100%',
@@ -1581,7 +578,7 @@ const styles = _reactNative.StyleSheet.create({
1581
578
  gap: _spacing.COMPONENT_GAP
1582
579
  },
1583
580
  modernTitle: {
1584
- fontFamily: _fonts.fontFamilies.phuduBold,
581
+ fontFamily: _fonts.fontFamilies.interBold,
1585
582
  fontWeight: _reactNative.Platform.OS === 'web' ? 'bold' : undefined,
1586
583
  fontSize: 42,
1587
584
  lineHeight: 50.4,
@@ -1603,558 +600,14 @@ const styles = _reactNative.StyleSheet.create({
1603
600
  sectionTitle: {
1604
601
  fontSize: 13,
1605
602
  fontWeight: '600',
1606
- color: '#8E8E93',
1607
603
  marginBottom: 8,
1608
604
  marginTop: 4,
1609
605
  textTransform: 'uppercase',
1610
606
  letterSpacing: 0.5,
1611
- fontFamily: _fonts.fontFamilies.phuduSemiBold
607
+ fontFamily: _fonts.fontFamilies.interSemiBold
1612
608
  },
1613
609
  groupedSectionWrapper: {
1614
610
  backgroundColor: 'transparent'
1615
- },
1616
- userIcon: {
1617
- marginRight: 12
1618
- },
1619
- // Editing-only mode styles
1620
- editingOnlyContainer: {
1621
- flex: 1
1622
- },
1623
- editingFieldContainer: {
1624
- backgroundColor: '#fff',
1625
- padding: 16,
1626
- flex: 1
1627
- },
1628
- editingFieldHeader: {
1629
- marginBottom: 8,
1630
- flexDirection: 'row',
1631
- alignItems: 'center'
1632
- },
1633
- editingFieldTitleContainer: {
1634
- flexDirection: 'row',
1635
- alignItems: 'center'
1636
- },
1637
- editingFieldIcon: {
1638
- marginRight: 12
1639
- },
1640
- editingFieldTitle: {
1641
- fontSize: 20,
1642
- fontWeight: '600',
1643
- color: '#000'
1644
- },
1645
- editingFieldContent: {
1646
- flex: 1
1647
- },
1648
- newValueSection: {
1649
- flex: 1
1650
- },
1651
- editingFieldLabel: {
1652
- fontSize: 13,
1653
- fontWeight: '600',
1654
- marginBottom: 8,
1655
- fontFamily: _fonts.fontFamilies.phuduSemiBold,
1656
- textTransform: 'uppercase',
1657
- letterSpacing: 0.5
1658
- },
1659
- editingFieldInput: {
1660
- borderWidth: _reactNative.StyleSheet.hairlineWidth,
1661
- borderRadius: 14,
1662
- padding: 16,
1663
- fontSize: 17,
1664
- minHeight: 52,
1665
- fontWeight: '400',
1666
- letterSpacing: -0.2
1667
- },
1668
- editingFieldDescription: {
1669
- fontSize: 14,
1670
- color: '#666',
1671
- marginBottom: 16
1672
- },
1673
- primaryButton: {
1674
- flexDirection: 'row',
1675
- alignItems: 'center',
1676
- justifyContent: 'center',
1677
- gap: 8,
1678
- // backgroundColor should be applied inline using colors.iconSecurity
1679
- paddingVertical: 12,
1680
- paddingHorizontal: 16,
1681
- borderRadius: 10
1682
- },
1683
- primaryButtonText: {
1684
- color: '#fff',
1685
- fontSize: 16,
1686
- fontWeight: '600'
1687
- },
1688
- editingFieldTextArea: {
1689
- borderWidth: _reactNative.StyleSheet.hairlineWidth,
1690
- borderRadius: 14,
1691
- padding: 16,
1692
- fontSize: 17,
1693
- minHeight: 120,
1694
- textAlignVertical: 'top',
1695
- fontWeight: '400',
1696
- letterSpacing: -0.2
1697
- },
1698
- // Custom editing header styles
1699
- editingHeader: {
1700
- paddingTop: _reactNative.Platform.OS === 'ios' ? 50 : 16,
1701
- paddingBottom: 0,
1702
- borderBottomWidth: _reactNative.StyleSheet.hairlineWidth
1703
- },
1704
- editingHeaderContent: {
1705
- flexDirection: 'row',
1706
- alignItems: 'center',
1707
- paddingHorizontal: 16,
1708
- minHeight: 44
1709
- },
1710
- editingBackButton: {
1711
- width: 36,
1712
- height: 36,
1713
- borderRadius: 20,
1714
- alignItems: 'center',
1715
- justifyContent: 'center',
1716
- marginRight: 12
1717
- },
1718
- editingTitleContainer: {
1719
- flex: 1,
1720
- flexDirection: 'column',
1721
- alignItems: 'flex-start',
1722
- justifyContent: 'flex-end',
1723
- paddingBottom: 8
1724
- },
1725
- editingTitleIcon: {
1726
- marginBottom: 4,
1727
- alignSelf: 'flex-start'
1728
- },
1729
- editingTitle: {
1730
- fontSize: 18,
1731
- fontWeight: '700',
1732
- fontFamily: _fonts.fontFamilies.phuduBold,
1733
- letterSpacing: -0.3,
1734
- lineHeight: 22,
1735
- textAlign: 'left',
1736
- alignSelf: 'flex-start'
1737
- },
1738
- editingSaveButton: {
1739
- paddingHorizontal: 16,
1740
- paddingVertical: 8,
1741
- borderRadius: 20,
1742
- minWidth: 60,
1743
- alignItems: 'center',
1744
- justifyContent: 'center'
1745
- },
1746
- editingSaveButtonText: {
1747
- fontSize: 16,
1748
- fontWeight: '600',
1749
- fontFamily: _fonts.fontFamilies.phuduSemiBold
1750
- },
1751
- editingHeaderBottom: {
1752
- flexDirection: 'column',
1753
- alignItems: 'flex-start',
1754
- paddingHorizontal: 20,
1755
- paddingBottom: 20,
1756
- paddingTop: 24
1757
- },
1758
- editingIconContainer: {
1759
- width: 64,
1760
- height: 64,
1761
- borderRadius: 20,
1762
- alignItems: 'center',
1763
- justifyContent: 'center',
1764
- marginBottom: 16
1765
- },
1766
- editingBottomTitle: {
1767
- fontSize: 28,
1768
- fontWeight: '700',
1769
- fontFamily: _fonts.fontFamilies.phuduBold,
1770
- letterSpacing: -0.5,
1771
- lineHeight: 34,
1772
- textAlign: 'left',
1773
- alignSelf: 'flex-start'
1774
- },
1775
- // Links management styles
1776
- addLinkSection: {
1777
- marginBottom: 16,
1778
- padding: 12,
1779
- backgroundColor: '#F8F9FA',
1780
- borderRadius: 8,
1781
- borderWidth: 1,
1782
- borderColor: '#E9ECEF'
1783
- },
1784
- addLinkLabel: {
1785
- fontSize: 14,
1786
- fontWeight: '600',
1787
- color: '#333',
1788
- marginBottom: 8
1789
- },
1790
- addLinkInputContainer: {
1791
- gap: 8
1792
- },
1793
- addLinkInput: {
1794
- backgroundColor: '#fff',
1795
- borderWidth: 1,
1796
- borderColor: '#E9ECEF',
1797
- borderRadius: 6,
1798
- padding: 10,
1799
- fontSize: 14,
1800
- minHeight: 36
1801
- },
1802
- addLinkButtons: {
1803
- flexDirection: 'row',
1804
- gap: 6
1805
- },
1806
- addLinkButton: {
1807
- flex: 1,
1808
- paddingVertical: 8,
1809
- paddingHorizontal: 12,
1810
- borderRadius: 6,
1811
- alignItems: 'center',
1812
- justifyContent: 'center'
1813
- },
1814
- cancelButton: {
1815
- backgroundColor: '#F8F9FA',
1816
- borderWidth: 1,
1817
- borderColor: '#E9ECEF'
1818
- },
1819
- cancelButtonText: {
1820
- fontSize: 14,
1821
- fontWeight: '600',
1822
- color: '#6C757D'
1823
- },
1824
- addButton: {
1825
- // backgroundColor should be applied inline using colors.iconSecurity
1826
- },
1827
- addButtonText: {
1828
- fontSize: 14,
1829
- fontWeight: '600',
1830
- color: '#fff'
1831
- },
1832
- addLinkTrigger: {
1833
- flexDirection: 'row',
1834
- alignItems: 'center',
1835
- padding: 12,
1836
- backgroundColor: '#F8F9FA',
1837
- borderRadius: 8,
1838
- borderWidth: 1,
1839
- borderColor: '#E9ECEF',
1840
- borderStyle: 'dashed',
1841
- marginBottom: 16
1842
- },
1843
- addLinkTriggerText: {
1844
- fontSize: 14,
1845
- fontWeight: '600',
1846
- // color should be applied inline using colors.iconSecurity
1847
- marginLeft: 6
1848
- },
1849
- linksList: {
1850
- gap: 8
1851
- },
1852
- linksListTitle: {
1853
- fontSize: 16,
1854
- fontWeight: '700',
1855
- color: '#333',
1856
- marginBottom: 6
1857
- },
1858
- linkItem: {
1859
- backgroundColor: '#fff',
1860
- borderRadius: 8,
1861
- borderWidth: 1,
1862
- borderColor: '#E9ECEF',
1863
- overflow: 'hidden'
1864
- },
1865
- linkItemContent: {
1866
- flexDirection: 'row',
1867
- padding: 12,
1868
- alignItems: 'center'
1869
- },
1870
- linkItemDragHandle: {
1871
- width: 24,
1872
- height: 24,
1873
- alignItems: 'center',
1874
- justifyContent: 'center',
1875
- marginRight: 8
1876
- },
1877
- linkItemInfo: {
1878
- flex: 1,
1879
- marginRight: 8
1880
- },
1881
- linkItemTitle: {
1882
- fontSize: 14,
1883
- fontWeight: '600',
1884
- color: '#333',
1885
- marginBottom: 2
1886
- },
1887
- linkItemDescription: {
1888
- fontSize: 12,
1889
- color: '#666',
1890
- marginBottom: 2
1891
- },
1892
- linkItemUrl: {
1893
- fontSize: 12,
1894
- color: '#6C757D'
1895
- },
1896
- linkItemActions: {
1897
- flexDirection: 'row',
1898
- gap: 6
1899
- },
1900
- linkItemButton: {
1901
- width: 28,
1902
- height: 28,
1903
- borderRadius: 14,
1904
- backgroundColor: '#F8F9FA',
1905
- alignItems: 'center',
1906
- justifyContent: 'center'
1907
- },
1908
- linkItemDivider: {
1909
- height: 1,
1910
- backgroundColor: '#E9ECEF',
1911
- marginHorizontal: 12
1912
- },
1913
- reorderHint: {
1914
- padding: 8,
1915
- alignItems: 'center'
1916
- },
1917
- reorderHintText: {
1918
- fontSize: 12,
1919
- color: '#999',
1920
- fontStyle: 'italic'
1921
- },
1922
- reorderButtons: {
1923
- flexDirection: 'column',
1924
- gap: 2
1925
- },
1926
- reorderButton: {
1927
- width: 20,
1928
- height: 16,
1929
- borderRadius: 3,
1930
- backgroundColor: '#F8F9FA',
1931
- alignItems: 'center',
1932
- justifyContent: 'center',
1933
- borderWidth: 1,
1934
- borderColor: '#E9ECEF'
1935
- },
1936
- reorderButtonDisabled: {
1937
- opacity: 0.3
1938
- },
1939
- linkItemImage: {
1940
- width: 32,
1941
- height: 32,
1942
- borderRadius: 16,
1943
- // backgroundColor should be applied inline using colors.iconSecurity
1944
- alignItems: 'center',
1945
- justifyContent: 'center',
1946
- marginRight: 8
1947
- },
1948
- linkItemImageText: {
1949
- fontSize: 12,
1950
- fontWeight: '600',
1951
- color: '#fff'
1952
- },
1953
- fetchingText: {
1954
- fontSize: 12,
1955
- // color should be applied inline using colors.iconSecurity
1956
- fontStyle: 'italic'
1957
- },
1958
- linksFieldContent: {
1959
- flex: 1,
1960
- marginLeft: 12
1961
- },
1962
- linksPreview: {
1963
- marginTop: 4,
1964
- flexDirection: 'column'
1965
- },
1966
- linksPreviewContainer: {
1967
- marginTop: 4,
1968
- flexDirection: 'column',
1969
- width: '100%'
1970
- },
1971
- linkPreviewItem: {
1972
- flexDirection: 'row',
1973
- alignItems: 'center',
1974
- marginBottom: 4
1975
- },
1976
- linkPreviewImage: {
1977
- width: 20,
1978
- height: 20,
1979
- borderRadius: 10,
1980
- // backgroundColor should be applied inline using colors.iconSecurity
1981
- alignItems: 'center',
1982
- justifyContent: 'center',
1983
- marginRight: 6
1984
- },
1985
- linkPreviewImageText: {
1986
- fontSize: 10,
1987
- fontWeight: '600',
1988
- color: '#fff'
1989
- },
1990
- linkPreviewTitle: {
1991
- fontSize: 13,
1992
- color: '#666',
1993
- flex: 1
1994
- },
1995
- linkPreviewContent: {
1996
- flex: 1
1997
- },
1998
- linkPreviewSubtitle: {
1999
- fontSize: 11,
2000
- color: '#999',
2001
- marginTop: 1
2002
- },
2003
- linkPreviewMore: {
2004
- fontSize: 12,
2005
- color: '#999',
2006
- fontStyle: 'italic'
2007
- },
2008
- // Location management styles
2009
- addLocationSection: {
2010
- marginBottom: 16
2011
- },
2012
- addLocationLabel: {
2013
- fontSize: 14,
2014
- fontWeight: '600',
2015
- color: '#333',
2016
- marginBottom: 8,
2017
- fontFamily: _fonts.fontFamilies.phuduSemiBold
2018
- },
2019
- searchingText: {
2020
- fontSize: 12,
2021
- // color should be applied inline using colors.iconSecurity
2022
- fontStyle: 'italic'
2023
- },
2024
- addLocationInputContainer: {
2025
- marginBottom: 8
2026
- },
2027
- addLocationInput: {
2028
- backgroundColor: '#fff',
2029
- borderWidth: 2,
2030
- borderColor: '#e0e0e0',
2031
- borderRadius: 12,
2032
- padding: 16,
2033
- fontSize: 17,
2034
- minHeight: 52,
2035
- fontWeight: '400',
2036
- marginBottom: 8
2037
- },
2038
- addLocationButtons: {
2039
- flexDirection: 'row',
2040
- gap: 8
2041
- },
2042
- addLocationButton: {
2043
- flex: 1,
2044
- paddingVertical: 12,
2045
- paddingHorizontal: 16,
2046
- borderRadius: 8,
2047
- alignItems: 'center',
2048
- justifyContent: 'center'
2049
- },
2050
- addLocationTrigger: {
2051
- flexDirection: 'row',
2052
- alignItems: 'center',
2053
- paddingVertical: 12,
2054
- paddingHorizontal: 16,
2055
- backgroundColor: '#F8F9FA',
2056
- borderRadius: 8,
2057
- marginBottom: 16
2058
- },
2059
- addLocationTriggerText: {
2060
- marginLeft: 8,
2061
- fontSize: 16,
2062
- // color should be applied inline using colors.iconSecurity
2063
- fontWeight: '500'
2064
- },
2065
- searchResults: {
2066
- backgroundColor: '#fff',
2067
- borderWidth: 1,
2068
- borderColor: '#e0e0e0',
2069
- borderRadius: 8,
2070
- maxHeight: 200
2071
- },
2072
- searchResultItem: {
2073
- padding: 12,
2074
- borderBottomWidth: 1,
2075
- borderBottomColor: '#f0f0f0'
2076
- },
2077
- searchResultName: {
2078
- fontSize: 14,
2079
- fontWeight: '500',
2080
- color: '#333',
2081
- marginBottom: 2
2082
- },
2083
- searchResultType: {
2084
- fontSize: 12,
2085
- color: '#666',
2086
- textTransform: 'capitalize'
2087
- },
2088
- locationsList: {
2089
- marginTop: 8
2090
- },
2091
- locationsListTitle: {
2092
- fontSize: 14,
2093
- fontWeight: '600',
2094
- color: '#333',
2095
- marginBottom: 12,
2096
- fontFamily: _fonts.fontFamilies.phuduSemiBold
2097
- },
2098
- locationItem: {
2099
- marginBottom: 8
2100
- },
2101
- locationItemContent: {
2102
- flexDirection: 'row',
2103
- alignItems: 'center',
2104
- padding: 12,
2105
- backgroundColor: '#F8F9FA',
2106
- borderRadius: 8
2107
- },
2108
- locationItemDragHandle: {
2109
- marginRight: 12
2110
- },
2111
- locationItemInfo: {
2112
- flex: 1
2113
- },
2114
- locationItemHeader: {
2115
- flexDirection: 'row',
2116
- alignItems: 'center',
2117
- marginBottom: 4
2118
- },
2119
- locationItemName: {
2120
- fontSize: 14,
2121
- fontWeight: '500',
2122
- color: '#333',
2123
- flex: 1
2124
- },
2125
- locationLabel: {
2126
- // backgroundColor should be applied inline using colors.iconSecurity
2127
- paddingHorizontal: 6,
2128
- paddingVertical: 2,
2129
- borderRadius: 4,
2130
- marginLeft: 8
2131
- },
2132
- locationLabelText: {
2133
- fontSize: 10,
2134
- fontWeight: '600',
2135
- color: '#fff',
2136
- textTransform: 'uppercase'
2137
- },
2138
- locationCoordinates: {
2139
- fontSize: 12,
2140
- color: '#666',
2141
- fontFamily: 'monospace'
2142
- },
2143
- locationItemActions: {
2144
- marginLeft: 8
2145
- },
2146
- locationItemButton: {
2147
- width: 28,
2148
- height: 28,
2149
- borderRadius: 14,
2150
- backgroundColor: '#F8F9FA',
2151
- alignItems: 'center',
2152
- justifyContent: 'center'
2153
- },
2154
- locationItemDivider: {
2155
- height: 1,
2156
- backgroundColor: '#E9ECEF',
2157
- marginHorizontal: 12
2158
611
  }
2159
612
  });
2160
613
  var _default = exports.default = /*#__PURE__*/_react.default.memo(AccountSettingsScreen);