@oxyhq/services 5.3.11 → 5.4.1

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 (213) hide show
  1. package/README.md +21 -0
  2. package/lib/commonjs/assets/assets/icons/OxyServices.tsx +67 -0
  3. package/lib/commonjs/assets/assets/icons/logo_OxyServices.svg +1 -0
  4. package/lib/commonjs/assets/icons/OxyServices.js +53 -0
  5. package/lib/commonjs/assets/icons/OxyServices.js.map +1 -0
  6. package/lib/commonjs/assets/icons/logo_OxyServices.svg +1 -0
  7. package/lib/commonjs/core/index.js +119 -23
  8. package/lib/commonjs/core/index.js.map +1 -1
  9. package/lib/commonjs/index.js +2 -0
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/lib/sonner.js +15 -11
  12. package/lib/commonjs/lib/sonner.js.map +1 -1
  13. package/lib/commonjs/node/index.js +2 -0
  14. package/lib/commonjs/node/index.js.map +1 -1
  15. package/lib/commonjs/ui/components/GroupedItem.js +109 -0
  16. package/lib/commonjs/ui/components/GroupedItem.js.map +1 -0
  17. package/lib/commonjs/ui/components/GroupedSection.js +33 -0
  18. package/lib/commonjs/ui/components/GroupedSection.js.map +1 -0
  19. package/lib/commonjs/ui/components/OxyProvider.js +95 -112
  20. package/lib/commonjs/ui/components/OxyProvider.js.map +1 -1
  21. package/lib/commonjs/ui/components/ProfileCard.js +124 -0
  22. package/lib/commonjs/ui/components/ProfileCard.js.map +1 -0
  23. package/lib/commonjs/ui/components/QuickActions.js +87 -0
  24. package/lib/commonjs/ui/components/QuickActions.js.map +1 -0
  25. package/lib/commonjs/ui/components/Section.js +36 -0
  26. package/lib/commonjs/ui/components/Section.js.map +1 -0
  27. package/lib/commonjs/ui/components/SectionTitle.js +35 -0
  28. package/lib/commonjs/ui/components/SectionTitle.js.map +1 -0
  29. package/lib/commonjs/ui/components/bottomSheet/index.js +6 -6
  30. package/lib/commonjs/ui/components/index.js +97 -0
  31. package/lib/commonjs/ui/components/index.js.map +1 -0
  32. package/lib/commonjs/ui/navigation/OxyRouter.js +20 -3
  33. package/lib/commonjs/ui/navigation/OxyRouter.js.map +1 -1
  34. package/lib/commonjs/ui/screens/AccountCenterScreen.js +190 -207
  35. package/lib/commonjs/ui/screens/AccountCenterScreen.js.map +1 -1
  36. package/lib/commonjs/ui/screens/AccountManagementDemo.js +299 -0
  37. package/lib/commonjs/ui/screens/AccountManagementDemo.js.map +1 -0
  38. package/lib/commonjs/ui/screens/AccountOverviewScreen.js +669 -401
  39. package/lib/commonjs/ui/screens/AccountOverviewScreen.js.map +1 -1
  40. package/lib/commonjs/ui/screens/AccountSettingsScreen.js +695 -498
  41. package/lib/commonjs/ui/screens/AccountSettingsScreen.js.map +1 -1
  42. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js +451 -488
  43. package/lib/commonjs/ui/screens/AccountSwitcherScreen.js.map +1 -1
  44. package/lib/commonjs/ui/screens/AppInfoScreen.js +498 -185
  45. package/lib/commonjs/ui/screens/AppInfoScreen.js.map +1 -1
  46. package/lib/commonjs/ui/screens/BillingManagementScreen.js +636 -0
  47. package/lib/commonjs/ui/screens/BillingManagementScreen.js.map +1 -0
  48. package/lib/commonjs/ui/screens/FileManagementScreen.js +2497 -0
  49. package/lib/commonjs/ui/screens/FileManagementScreen.js.map +1 -0
  50. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js +1620 -0
  51. package/lib/commonjs/ui/screens/PremiumSubscriptionScreen.js.map +1 -0
  52. package/lib/commonjs/ui/screens/ProfileScreen.js +117 -13
  53. package/lib/commonjs/ui/screens/ProfileScreen.js.map +1 -1
  54. package/lib/commonjs/ui/screens/SessionManagementScreen.js.map +1 -1
  55. package/lib/commonjs/ui/screens/SignInScreen.js +1 -1
  56. package/lib/commonjs/ui/screens/SignUpScreen.js +1 -1
  57. package/lib/commonjs/utils/polyfills.js +42 -0
  58. package/lib/commonjs/utils/polyfills.js.map +1 -0
  59. package/lib/module/assets/assets/icons/OxyServices.tsx +67 -0
  60. package/lib/module/assets/assets/icons/logo_OxyServices.svg +1 -0
  61. package/lib/module/assets/icons/OxyServices.js +46 -0
  62. package/lib/module/assets/icons/OxyServices.js.map +1 -0
  63. package/lib/module/assets/icons/logo_OxyServices.svg +1 -0
  64. package/lib/module/core/index.js +119 -23
  65. package/lib/module/core/index.js.map +1 -1
  66. package/lib/module/index.js +3 -0
  67. package/lib/module/index.js.map +1 -1
  68. package/lib/module/lib/sonner.js +13 -1
  69. package/lib/module/lib/sonner.js.map +1 -1
  70. package/lib/module/node/index.js +3 -0
  71. package/lib/module/node/index.js.map +1 -1
  72. package/lib/module/ui/components/GroupedItem.js +104 -0
  73. package/lib/module/ui/components/GroupedItem.js.map +1 -0
  74. package/lib/module/ui/components/GroupedSection.js +28 -0
  75. package/lib/module/ui/components/GroupedSection.js.map +1 -0
  76. package/lib/module/ui/components/OxyProvider.js +97 -114
  77. package/lib/module/ui/components/OxyProvider.js.map +1 -1
  78. package/lib/module/ui/components/ProfileCard.js +119 -0
  79. package/lib/module/ui/components/ProfileCard.js.map +1 -0
  80. package/lib/module/ui/components/QuickActions.js +82 -0
  81. package/lib/module/ui/components/QuickActions.js.map +1 -0
  82. package/lib/module/ui/components/Section.js +31 -0
  83. package/lib/module/ui/components/Section.js.map +1 -0
  84. package/lib/module/ui/components/SectionTitle.js +30 -0
  85. package/lib/module/ui/components/SectionTitle.js.map +1 -0
  86. package/lib/module/ui/components/bottomSheet/index.js +2 -5
  87. package/lib/module/ui/components/bottomSheet/index.js.map +1 -1
  88. package/lib/module/ui/components/index.js +18 -0
  89. package/lib/module/ui/components/index.js.map +1 -0
  90. package/lib/module/ui/navigation/OxyRouter.js +20 -3
  91. package/lib/module/ui/navigation/OxyRouter.js.map +1 -1
  92. package/lib/module/ui/screens/AccountCenterScreen.js +191 -208
  93. package/lib/module/ui/screens/AccountCenterScreen.js.map +1 -1
  94. package/lib/module/ui/screens/AccountManagementDemo.js +296 -0
  95. package/lib/module/ui/screens/AccountManagementDemo.js.map +1 -0
  96. package/lib/module/ui/screens/AccountOverviewScreen.js +671 -403
  97. package/lib/module/ui/screens/AccountOverviewScreen.js.map +1 -1
  98. package/lib/module/ui/screens/AccountSettingsScreen.js +698 -501
  99. package/lib/module/ui/screens/AccountSettingsScreen.js.map +1 -1
  100. package/lib/module/ui/screens/AccountSwitcherScreen.js +450 -488
  101. package/lib/module/ui/screens/AccountSwitcherScreen.js.map +1 -1
  102. package/lib/module/ui/screens/AppInfoScreen.js +498 -186
  103. package/lib/module/ui/screens/AppInfoScreen.js.map +1 -1
  104. package/lib/module/ui/screens/BillingManagementScreen.js +631 -0
  105. package/lib/module/ui/screens/BillingManagementScreen.js.map +1 -0
  106. package/lib/module/ui/screens/FileManagementScreen.js +2492 -0
  107. package/lib/module/ui/screens/FileManagementScreen.js.map +1 -0
  108. package/lib/module/ui/screens/PremiumSubscriptionScreen.js +1615 -0
  109. package/lib/module/ui/screens/PremiumSubscriptionScreen.js.map +1 -0
  110. package/lib/module/ui/screens/ProfileScreen.js +118 -14
  111. package/lib/module/ui/screens/ProfileScreen.js.map +1 -1
  112. package/lib/module/ui/screens/SessionManagementScreen.js.map +1 -1
  113. package/lib/module/ui/screens/SignInScreen.js +1 -1
  114. package/lib/module/ui/screens/SignInScreen.js.map +1 -1
  115. package/lib/module/ui/screens/SignUpScreen.js +1 -1
  116. package/lib/module/ui/screens/SignUpScreen.js.map +1 -1
  117. package/lib/module/utils/polyfills.js +36 -0
  118. package/lib/module/utils/polyfills.js.map +1 -0
  119. package/lib/typescript/assets/icons/OxyServices.d.ts +29 -0
  120. package/lib/typescript/assets/icons/OxyServices.d.ts.map +1 -0
  121. package/lib/typescript/core/index.d.ts +26 -1
  122. package/lib/typescript/core/index.d.ts.map +1 -1
  123. package/lib/typescript/index.d.ts +1 -0
  124. package/lib/typescript/index.d.ts.map +1 -1
  125. package/lib/typescript/lib/sonner.d.ts +5 -1
  126. package/lib/typescript/lib/sonner.d.ts.map +1 -1
  127. package/lib/typescript/models/interfaces.d.ts +1 -2
  128. package/lib/typescript/models/interfaces.d.ts.map +1 -1
  129. package/lib/typescript/node/index.d.ts +1 -0
  130. package/lib/typescript/node/index.d.ts.map +1 -1
  131. package/lib/typescript/ui/components/GroupedItem.d.ts +17 -0
  132. package/lib/typescript/ui/components/GroupedItem.d.ts.map +1 -0
  133. package/lib/typescript/ui/components/GroupedSection.d.ts +19 -0
  134. package/lib/typescript/ui/components/GroupedSection.d.ts.map +1 -0
  135. package/lib/typescript/ui/components/OxyProvider.d.ts.map +1 -1
  136. package/lib/typescript/ui/components/ProfileCard.d.ts +20 -0
  137. package/lib/typescript/ui/components/ProfileCard.d.ts.map +1 -0
  138. package/lib/typescript/ui/components/QuickActions.d.ts +15 -0
  139. package/lib/typescript/ui/components/QuickActions.d.ts.map +1 -0
  140. package/lib/typescript/ui/components/Section.d.ts +11 -0
  141. package/lib/typescript/ui/components/Section.d.ts.map +1 -0
  142. package/lib/typescript/ui/components/SectionTitle.d.ts +9 -0
  143. package/lib/typescript/ui/components/SectionTitle.d.ts.map +1 -0
  144. package/lib/typescript/ui/components/bottomSheet/index.d.ts +3 -2
  145. package/lib/typescript/ui/components/bottomSheet/index.d.ts.map +1 -1
  146. package/lib/typescript/ui/components/index.d.ts +13 -0
  147. package/lib/typescript/ui/components/index.d.ts.map +1 -0
  148. package/lib/typescript/ui/navigation/OxyRouter.d.ts.map +1 -1
  149. package/lib/typescript/ui/navigation/types.d.ts +8 -0
  150. package/lib/typescript/ui/navigation/types.d.ts.map +1 -1
  151. package/lib/typescript/ui/screens/AccountCenterScreen.d.ts.map +1 -1
  152. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts +8 -0
  153. package/lib/typescript/ui/screens/AccountManagementDemo.d.ts.map +1 -0
  154. package/lib/typescript/ui/screens/AccountOverviewScreen.d.ts.map +1 -1
  155. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts +1 -4
  156. package/lib/typescript/ui/screens/AccountSettingsScreen.d.ts.map +1 -1
  157. package/lib/typescript/ui/screens/AccountSwitcherScreen.d.ts.map +1 -1
  158. package/lib/typescript/ui/screens/AppInfoScreen.d.ts.map +1 -1
  159. package/lib/typescript/ui/screens/BillingManagementScreen.d.ts +5 -0
  160. package/lib/typescript/ui/screens/BillingManagementScreen.d.ts.map +1 -0
  161. package/lib/typescript/ui/screens/FileManagementScreen.d.ts +8 -0
  162. package/lib/typescript/ui/screens/FileManagementScreen.d.ts.map +1 -0
  163. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts +5 -0
  164. package/lib/typescript/ui/screens/PremiumSubscriptionScreen.d.ts.map +1 -0
  165. package/lib/typescript/ui/screens/ProfileScreen.d.ts.map +1 -1
  166. package/lib/typescript/ui/screens/SessionManagementScreen.d.ts.map +1 -1
  167. package/lib/typescript/utils/polyfills.d.ts +6 -0
  168. package/lib/typescript/utils/polyfills.d.ts.map +1 -0
  169. package/package.json +11 -3
  170. package/src/__tests__/polyfills.test.ts +30 -0
  171. package/src/__tests__/setup.ts +43 -0
  172. package/src/__tests__/ui/screens/AccountSettingsScreen.test.tsx +8 -8
  173. package/src/assets/icons/OxyServices.tsx +67 -0
  174. package/src/assets/icons/logo_OxyServices.svg +1 -0
  175. package/src/core/index.ts +127 -19
  176. package/src/index.ts +3 -0
  177. package/src/lib/sonner.ts +10 -1
  178. package/src/models/interfaces.ts +1 -2
  179. package/src/node/index.ts +3 -0
  180. package/src/ui/components/GroupedItem.tsx +118 -0
  181. package/src/ui/components/GroupedSection.tsx +45 -0
  182. package/src/ui/components/OxyProvider.tsx +95 -120
  183. package/src/ui/components/ProfileCard.tsx +129 -0
  184. package/src/ui/components/QuickActions.tsx +90 -0
  185. package/src/ui/components/Section.tsx +37 -0
  186. package/src/ui/components/SectionTitle.tsx +31 -0
  187. package/src/ui/components/bottomSheet/index.tsx +13 -11
  188. package/src/ui/components/index.ts +15 -0
  189. package/src/ui/navigation/OxyRouter.tsx +20 -3
  190. package/src/ui/navigation/types.ts +10 -1
  191. package/src/ui/screens/AccountCenterScreen.tsx +188 -159
  192. package/src/ui/screens/AccountManagementDemo.tsx +297 -0
  193. package/src/ui/screens/AccountOverviewScreen.tsx +474 -310
  194. package/src/ui/screens/AccountSettingsScreen.tsx +648 -463
  195. package/src/ui/screens/AccountSwitcherScreen.tsx +385 -449
  196. package/src/ui/screens/AppInfoScreen.tsx +571 -140
  197. package/src/ui/screens/BillingManagementScreen.tsx +589 -0
  198. package/src/ui/screens/FileManagementScreen.tsx +2513 -0
  199. package/src/ui/screens/PremiumSubscriptionScreen.tsx +1628 -0
  200. package/src/ui/screens/ProfileScreen.tsx +101 -7
  201. package/src/ui/screens/SessionManagementScreen.tsx +1 -0
  202. package/src/ui/screens/SignInScreen.tsx +1 -1
  203. package/src/ui/screens/SignUpScreen.tsx +1 -1
  204. package/src/utils/polyfills.ts +34 -0
  205. package/lib/commonjs/lib/sonner.web.js +0 -17
  206. package/lib/commonjs/lib/sonner.web.js.map +0 -1
  207. package/lib/module/lib/sonner.web.js +0 -4
  208. package/lib/module/lib/sonner.web.js.map +0 -1
  209. package/lib/typescript/__tests__/ui/screens/AccountSettingsScreen.test.d.ts +0 -2
  210. package/lib/typescript/__tests__/ui/screens/AccountSettingsScreen.test.d.ts.map +0 -1
  211. package/lib/typescript/lib/sonner.web.d.ts +0 -2
  212. package/lib/typescript/lib/sonner.web.d.ts.map +0 -1
  213. package/src/lib/sonner.web.ts +0 -1
@@ -15,15 +15,20 @@ import { BaseScreenProps } from '../navigation/types';
15
15
  import { useOxy } from '../context/OxyContext';
16
16
  import OxyLogo from '../components/OxyLogo';
17
17
  import Avatar from '../components/Avatar';
18
+ import OxyIcon from '../components/icon/OxyIcon';
18
19
  import { fontFamilies } from '../styles/fonts';
19
20
  import { toast } from '../../lib/sonner';
21
+ import { Ionicons } from '@expo/vector-icons';
20
22
 
21
23
  const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
22
24
  onClose,
23
25
  theme,
26
+ navigate,
24
27
  }) => {
25
- const { user, logout, isLoading } = useOxy();
28
+ const { user, logout, isLoading, sessions, activeSessionId, oxyServices } = useOxy();
26
29
  const [showMoreAccounts, setShowMoreAccounts] = useState(false);
30
+ const [additionalAccountsData, setAdditionalAccountsData] = useState<any[]>([]);
31
+ const [loadingAdditionalAccounts, setLoadingAdditionalAccounts] = useState(false);
27
32
 
28
33
  const isDarkTheme = theme === 'dark';
29
34
  const textColor = isDarkTheme ? '#FFFFFF' : '#000000';
@@ -34,17 +39,58 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
34
39
  const dangerColor = '#D32F2F';
35
40
  const iconColor = isDarkTheme ? '#BBBBBB' : '#666666';
36
41
 
37
- // Mock additional accounts (for demo purposes)
38
- const additionalAccounts = [
39
- {
40
- id: '2',
41
- username: 'Albert Isern Alvarez',
42
- email: 'albert.isern.alvarez@gmail.com',
43
- avatar: {
44
- url: 'https://example.com/avatar2.jpg',
42
+ // Get additional accounts from sessions (excluding current user)
43
+ const additionalAccounts = sessions.filter(session =>
44
+ session.sessionId !== activeSessionId && session.userId !== user?.id
45
+ );
46
+
47
+ // Load user profiles for additional accounts
48
+ React.useEffect(() => {
49
+ const loadAdditionalAccountsData = async () => {
50
+ if (!oxyServices || additionalAccounts.length === 0) {
51
+ setAdditionalAccountsData([]);
52
+ return;
45
53
  }
46
- }
47
- ];
54
+
55
+ setLoadingAdditionalAccounts(true);
56
+ try {
57
+ const accountsData = await Promise.all(
58
+ additionalAccounts.map(async (session) => {
59
+ try {
60
+ const userProfile = await oxyServices.getUserBySession(session.sessionId);
61
+ return {
62
+ id: session.sessionId,
63
+ sessionId: session.sessionId,
64
+ username: userProfile.username,
65
+ email: userProfile.email,
66
+ name: userProfile.name,
67
+ avatar: userProfile.avatar,
68
+ userProfile
69
+ };
70
+ } catch (error) {
71
+ console.error(`Failed to load profile for session ${session.sessionId}:`, error);
72
+ return {
73
+ id: session.sessionId,
74
+ sessionId: session.sessionId,
75
+ username: session.username || 'Unknown User',
76
+ email: 'No email available',
77
+ avatar: null,
78
+ userProfile: null
79
+ };
80
+ }
81
+ })
82
+ );
83
+ setAdditionalAccountsData(accountsData);
84
+ } catch (error) {
85
+ console.error('Failed to load additional accounts:', error);
86
+ setAdditionalAccountsData([]);
87
+ } finally {
88
+ setLoadingAdditionalAccounts(false);
89
+ }
90
+ };
91
+
92
+ loadAdditionalAccountsData();
93
+ }, [sessions, activeSessionId, user?.id, oxyServices]);
48
94
 
49
95
  // Feature settings (with mock values)
50
96
  const features = {
@@ -106,28 +152,6 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
106
152
  );
107
153
  };
108
154
 
109
- const renderFeatureItem = (
110
- icon: React.ReactNode,
111
- title: string,
112
- value: string | null | undefined,
113
- onPress: () => void
114
- ) => (
115
- <TouchableOpacity
116
- style={[styles.featureItem, { borderColor }]}
117
- onPress={onPress}
118
- >
119
- <View style={styles.featureItemLeft}>
120
- <View style={styles.iconContainer}>
121
- {icon}
122
- </View>
123
- <Text style={[styles.featureItemTitle, { color: textColor }]}>{title}</Text>
124
- </View>
125
- {value !== undefined && (
126
- <Text style={[styles.featureItemValue, { color: iconColor }]}>{value}</Text>
127
- )}
128
- </TouchableOpacity>
129
- );
130
-
131
155
  if (!user) {
132
156
  return (
133
157
  <View style={[styles.container, { backgroundColor }]}>
@@ -145,191 +169,375 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
145
169
  }
146
170
 
147
171
  return (
148
- <View style={[styles.container, { backgroundColor }]}>
149
- <ScrollView style={styles.scrollView} contentContainerStyle={styles.scrollContainer}>
150
- <View style={styles.header}>
151
- <Text style={[styles.accountEmail, { color: textColor }]}>
152
- {user.email || user.username}
153
- </Text>
154
- <TouchableOpacity style={styles.closeIcon} onPress={onClose}>
155
- <Text style={{ fontSize: 24, color: textColor }}>×</Text>
172
+ <View style={[styles.container, { backgroundColor: '#f2f2f2' }]}>
173
+ {/* Header */}
174
+ <View style={styles.header}>
175
+ <Text style={styles.headerTitle}>Account</Text>
176
+ {onClose && (
177
+ <TouchableOpacity style={styles.closeButton} onPress={onClose}>
178
+ <Text style={styles.closeButtonText}>×</Text>
156
179
  </TouchableOpacity>
157
- </View>
180
+ )}
181
+ </View>
158
182
 
159
- <View style={[styles.profileContainer, { backgroundColor: secondaryBackgroundColor }]}>
160
- <View style={styles.avatarContainer}>
161
- <Avatar
162
- uri={user?.avatar?.url}
163
- name={user?.name?.full}
164
- size={70}
165
- theme={theme}
166
- />
183
+ <ScrollView style={styles.content}>
184
+ {/* User Profile Section */}
185
+ <View style={styles.section}>
186
+ <Text style={styles.sectionTitle}>Profile</Text>
187
+
188
+ <View style={[styles.settingItem, styles.firstSettingItem, styles.lastSettingItem]}>
189
+ <View style={styles.userIcon}>
190
+ <Avatar
191
+ uri={user?.avatar?.url}
192
+ name={user?.name?.full}
193
+ size={40}
194
+ theme={theme}
195
+ />
196
+ </View>
197
+ <View style={styles.settingInfo}>
198
+ <View>
199
+ <Text style={styles.settingLabel}>
200
+ {typeof user.name === 'string' ? user.name : user.name?.full || user.name?.first || user.username}
201
+ </Text>
202
+ <Text style={styles.settingDescription}>{user.email || user.username}</Text>
203
+ </View>
204
+ </View>
205
+ <TouchableOpacity
206
+ style={styles.manageButton}
207
+ onPress={() => toast.info('Manage your Oxy Account feature coming soon!')}
208
+ >
209
+ <Text style={styles.manageButtonText}>Manage</Text>
210
+ </TouchableOpacity>
167
211
  </View>
168
- <Text style={[styles.greeting, { color: textColor }]}>Hi, {user?.name?.first}!</Text>
212
+ </View>
169
213
 
170
- <TouchableOpacity
171
- style={[styles.manageAccountButton, { borderColor }]}
172
- onPress={() => toast.info('Manage your Oxy Account feature coming soon!')}
214
+ {/* Account Settings */}
215
+ <View style={styles.section}>
216
+ <Text style={styles.sectionTitle}>Account Settings</Text>
217
+
218
+ <TouchableOpacity
219
+ style={[styles.settingItem, styles.firstSettingItem]}
220
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'profile' })}
173
221
  >
174
- <Text style={[styles.manageAccountText, { color: textColor }]}>
175
- Manage your Oxy Account
176
- </Text>
222
+ <View style={styles.settingInfo}>
223
+ <OxyIcon name="person-circle" size={20} color="#007AFF" style={styles.settingIcon} />
224
+ <View>
225
+ <Text style={styles.settingLabel}>Edit Profile</Text>
226
+ <Text style={styles.settingDescription}>Update your personal information</Text>
227
+ </View>
228
+ </View>
229
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
177
230
  </TouchableOpacity>
178
- </View>
179
231
 
180
- {/* Multiple accounts section */}
181
- <TouchableOpacity
182
- style={[styles.sectionHeader, { borderColor }]}
183
- onPress={() => setShowMoreAccounts(!showMoreAccounts)}
184
- >
185
- <Text style={[styles.sectionHeaderText, { color: textColor }]}>
186
- {showMoreAccounts ? "Hide more accounts" : "Show more accounts"}
187
- </Text>
188
- <Text style={{ color: textColor, fontSize: 16 }}>
189
- {showMoreAccounts ? "▲" : "▼"}
190
- </Text>
191
- </TouchableOpacity>
232
+ <TouchableOpacity
233
+ style={styles.settingItem}
234
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'password' })}
235
+ >
236
+ <View style={styles.settingInfo}>
237
+ <OxyIcon name="shield-checkmark" size={20} color="#30D158" style={styles.settingIcon} />
238
+ <View>
239
+ <Text style={styles.settingLabel}>Security & Privacy</Text>
240
+ <Text style={styles.settingDescription}>Password, 2FA, and privacy settings</Text>
241
+ </View>
242
+ </View>
243
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
244
+ </TouchableOpacity>
245
+
246
+ <TouchableOpacity
247
+ style={styles.settingItem}
248
+ onPress={() => navigate?.('AccountSettings', { activeTab: 'notifications' })}
249
+ >
250
+ <View style={styles.settingInfo}>
251
+ <OxyIcon name="notifications" size={20} color="#FF9500" style={styles.settingIcon} />
252
+ <View>
253
+ <Text style={styles.settingLabel}>Notifications</Text>
254
+ <Text style={styles.settingDescription}>Manage your notification preferences</Text>
255
+ </View>
256
+ </View>
257
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
258
+ </TouchableOpacity>
259
+
260
+ <TouchableOpacity
261
+ style={[styles.settingItem]}
262
+ onPress={() => navigate?.('PremiumSubscription')}
263
+ >
264
+ <View style={styles.settingInfo}>
265
+ <OxyIcon name="star" size={20} color="#FFD700" style={styles.settingIcon} />
266
+ <View>
267
+ <Text style={styles.settingLabel}>Oxy+ Subscriptions</Text>
268
+ <Text style={styles.settingDescription}>{user.isPremium ? 'Manage your premium plan' : 'Upgrade to premium features'}</Text>
269
+ </View>
270
+ </View>
271
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
272
+ </TouchableOpacity>
192
273
 
274
+ {user.isPremium && (
275
+ <TouchableOpacity
276
+ style={[styles.settingItem, styles.lastSettingItem]}
277
+ onPress={() => navigate?.('BillingManagement')}
278
+ >
279
+ <View style={styles.settingInfo}>
280
+ <OxyIcon name="card" size={20} color="#34C759" style={styles.settingIcon} />
281
+ <View>
282
+ <Text style={styles.settingLabel}>Billing Management</Text>
283
+ <Text style={styles.settingDescription}>Payment methods and invoices</Text>
284
+ </View>
285
+ </View>
286
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
287
+ </TouchableOpacity>
288
+ )}
289
+ </View>
290
+
291
+ {/* Additional Accounts */}
193
292
  {showMoreAccounts && (
194
- <View style={[styles.accountsContainer, { backgroundColor: secondaryBackgroundColor }]}>
195
- {additionalAccounts.map((account) => (
196
- <TouchableOpacity
197
- key={account.id}
198
- style={[styles.accountItem, { borderColor }]}
199
- onPress={() => toast.info(`Switch to ${account.username}?`)}
200
- >
201
- <View style={styles.accountItemLeft}>
202
- {account.avatar.url ? (
203
- <Image source={{ uri: account.avatar.url }} style={styles.accountAvatar} />
204
- ) : (
205
- <View style={[styles.accountAvatar, { backgroundColor: primaryColor }]}>
206
- <Text style={styles.avatarText}>
207
- {account.username.charAt(0).toUpperCase()}
208
- </Text>
293
+ <View style={styles.section}>
294
+ <Text style={styles.sectionTitle}>Additional Accounts{additionalAccountsData.length > 0 ? ` (${additionalAccountsData.length})` : ''}</Text>
295
+
296
+ {loadingAdditionalAccounts ? (
297
+ <View style={[styles.settingItem, styles.firstSettingItem, styles.lastSettingItem]}>
298
+ <View style={styles.loadingContainer}>
299
+ <ActivityIndicator size="small" color="#007AFF" />
300
+ <Text style={styles.loadingText}>Loading accounts...</Text>
301
+ </View>
302
+ </View>
303
+ ) : additionalAccountsData.length > 0 ? (
304
+ <>
305
+ {additionalAccountsData.map((account, index) => (
306
+ <TouchableOpacity
307
+ key={account.id}
308
+ style={[
309
+ styles.settingItem,
310
+ index === 0 && styles.firstSettingItem,
311
+ index === additionalAccountsData.length - 1 && styles.lastSettingItem
312
+ ]}
313
+ onPress={() => {
314
+ toast.info(`Switch to ${account.username}?`);
315
+ // TODO: Implement account switching logic
316
+ // switchSession(account.sessionId);
317
+ }}
318
+ >
319
+ <View style={styles.userIcon}>
320
+ {account.avatar?.url ? (
321
+ <Image source={{ uri: account.avatar.url }} style={styles.accountAvatarImage} />
322
+ ) : (
323
+ <View style={styles.accountAvatarFallback}>
324
+ <Text style={styles.accountAvatarText}>
325
+ {account.username?.charAt(0).toUpperCase() || '?'}
326
+ </Text>
327
+ </View>
328
+ )}
209
329
  </View>
210
- )}
330
+ <View style={styles.settingInfo}>
331
+ <View>
332
+ <Text style={styles.settingLabel}>
333
+ {typeof account.name === 'object'
334
+ ? account.name?.full || account.name?.first || account.username
335
+ : account.name || account.username
336
+ }
337
+ </Text>
338
+ <Text style={styles.settingDescription}>{account.email || account.username}</Text>
339
+ </View>
340
+ </View>
341
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
342
+ </TouchableOpacity>
343
+ ))}
344
+ </>
345
+ ) : (
346
+ <View style={[styles.settingItem, styles.firstSettingItem, styles.lastSettingItem]}>
347
+ <View style={styles.settingInfo}>
348
+ <OxyIcon name="person-outline" size={20} color="#ccc" style={styles.settingIcon} />
211
349
  <View>
212
- <Text style={[styles.accountName, { color: textColor }]}>
213
- {account.username}
214
- </Text>
215
- <Text style={[styles.accountEmail, { color: iconColor }]}>
216
- {account.email}
217
- </Text>
350
+ <Text style={styles.settingLabel}>No other accounts</Text>
351
+ <Text style={styles.settingDescription}>Add another account to switch between them</Text>
218
352
  </View>
219
353
  </View>
220
- </TouchableOpacity>
221
- ))}
354
+ </View>
355
+ )}
356
+ </View>
357
+ )}
222
358
 
359
+ {/* Account Management */}
360
+ {showMoreAccounts && (
361
+ <View style={styles.section}>
362
+ <Text style={styles.sectionTitle}>Account Management</Text>
363
+
223
364
  <TouchableOpacity
224
- style={[styles.accountItem, { borderColor }]}
365
+ style={[styles.settingItem, styles.firstSettingItem]}
225
366
  onPress={handleAddAccount}
226
367
  >
227
- <View style={styles.accountItemLeft}>
228
- <View style={[styles.accountAvatar, styles.addAccountIcon, { borderColor }]}>
229
- <Text style={{ fontSize: 20, color: textColor }}>+</Text>
368
+ <View style={styles.settingInfo}>
369
+ <OxyIcon name="add" size={20} color="#007AFF" style={styles.settingIcon} />
370
+ <View>
371
+ <Text style={styles.settingLabel}>Add another account</Text>
372
+ <Text style={styles.settingDescription}>Sign in with a different account</Text>
230
373
  </View>
231
- <Text style={[styles.accountItemAction, { color: textColor }]}>
232
- Add another account
233
- </Text>
234
374
  </View>
375
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
235
376
  </TouchableOpacity>
236
377
 
237
378
  <TouchableOpacity
238
- style={[styles.accountItem, { borderColor }]}
379
+ style={[styles.settingItem, styles.lastSettingItem]}
239
380
  onPress={handleSignOutAll}
240
381
  >
241
- <View style={styles.accountItemLeft}>
242
- <View style={[styles.accountAvatar, styles.signOutIcon, { borderColor }]}>
243
- <Text style={{ fontSize: 20, color: textColor }}>←</Text>
382
+ <View style={styles.settingInfo}>
383
+ <OxyIcon name="log-out" size={20} color="#FF3B30" style={styles.settingIcon} />
384
+ <View>
385
+ <Text style={styles.settingLabel}>Sign out of all accounts</Text>
386
+ <Text style={styles.settingDescription}>Remove all accounts from this device</Text>
244
387
  </View>
245
- <Text style={[styles.accountItemAction, { color: textColor }]}>
246
- Sign out of all accounts
247
- </Text>
248
388
  </View>
389
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
249
390
  </TouchableOpacity>
250
391
  </View>
251
392
  )}
252
393
 
253
- <View style={styles.sectionHeader}>
254
- <Text style={[styles.sectionHeaderText, { color: textColor }]}>
255
- More from Oxy
256
- </Text>
257
- </View>
258
-
259
- <View style={[styles.featuresContainer, { backgroundColor: secondaryBackgroundColor }]}>
260
- {renderFeatureItem(
261
- <Text style={{ fontSize: 18 }}>🕒</Text>,
262
- 'History',
263
- 'Saving',
264
- () => toast.info('View your history feature coming soon!')
265
- )}
394
+ {/* Quick Actions */}
395
+ <View style={styles.section}>
396
+ <Text style={styles.sectionTitle}>Quick Actions</Text>
397
+
398
+ <TouchableOpacity
399
+ style={[styles.settingItem, styles.firstSettingItem]}
400
+ onPress={() => setShowMoreAccounts(!showMoreAccounts)}
401
+ >
402
+ <View style={styles.settingInfo}>
403
+ <OxyIcon name="people" size={20} color="#5856D6" style={styles.settingIcon} />
404
+ <View>
405
+ <Text style={styles.settingLabel}>
406
+ {showMoreAccounts ? 'Hide' : 'Show'} Account Switcher
407
+ </Text>
408
+ <Text style={styles.settingDescription}>
409
+ {showMoreAccounts
410
+ ? 'Hide account switcher'
411
+ : additionalAccountsData.length > 0
412
+ ? `Switch between ${additionalAccountsData.length + 1} accounts`
413
+ : loadingAdditionalAccounts
414
+ ? 'Loading additional accounts...'
415
+ : 'Manage multiple accounts'
416
+ }
417
+ </Text>
418
+ </View>
419
+ </View>
420
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
421
+ </TouchableOpacity>
266
422
 
267
- {renderFeatureItem(
268
- <Text style={{ fontSize: 18 }}>⏱️</Text>,
269
- 'Delete last 15 minutes',
270
- null,
271
- () => toast.info('Delete recent history feature coming soon!')
272
- )}
423
+ <TouchableOpacity
424
+ style={styles.settingItem}
425
+ onPress={() => toast.info('Download account data feature coming soon!')}
426
+ >
427
+ <View style={styles.settingInfo}>
428
+ <OxyIcon name="download" size={20} color="#34C759" style={styles.settingIcon} />
429
+ <View>
430
+ <Text style={styles.settingLabel}>Download My Data</Text>
431
+ <Text style={styles.settingDescription}>Export your account information</Text>
432
+ </View>
433
+ </View>
434
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
435
+ </TouchableOpacity>
273
436
 
274
- {renderFeatureItem(
275
- <Text style={{ fontSize: 18 }}>📋</Text>,
276
- 'Saves & Collections',
277
- null,
278
- () => toast.info('Saved items feature coming soon!')
279
- )}
437
+ <TouchableOpacity
438
+ style={[styles.settingItem, styles.lastSettingItem]}
439
+ onPress={() => toast.info('Delete account feature coming soon!')}
440
+ >
441
+ <View style={styles.settingInfo}>
442
+ <OxyIcon name="trash" size={20} color="#FF3B30" style={styles.settingIcon} />
443
+ <View>
444
+ <Text style={styles.settingLabel}>Delete Account</Text>
445
+ <Text style={styles.settingDescription}>Permanently delete your account</Text>
446
+ </View>
447
+ </View>
448
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
449
+ </TouchableOpacity>
450
+ </View>
280
451
 
281
- {renderFeatureItem(
282
- <Text style={{ fontSize: 18 }}>🔍</Text>,
283
- 'Search personalization',
284
- null,
285
- () => toast.info('Search personalization feature coming soon!')
286
- )}
452
+ {/* Support & Settings */}
453
+ <View style={styles.section}>
454
+ <Text style={styles.sectionTitle}>Support & Settings</Text>
455
+
456
+ <TouchableOpacity
457
+ style={[styles.settingItem, styles.firstSettingItem]}
458
+ onPress={() => toast.info('Account preferences coming soon!')}
459
+ >
460
+ <View style={styles.settingInfo}>
461
+ <OxyIcon name="settings" size={20} color="#8E8E93" style={styles.settingIcon} />
462
+ <View>
463
+ <Text style={styles.settingLabel}>Account Preferences</Text>
464
+ <Text style={styles.settingDescription}>Customize your account experience</Text>
465
+ </View>
466
+ </View>
467
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
468
+ </TouchableOpacity>
287
469
 
288
- {renderFeatureItem(
289
- <Text style={{ fontSize: 18 }}>🛡️</Text>,
290
- 'SafeSearch',
291
- features.safeSearch ? 'On' : 'Off',
292
- () => toast.info('SafeSearch settings feature coming soon!')
293
- )}
470
+ <TouchableOpacity
471
+ style={styles.settingItem}
472
+ onPress={() => toast.info('Help & support feature coming soon!')}
473
+ >
474
+ <View style={styles.settingInfo}>
475
+ <OxyIcon name="help-circle" size={20} color="#007AFF" style={styles.settingIcon} />
476
+ <View>
477
+ <Text style={styles.settingLabel}>Help & Support</Text>
478
+ <Text style={styles.settingDescription}>Get help with your account</Text>
479
+ </View>
480
+ </View>
481
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
482
+ </TouchableOpacity>
294
483
 
295
- {renderFeatureItem(
296
- <Text style={{ fontSize: 18 }}>🌐</Text>,
297
- 'Language',
298
- features.language,
299
- () => toast.info('Language settings feature coming soon!')
300
- )}
301
- </View>
484
+ <TouchableOpacity
485
+ style={styles.settingItem}
486
+ onPress={() => toast.info('Connected apps feature coming soon!')}
487
+ >
488
+ <View style={styles.settingInfo}>
489
+ <OxyIcon name="link" size={20} color="#32D74B" style={styles.settingIcon} />
490
+ <View>
491
+ <Text style={styles.settingLabel}>Connected Apps</Text>
492
+ <Text style={styles.settingDescription}>Manage third-party app access</Text>
493
+ </View>
494
+ </View>
495
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
496
+ </TouchableOpacity>
302
497
 
303
- <View style={styles.footerContainer}>
304
- <View style={styles.footerButtonsRow}>
305
- <TouchableOpacity
306
- style={styles.footerButton}
307
- onPress={() => toast.info('More settings feature coming soon!')}
308
- >
309
- <Text style={[styles.footerButtonText, { color: textColor }]}>
310
- More settings
311
- </Text>
312
- </TouchableOpacity>
498
+ <TouchableOpacity
499
+ style={styles.settingItem}
500
+ onPress={() => toast.info('Privacy Policy feature coming soon!')}
501
+ >
502
+ <View style={styles.settingInfo}>
503
+ <OxyIcon name="document-lock" size={20} color="#FF9F0A" style={styles.settingIcon} />
504
+ <View>
505
+ <Text style={styles.settingLabel}>Privacy Policy</Text>
506
+ <Text style={styles.settingDescription}>Learn about data protection</Text>
507
+ </View>
508
+ </View>
509
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
510
+ </TouchableOpacity>
313
511
 
314
- <TouchableOpacity
315
- style={styles.footerButton}
316
- onPress={() => toast.info('Help & support feature coming soon!')}
317
- >
318
- <Text style={[styles.footerButtonText, { color: textColor }]}>
319
- Help
320
- </Text>
321
- </TouchableOpacity>
322
- </View>
512
+ <TouchableOpacity
513
+ style={[styles.settingItem, styles.lastSettingItem]}
514
+ onPress={() => toast.info('Terms of Service feature coming soon!')}
515
+ >
516
+ <View style={styles.settingInfo}>
517
+ <OxyIcon name="document-text" size={20} color="#5856D6" style={styles.settingIcon} />
518
+ <View>
519
+ <Text style={styles.settingLabel}>Terms of Service</Text>
520
+ <Text style={styles.settingDescription}>Read our terms and conditions</Text>
521
+ </View>
522
+ </View>
523
+ <OxyIcon name="chevron-forward" size={16} color="#ccc" />
524
+ </TouchableOpacity>
525
+ </View>
323
526
 
324
- <View style={styles.footerLinksRow}>
325
- <TouchableOpacity onPress={() => toast.info('Privacy Policy feature coming soon!')}>
326
- <Text style={[styles.footerLink, { color: iconColor }]}>Privacy Policy</Text>
327
- </TouchableOpacity>
328
- <Text style={[{ color: iconColor, marginHorizontal: 5 }]}>•</Text>
329
- <TouchableOpacity onPress={() => toast.info('Terms of Service feature coming soon!')}>
330
- <Text style={[styles.footerLink, { color: iconColor }]}>Terms of Service</Text>
331
- </TouchableOpacity>
332
- </View>
527
+ {/* Sign Out */}
528
+ <View style={styles.section}>
529
+ <TouchableOpacity
530
+ style={[styles.settingItem, styles.firstSettingItem, styles.lastSettingItem, styles.signOutButton]}
531
+ onPress={confirmLogout}
532
+ >
533
+ <View style={styles.settingInfo}>
534
+ <OxyIcon name="log-out" size={20} color="#ff4757" style={styles.settingIcon} />
535
+ <View>
536
+ <Text style={[styles.settingLabel, { color: '#ff4757' }]}>Sign Out</Text>
537
+ <Text style={styles.settingDescription}>Sign out of your account</Text>
538
+ </View>
539
+ </View>
540
+ </TouchableOpacity>
333
541
  </View>
334
542
  </ScrollView>
335
543
  </View>
@@ -339,176 +547,132 @@ const AccountOverviewScreen: React.FC<BaseScreenProps> = ({
339
547
  const styles = StyleSheet.create({
340
548
  container: {
341
549
  flex: 1,
342
- },
343
- scrollView: {
344
- flex: 1,
345
- },
346
- scrollContainer: {
347
- padding: 20,
550
+ backgroundColor: '#f2f2f2',
348
551
  },
349
552
  header: {
553
+ paddingHorizontal: 20,
554
+ paddingTop: 60,
555
+ paddingBottom: 16,
556
+ backgroundColor: '#fff',
557
+ borderBottomWidth: 1,
558
+ borderBottomColor: '#e0e0e0',
350
559
  flexDirection: 'row',
351
560
  justifyContent: 'space-between',
352
561
  alignItems: 'center',
353
- marginBottom: 20,
354
- },
355
- closeIcon: {
356
- padding: 8,
357
- },
358
- profileContainer: {
359
- padding: 20,
360
- borderRadius: 15,
361
- alignItems: 'center',
362
- marginBottom: 20,
363
562
  },
364
- avatarContainer: {
365
- margin: 10,
366
- },
367
- avatar: {
368
- width: 70,
369
- height: 70,
370
- borderRadius: 35,
371
- justifyContent: 'center',
372
- alignItems: 'center',
373
- },
374
- avatarText: {
375
- color: 'white',
376
- fontSize: 30,
563
+ headerTitle: {
564
+ fontSize: 24,
377
565
  fontWeight: 'bold',
566
+ color: '#000',
378
567
  },
379
- greeting: {
380
- fontFamily: Platform.OS === 'web'
381
- ? 'Phudu' // Use CSS font name directly for web
382
- : 'Phudu-Bold', // Use exact font name as registered with Font.loadAsync
383
- fontWeight: Platform.OS === 'web' ? 'bold' : undefined, // Only apply fontWeight on web
384
- fontSize: 20,
385
- marginVertical: 10,
568
+ closeButton: {
569
+ padding: 8,
386
570
  },
387
- manageAccountButton: {
388
- paddingVertical: 10,
389
- paddingHorizontal: 20,
390
- borderWidth: 1,
391
- borderRadius: 20,
392
- marginTop: 10,
571
+ closeButtonText: {
572
+ fontSize: 24,
573
+ color: '#000',
574
+ fontWeight: '300',
393
575
  },
394
- manageAccountText: {
395
- fontSize: 14,
576
+ content: {
577
+ flex: 1,
578
+ padding: 16,
396
579
  },
397
- sectionHeader: {
398
- flexDirection: 'row',
399
- justifyContent: 'space-between',
400
- alignItems: 'center',
401
- paddingVertical: 15,
402
- borderBottomWidth: 1,
403
- marginBottom: 10,
580
+ section: {
581
+ marginBottom: 24,
404
582
  },
405
- sectionHeaderText: {
406
- fontFamily: Platform.OS === 'web'
407
- ? 'Phudu' // Use CSS font name directly for web
408
- : 'Phudu-Bold', // Use exact font name as registered with Font.loadAsync
409
- fontWeight: Platform.OS === 'web' ? 'bold' : undefined, // Only apply fontWeight on web
583
+ sectionTitle: {
410
584
  fontSize: 16,
585
+ fontWeight: '600',
586
+ color: '#333',
587
+ marginBottom: 12,
411
588
  },
412
- accountsContainer: {
413
- borderRadius: 15,
414
- marginBottom: 20,
415
- overflow: 'hidden',
416
- },
417
- accountItem: {
589
+ settingItem: {
590
+ backgroundColor: '#fff',
591
+ padding: 16,
418
592
  flexDirection: 'row',
419
- justifyContent: 'space-between',
420
593
  alignItems: 'center',
421
- padding: 15,
422
- borderBottomWidth: 1,
594
+ justifyContent: 'space-between',
595
+ marginBottom: 2,
423
596
  },
424
- accountItemLeft: {
597
+ firstSettingItem: {
598
+ borderTopLeftRadius: 24,
599
+ borderTopRightRadius: 24,
600
+ },
601
+ lastSettingItem: {
602
+ borderBottomLeftRadius: 24,
603
+ borderBottomRightRadius: 24,
604
+ marginBottom: 8,
605
+ },
606
+ settingInfo: {
425
607
  flexDirection: 'row',
426
608
  alignItems: 'center',
609
+ flex: 1,
427
610
  },
428
- accountAvatar: {
429
- width: 36,
430
- height: 36,
431
- borderRadius: 18,
432
- marginRight: 15,
433
- justifyContent: 'center',
434
- alignItems: 'center',
611
+ settingIcon: {
612
+ marginRight: 12,
435
613
  },
436
- accountName: {
437
- fontSize: 15,
614
+ settingLabel: {
615
+ fontSize: 16,
438
616
  fontWeight: '500',
617
+ color: '#333',
618
+ marginBottom: 2,
439
619
  },
440
- accountEmail: {
620
+ settingDescription: {
441
621
  fontSize: 14,
622
+ color: '#666',
442
623
  },
443
- accountItemAction: {
444
- fontSize: 15,
445
- },
446
- addAccountIcon: {
447
- backgroundColor: 'transparent',
448
- borderWidth: 1,
624
+ userIcon: {
625
+ marginRight: 12,
449
626
  },
450
- signOutIcon: {
451
- backgroundColor: 'transparent',
452
- borderWidth: 1,
627
+ manageButton: {
628
+ backgroundColor: '#007AFF',
629
+ paddingHorizontal: 16,
630
+ paddingVertical: 8,
631
+ borderRadius: 16,
453
632
  },
454
- featuresContainer: {
455
- borderRadius: 15,
456
- overflow: 'hidden',
457
- marginBottom: 20,
633
+ manageButtonText: {
634
+ color: '#fff',
635
+ fontSize: 14,
636
+ fontWeight: '500',
458
637
  },
459
- featureItem: {
460
- flexDirection: 'row',
461
- justifyContent: 'space-between',
462
- alignItems: 'center',
463
- padding: 15,
464
- borderBottomWidth: 1,
638
+ accountAvatarImage: {
639
+ width: 40,
640
+ height: 40,
641
+ borderRadius: 20,
465
642
  },
466
- featureItemLeft: {
467
- flexDirection: 'row',
643
+ accountAvatarFallback: {
644
+ width: 40,
645
+ height: 40,
646
+ borderRadius: 20,
647
+ backgroundColor: '#d169e5',
468
648
  alignItems: 'center',
469
- },
470
- iconContainer: {
471
- width: 36,
472
- height: 36,
473
649
  justifyContent: 'center',
474
- alignItems: 'center',
475
- marginRight: 15,
476
650
  },
477
- featureItemTitle: {
478
- fontSize: 15,
479
- fontWeight: '500',
651
+ accountAvatarText: {
652
+ color: 'white',
653
+ fontSize: 18,
654
+ fontWeight: 'bold',
480
655
  },
481
- featureItemValue: {
482
- fontSize: 14,
656
+ signOutButton: {
657
+ borderWidth: 1,
658
+ borderColor: '#ff4757',
483
659
  },
484
- footerContainer: {
485
- marginBottom: 30,
660
+ message: {
661
+ fontSize: 16,
662
+ textAlign: 'center',
663
+ marginTop: 24,
664
+ color: '#333',
486
665
  },
487
- footerButtonsRow: {
666
+ loadingContainer: {
488
667
  flexDirection: 'row',
489
- justifyContent: 'space-between',
490
- marginBottom: 20,
491
- },
492
- footerButton: {
493
- flex: 1,
494
- padding: 15,
495
668
  alignItems: 'center',
496
- },
497
- footerButtonText: {
498
- fontSize: 15,
499
- },
500
- footerLinksRow: {
501
- flexDirection: 'row',
502
669
  justifyContent: 'center',
503
- alignItems: 'center',
504
- },
505
- footerLink: {
506
- fontSize: 13,
670
+ paddingVertical: 20,
671
+ gap: 12,
507
672
  },
508
- message: {
673
+ loadingText: {
509
674
  fontSize: 16,
510
- textAlign: 'center',
511
- marginTop: 24,
675
+ color: '#666',
512
676
  },
513
677
  });
514
678